openwrt golang mysql_openwrt上golang程序的交叉编译(使用go-mips32和docker)三

背景

之前的文章介绍了三种交叉编译golang程序的方法。上一篇详细的讲了怎么用openwrt-go项目来进行编译。这篇文章打算讲一下怎么使用现成的交叉编译工具(不需要依赖openwrt)编译可以在openwrt和mips上运行的golang程序。例如 gomini/go-mips32。

一、先确认一下自己的CPU架构和系统平台

参考文章:《Go 语言跨平台路由器编译》

1. /proc/cpuinfocat /proc/cpuinfo

#输出信息

system type : Qualcomm Atheros QCA956X ver 1 rev 0

machine : Qualcomm Atheros AP152 reference board

processor : 0

cpu model : MIPS 74Kc V5.0

BogoMIPS : 385.84

wait instruction : yes

microsecond timers : yes

tlb_entries : 32

extra interrupt vector : yes

hardware watchpoint : yes, count: 4, address/irw mask: [0x0ffc, 0x0ffc, 0x0ffb, 0x0ffb]

isa : mips1 mips2 mips32r1 mips32r2

ASEs implemented : mips16 dsp dsp2

shadow register sets : 1

kscratch registers : 0

package : 0

core : 0

VCED exceptions : not available

VCEI exceptions : not availablefile /bin/busybox#file命令没有的话,可以通过opkg安装或者想想其它办法。另外,file /bin/sh 也是可以的

file /bin/busybox

#输出信息

/bin/busybox: ELF 32-bit MSB executable, MIPS, MIPS32 rel2 version 1 (SYSV), dynamically linked, interpreter /lib/ld-musl-mips-sf.so.1, corrupted section header sizemips的32位分了两种。大端和小端。

LITTLE-ENDIAN(小字节序、低字节序),即低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。大端就是反过来。

mips32是大端。(我测试的这个芯片是大端,所以用mips32)

mips32le是小端。

有其它和平台相关的疑问,例如arm和arm的版本之类的,请参考上面的文章。

GOARCH分类(芯片,可能部分不太准确,例如mips应该是mips32,可以自己google一下)

参考链接:《GOARCH列表》386

amd64

amd64p32

arm

arm64

ppc64

ppc64le

mips

mipsle

mips64

mips64le

mips64p32

mips64p32le

ppc

s390

s390x

sparc

sparc64GOOS分类(操作系统)android

darwin

dragonfly

freebsd

linux

nacl

netbsd

openbsd

plan9

solaris

windows

二、下载和构建下载go-mips32源git clone https://github.com/gomini/go-mips32.git配置GO编译参数export GOOS=linux

export GOARCH=mips32执行编译#切换目录

cd go-mips32/src

#开始编译(我这里如果不禁用cgo会报错)

CGO_ENABLED=0 ./make.bash拷贝编译好的工具链#先切回到上级目录,不要在src目录操作

cd ..

//创建编译后文件存放文件夹

sudo mkdir /opt/mipsgo

//复制

sudo cp -R * /opt/mipsgogo工程参数配置export GOROOT=/opt/mipsgo

export PATH=/opt/mipsgo/bin:$PATH测试一下#go-mips32自带了一个test目录,可以用里面的helloworld.go测试一下

cd test

#编译(请确保调用的go是刚刚编译得到的那个而不是系统本身的go,如果不确定,请用go的完整路径来进行调用)

go build ./helloworld.go拷贝到路由器或者设备上运行一下。(如果设备存储空间不够,可以通过去除调试信息,把程序精简到三分之一的体积,请参考我上一篇文章)

三、注意事项

如果构建完一个平台,需要构建另外一个平台的话。要么删掉整个目录,要么创建一个新目录。

我之前构建完mips32le之后,再构建mips32,总是不成功。

http://xzh.i3geek.com

你可能感兴趣的:(openwrt,golang,mysql)