一.编译环境搭建:
1.Linux源码下载:https://www.kernel.org/
2.安装交叉编译工具链:
①手动下载配置工具链:
(1):解压 arm-linux-gcc-3.4.1.tar.bz2
#tar -jxvf arm-linux-gcc-3.4.1.tar.bz2
解压过程需要一段时间,解压后的文件形成了 ../temp/usr/local/ 文件夹,进入该文件夹,将arm文件夹拷贝到/usr/local/下
# cd usr/local/
#cp -rv arm /usr/local/
现在交叉编译程序集都在/usr/local/arm/3.4.1/bin下面了
(2):修改/etc/profile文件:
# vim /etc/profile
增加路径设置,在末尾添加如下,保存/etc/profile文件:
export PATH=$PATH:/usr/local/arm/3.4.1/bin
(3):立即使新的环境变量生效,不用重启电脑:
对应方法二:# source /etc/profile
(4): 检查是否将路径加入到PATH:
# echo $PATH
显示的内容中有/usr/local/arm/bin,说明已经将交叉编译器的路径加入PATH。
(5).测试是否安装成功
# arm-linux-gcc -v
②使用crosstoll-ng构建交叉编译工具链:
(1)官网下载:
(2)编译(确认/opt/cross/bin已经安装):./configure --prefix=/opt/cross : 报错的话缺what装what
make
make install
(3)使用crosstool-ng构建交叉编译工具链:
1. 在合适的地方新建一个crosstool-ng工作目录。这个目录将会存储工具链的配置文件,自动下载的文件,构建过程中产生的一些中间文件,最后建立在普通可读写目录:
mkdir -p /home/sheldon/workspace/linux/crosstool
2. 进入前面一步建立的目录:
cd /home/sheldon/workspace/linux/crosstool
3. 执行 ct-ng menuconfig进入配置界面:(找不到执行档就链接一下:sudo ln -s /opt/cross/bin/ct-ng /usr/bin/ct-ng)
ct-ng menuconfig
4. 选择‘Paths and misc options’菜单,激活’ Try features marked as EXPERIMENTAL’选项,这一步很重要。
5. 在‘Paths and misc options’ 菜单下,修改‘Directory containing customsource components’值,设置为你想要最终存放工具链的目录。
(${HOME}/src) Local tarballs directory # 指定制作编译器所需要的源码包的下载存放,可以修改成任意位置,请注意权限。现在指定到~/src下。
(/opt/${CT_TARGET}) Prefix directory # 制作好的编译器所放置的目录
6. 返回主菜单,选择‘Target options’ , [*] Use EABI # 是否实用EABI方式,对某些指令采用异常的方式来处理(如除法指令),建议选中
7. ‘Target architecture ’选项选择‘ arm’;‘Endianness ’选项选择‘ Little endian’;‘Bitness’选项选择‘32-bit’。Floating point: (software) ---> # 对于很多ARM架构CPU来说是不支持硬浮点运算的,所以选择软件方式有更好的兼容性
8. 返主菜单,选择‘Operating system’(跳过‘Toolchain options’,这里使用缺省选项就够了)
9. ‘Target OS’选择‘linux’, ‘Linuxkernel version’选项中选择你所使用的内核版本
10. 返回主菜单,选择‘Binary utilities’
11. 选择你需要的版本,笔者直接选择最高版本(如果需要编译Linaro版本,请先激活‘Show Linaro versions’选项)。
12. 返回主菜单,选择‘C compiler’
13. 选择你所使用的GCC版本(笔者选择5.1.0,如果需要编译Linaro版本,请先激活‘Show Linaro versions’选项),因为笔者需要使用GCC的一个新特性,所以激活‘Compile libsanitizer’选项,一般情况下,保持缺省值就够了。
14. Toolchain options --->(tonghuix) Tuple's vendor string # 这里可以修改成你自己的个性化名称,最后会生成形如arm-yourname-linux-gnueabi这样的编译器前缀
15. 其它选项用缺省值,退出并保存配置工具
16. 执行ct-ng build编译工具链
ct-ng build