ARM交叉编译工具链的制作

今天是10.24程序员节日。奖励一下自己,写一篇实践博客。制作arm交叉编译工具链。

目前比较新的制作交叉编译工具链的软件是crosstool-NG,非常方便,还可以编译高版本的内核,比如4.16及以上。

Crosstool-NG的下载地址:http://crosstool-ng.github.io/download/,可以在该网址找到如何安装crosstool-NG。

今天在这里实际操作一把,linux环境是ubuntu16.04桌面版本。

按照官方指导,安装crosstool-ng工具。

·第一步先进入源码目录,运行./bootstrap,会检测当前系统并生成configure文件。

·第二步配置,./configure --prefix=/yourplace,参数--prefix可以指定crosstool安装到什么目录下。如果configure中途遇到失败,一般都是缺少一些组件软件包,请自行安装缺少的库。

·第三步,编译,直接make。

·第四步,安装make install。最后导出ct-ng的路径到环境变量PATH就可以直接使用ct-ng命令了。

交叉编译工具链的预配置

就像Linux内核一样,它也有图形配置界面。执行命令,ct-ng menuconfig进入配置界面。可以配置交叉编译工具链生成路径、所需源码(比如,内核源码)包下载路径、选择内核源码版本等。同样,crosstool-ng也存在默认配置,通过命令ct-ng list-samples可以列出很多平台的默认配置,包括arm、mips、x86等。我这里选择了arm-unknown-linux-gnueabi

执行命令 ct-ng arm-unknown-linux-gnueabi生成.confg文件。准备进入编译阶段。如果这时需要更改配置,可以执行命令ct-ng menuconfig。

构建toolchain,只需要执行ct-ng build,就开始构建交叉编译工具链。我使用默认配置,开始构建。这个过程比较耗时,它会下载需要的内核源码,库源码等。构建好了之后,来试一试交叉编译工具链能用不?

找了个一个linux4.16.4版本的内核源码,解压后进入内核源码目录。选择了一个默认配置,生成配置make ARCH=arm vexpress_defconfig。紧接着直接make ARCH=arm CROSS_COMPILE=arm-unknown-linux-gnueabi-,开始编译内核。最终编译结果如下:

jqh@ubuntu:~/work/linux-4.16.4$ file vmlinux

vmlinux: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, BuildID[sha1]=4b5796741a1f71fc7bbe62603ff7b17da5afc3ef, not stripped

说明制作的交叉编译工具是可以正常使用的。

友情提示:我这里选择的内核配置是vexpress_defconfig,是为了下一篇文章qemu虚拟机启动linux系统做了铺垫。

你可能感兴趣的:(linux学习笔记)