制作交叉编译工具链:从入门到放弃
前言
建议直接看1.24的教材,这篇教程写的很烂,如果你能跟着成功build,那说明你是个天才!
1.24版本在https://blog.csdn.net/qq_42112618/article/details/120848016
本文默认读者已掌握Linux操作系统常用指令,比如cd mkdir cp…
如果发现某些下载任务很慢或者失败,请更换自己的网络环境或者hosts或者连接学校的vpn或者直接下载离线安装包。
提供ct-ng build所需的离线安装包,这是耗时最长的一步,有离线包能快很多,而且这一步下载失败的人有很多。提供ct-ng 的config配置文件,在图形界面配置有很多项要修改,如果配置出错,可以直接下载config覆盖试试。(使用方法在https://blog.csdn.net/qq_42112618/article/details/120848016码云地址https://gitee.com/steveqobs/linux)
如果你完成到下面这一步,恭喜你,通关了!(这一步构建了一小时)
主要流程
流程图:没空画,自己看目录0.0!
开始
建议全程在普通用户权限下完成
一、建立文件夹、下载工具
下面三句指令,注意所在文件夹位置
我在默认位置,也就是 /home/steve下输入的指令
1、 首先创建arm-linux-tool文件夹
2、 打开arm-linux-tool文件夹
3、 下载crosstool-ng-1.23.0到这个文件夹。
注意这里下载的版本是1.23.0。官网有1.24,本文基于1.23。
mkdir arm-linux-tool
cd arm-linux-tool
wget http://crosstool-ng.org/download/crosstool-ng/crosstool-ng-1.23.0.tar.bz2
三个步骤如下图所示
4、 解压
输入以下指令解压crosstool-ng-1.23.0.tar.bz2,到当前文件夹。
结果就是当前文件夹会多出来一个crosstool-ng-1.23.0文件夹
tar -xvjf crosstool-ng-1.24.0.tar.bz2
解压完成:
5、 在当前arm-linux-tool文件夹下,创建三个文件夹:
crosstool-build crosstool-install src
mkdir crosstool-build crosstool-install src
使用ls可查看到已经创建完成
6、 使用sudo apt-get install下载依赖包,
sudo要输入密码
sudo apt-get install gperf flex bison texinfo gawk libtool automake libncurses5-dev g++ help2man
安装完成,如下图所示:
(这一步可能有读者出错,有些包下载失败,这个自己搞定,百度一下,肯定有一样的情况)
二、ct-ng 编译make和安装make install
1、进入crosstool-ng-1.23.0文件夹
cd crosstool-ng-1.23.0
2、三步: 配置(configure)、编译(make)、安装(make install)。
接下来要make了,生成的ct-ng文件会在下面的地址,注意下面的地址steve替换成自定义的字段,
./configure --prefix的作用是:编译的时候用来 **指定程序存放路径 **
./configure --prefix /home/steve/arm-linux-tool/crosstool-install/
make
make install
完成了一小步
(图片中有些文件路径是错的,不要在意这些细节)
3、完成install 查看ct-ng是否可用
cd /home/steve/arm-linux-tool/crosstool-install/bin
./ct-ng -v
4、添加环境变量
把ct-ng“export”到环境变量中,方便以后直接用ct-ng调用,而不是只能在某个文件夹运行ct-ng
export PATH=$PATH:/home/steve/arm-linux-tool/crosstool-install/bin/
三、ct-ng的配置,为build准备
(这一步每个人可能要不一样的配置,不一定要照着做,这一步完成不了ct-ng build的话,就直接参考末尾config文本编辑覆盖,也可以直接跳过去)
1、创建(复制)一个config文件
先来看一下crosstool-ng-1.23.0文件夹里有啥
cd /home/steve/arm-linux-tool/crosstool-ng-1.23.0
里面有一些样例
cd /home/steve/arm-linux-tool/crosstool-ng-1.23.0/samples
可以看到这里有一些配置好的文件夹、我们可以复制arm-unknown-linux-gnueabi 文件夹到 cross-build中,在后面执行ct-ng的时候使用 继续使用 复制过来的 config文件,我们可以用 ct-ng menuconfig命令打开config配置的图像界面,但是很有可能出错,如果你有正确的config文件,可以把config文件复制到cross-build文件夹中,然后执行ct-ng build开始构建
下面 用两个绝对路径 和参数-r 完成了文件夹的复制,这个也是根据个人情况修改
cp -r /home/steve/arm-linux-tool/crosstool-ng-1.23.0/samples/arm-unknown-linux-gnueabi /home/steve/arm-linux-tool/crosstool-build/
复制arm-unknown-linux-gnueabi/crosstool中的config文件到当前文件夹crosstool-build
cp arm-unknown-linux-gnueabi/crosstool.config .config
2、打开图像界面配置
下面图像界面配置看起来很繁琐,如果清楚自己要配置那些参数 建议自己直接编辑config文件
ct-ng menuconfig
方向键上下选择配置项,左右选择功能键
配置两个地址
local tarballs directory:下载的包会在这个路径
prefix directory:最后要使用的程序会在这个文件夹里
配置如下
local tarballs directory:/home/steve/arm-linux-tool/src
prefix directory:/home/steve/arm-linux-tool/x-tools/${CT_TARGET}
Target options 配置选项
1.修改交叉编译器针对的架构
设置Target options下的Architecture level为 armv7-a
修改完第一步下面的Tune for CPU就没了。。还是建议大家手工修改.config文件
设置Target options下的Emit assembly for CPU为 cortex-a9
设置Target options下的Tune for CPU为 cortex-a9
2.设置支持硬件 FPU,iMX6ULL 支持硬件浮点运算单元
1.修改 Tuple’s vendor string 厂商字符串 如:arm-某-linux-gnueabi-
修改 Tuple’s alias ,给交叉编译工具起别名,这样会给每个工具创建一个软连接
这样 arm-wh-linux-guneabihf-gcc 就可以使用 arm-linux-gcc 表示。
自定义内核版本和地址
/home/steve/Tools/linux-4.1.15
如果build过程加载失败,还得自己下载到自定义的文件夹很麻烦
C-compiler 配置选项 gcc版本
退出图形界面了
执行
ct-ng build
build完成
添加环境变量
PATH=/home/steve/bin:/home/steve/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/steve/arm-linux-tool/crosstool-install/bin/:/home/steve/x-tools/arm-syqCortexA9-eabi/bin
测试