buildroot是一款集成的编译集合包,解决了以前交叉编译麻烦的问题。
首先,我们可以从buildroot的官网下载压缩包。https://buildroot.org/downloads/
建议最新的包,试过比较老的版本,好像编译过程中下载一些旧版本的文件,下载速度特别慢,就算挂上了梯子也无济于事。
下载过来解压之后,我们首先进行清理,有时候我们用的不是全新的包,而是别人编译好的包,我们重新进行编译,这个时候会报很多奇奇怪怪的错误.
cd buildroot
make clean
然后我们进行一些配置,
make menuconfig
这里我就盗一下图,哈哈哈,
选择 Target options—>Target Architecture (MIPS (little endian)),配置 Target Architecture 为 MIPS (little endian),Target Architecture Variant 则会自动配置为 (Generic MIPS32)
因为龙芯基本都是小端,所以我们选择little endian.
然后按两次esc返回主界面**,选择 “Toolchain”, 将 “kernel headers” 改成 机器环境的Kernel版本**(即改为编译当前Buildroot的主机内核版本)。可以在主机上通过uname -r 或者cat /proc/version 查看当前主机的内核版本。注意,一定要注意,这里的内核版本指的是你目前这台机子的内核版本,而不是龙芯跑的linux的内核版本,不要弄错,当初自以为的就弄错了.
执行 ./configure 命令根据设置的配置参数生成编译需要的Makefile文件。
./configure
最后就可以make了,这里有一个小技巧,就是make可以带一些参数,例如:
make -j8
-j参数指的是,多线程编译,后面的数字则是线程数,按理来说,在一定合适范围内,线程越多,编译速度越快(据机子配置而定).如果有靠谱的梯子,基本上几十分钟就可以完成编译了.
最后提醒一句:编译过程中要保持联网,切记!!
编译完成后,我们可以在在 /buildroot/output/host/usr/bin目录下找到我们的mipsel-linux-gcc这个编译器,我们首先要验证编译器是否正常:
cd buildroot/output/host/usr/bin
./mipsel-linux-gcc --version
查看编译器版本
然后我们就可以通过mipel-linux-gcc来代替我们的gcc,通常我们是通过make来实现自动化编译,所以我们还要对makefile文件进行修改,修改每个Makefile,在头部将
$cc=gcc
修改为
$cc=mipsel-linux-gcc
同时,make工具使用的同时,需要调用mipsel-linux-gcc,所以我们还需要将mipsel-linux-gcc添加进系统环境变量,详情建议参考这篇文章:
添加linux系统环境变量(永久/临时)
我在编译helloworld文件的时候,发现单单编译完还不能用,为了避免在某些老久系统里通常缺失一些常用库,所以我建议运行编译命令时,为了让生成的二进制程序 hello 不依赖动态库,在编译选项中加入 “-static”,如
./mipsel-linux-gcc -o ./code/hello ./code/hello.c -static
静态编译的程序会大一些,不过,不用再担心链接库的问题了.
祝,未来一切顺利,万事舒心!