本文简单的介绍了golang和rust语言在openwrt系统、mips架构下的交叉编译。
环境
主机 |
系统 |
内核 |
架构 |
host主机 |
Centos 7.2 |
linux 3.10.0-327 |
x86_64 |
target主机 |
openwrt 14.07 |
linux 3.10.14 |
mipsel |
我们要在host主机上编译target主机上运行的二进制程序。由于我们团队有现有的路由宝产品,所以使用现有openwrt环境、并在真机路由器上做测试。如果想亲自动手实验,可以考虑使用QEMU等虚拟机软件模拟相应环境。
工具链
获取openwrt工具链有两种方式:
- 可以直接使用openwrt的官网自行下载相应平台的SDK。文档。
- 使用源码自己编译,新文档 ,旧文档。
文档介绍的比较详细,以下简单列出一些步骤和问题。
- 进入源码目录,make menuconfig配置相应平台和其他选项等。
- make menuconfig终端可能显示乱码。解决:export TERM=screen
- make -j8
- 可以使用-j8 选项加快编译速度。
- make时会下载依赖源码包,由于众所周知的网络原因,可能有些包无法下载。
解决:可以使用make V=s 打印编译详细信息,查看卡在哪个下载,根据url自行想办法,然后把下载到到包放到dl目录。
- 编译完成后会在staging_dir目录下生产工具链。
验证工具链
第1步. 设置STAGING_DIR环境变量为上面工具链目录。
$ export STAGING