Linux系统的交叉编译工具链用来将源代码变成bin文件或者库文件的一个软件。一般大家默认工具链等于gcc或者arm-linux-gcc,但是实际上,gcc只是工具链的编译器部分,不是全部,制作一个工具链的原材料,除了gcc,还需要linux内核,libc库等一系列的软件包。所谓万事开头难,如何在Buildroot中使用自己的交叉编译工具链则是第一道难关。
Buildroot支持从零开始用原材料软件包自动构造工具链,也支持直接使用第三方制作好的工具链。
toolchain-buildroot 从零开始自动制作工具链
在make menuconfig –> Toolchain –>Toolchain type中,有2个选项,选择buildroot toolchain则是使用buildroot默认的自动化脚本从零开始制作交叉编译工具链,如果是选择externaltoolchain 则是使用外部制作好的工具链。
Figure 1 toolchain type 选项
在mini2440_defconfig的配置文件中,我们可以看到,它并没有toochain相关的选项,只是在cpu指令集部分选择了ARM920T ,这种情况它会采用buildroot-toolchain也就是buildroot默认的自动化脚本,从零开始制作工具链。实际上,你只要make toolchain然后等待几分钟,Buildroot就会将制作好的全新工具链放到output/host/目录下了。
Figure 2 mini2440_defconfig配置部分截图
整个工具链自动化制作过程可以参考toolchain/ 目录下的toolchain-buildroot/ 、toolchain.mk、helpers.mk、toolchain-wrapper.mk等几个脚本,我就不详细说了。但是有几个关键点我还是强在下面列一下。总之制作过程还是很复杂的,所以如果是初学者,用手工方法从零开始做交叉编译工具链,将是多大的挑战。
a). 从图3中我们可以看到制作交叉工具链大概需要的原材料软件包
Figure3 制作交叉工具链的原材料
工具链主要的原材料包括:gcc,、libc库,、linux内核头文件、binutils以及一系列自动构建打包工具如m4、gmp、mpc等。
另外要强调的是,从工具链的原材料可以知道为什么Linux内核、驱动以及应用软件要用同一个工具链编译,为什么内核版本要适配它的工具链。这是因为工具链本身的制作依赖于特定版本的Linux内核和libc库。
b). 从图1的makemenuconfig –> Toolchain这一系列选项可以看到,制作工具链还可以选择libc库(uclibc还是glibcÿ