Linux-交叉编译工具链的制作(crosstool-ng-1.24
前言
0、 无论是vm还是VirtualBox虚拟机软件都可以参考这个教程
1、vm15.5pro、ubuntu16.04,crosstool版本1.23在这里, 博客地址: 1.23制作交叉编译工具链:从入门到放弃
2、 这次用 刚安装好的ubuntu 制作,并且使用VirtualBox6.1.26代替vm虚拟机软件,因为有些同学的电脑安装Ubuntu系统无法打开甚至蓝屏,我用了别的电脑也出现蓝屏问题了, 很多方法都没解决,最后用VirtualBox6.1.26完成系统安装,配置好之后,使用很流畅(实际上也有一些小问题),教程中的指令可以复制到虚拟机中,VirtualBox可以通过安装增强工具实现双向复制,这个自行百度。这次使用crosstool最新版本 1.24 。
3、 如果发现某些下载任务很慢或者失败,请更换自己的网络环境或者hosts或者连接学校的vpn或者直接下载离线安装包。本文提供ct-ng build所需的离线安装包,这是耗时最长的一步,有离线包能快很多,而且这一步下载失败的人有很多。
4、 教程中 steve等字段 自行替换成自己的ubuntu用户名!!!!!
建议提前安装好vim,因为在编辑bashrc或者config很有可能出现问题,使用vim在终端里编辑会简单一些。
sudo apt-get install vim
主要流程
流程图:没空画,自己看目录0.0!
更新了更新了有了有了
开始
建议全程在普通用户权限下完成
一、建立文件夹、下载工具
下面三句指令,注意所在文件夹位置
我在默认位置,也就是 /home/steve下输入的指令
1、 首先创建arm-linux-tool文件夹
首先创建一个文件夹,我们要把crosstool的包下载到这个文件夹,并且在这里解压,之后要使用到crosstool-ng-1.24.0这个文件夹中的程序。
2、 打开arm-linux-tool文件夹
3、 下载crosstool-ng-1.24.0到这个文件夹。
mkdir arm-linux-tool
cd arm-linux-tool
wget http://crosstool-ng.org/download/crosstool-ng/crosstool-ng-1.24.0.tar.bz2
你最好清楚的知道这个文件夹到底在哪里!
依次使用ctrl c 复制以上命令,在虚拟机中使用ctrl shift v黏贴到终端
4、 解压
下载完成,接下来我们解压刚下载的压缩包
tar -xvjf crosstool-ng-1.24.0.tar.bz2
解压完成,可使用ls命令查看当前文件夹下已经有了解压后的文件夹
5、 在当前arm-linux-tool文件夹下,创建三个文件夹:
继续,创建三个文件夹
mkdir crosstool-build crosstool-install src
6、 使用sudo apt-get install下载依赖包
然后安装这些包
sudo apt-get install gperf flex bison texinfo gawk libtool automake libncurses5-dev g++ help2man
一般会一次下载成功或着有一两个安装失败,我这就比较惨了,没有一个下载了的,可能是因为我安装ubuntu的时候没勾选安装软件。(后来我又新建了一个Ubuntu虚拟机,安装ubuntu的时候选择了下载更新,就没有出现下面的问题,一次apt-get成功,下面图片中的问题也给出了相应的解决办法)
依次执行以下指令,解决了问题。更换了apt源为腾讯镜像
如果没有上面的问题就跳过!
sudo cp -a /etc/apt/sources.list /etc/apt/sources.list.bak
sudo wget -O /etc/apt/sources.list http://mirrors.cloud.tencent.com/repo/ubuntu20_sources.list
sudo apt-get update
sudo apt-get install gperf flex bison texinfo gawk libtool automake libncurses5-dev g++ help2man
sudo apt-get -f install
sudo apt-get install gperf flex bison texinfo gawk libtool automake libncurses5-dev g++ help2man
二、ct-ng 编译make和安装make install
1、进入crosstool-ng-1.24.0文件夹
准备就绪,接下来进入crosstool-ng-1.24.0文件夹
cd crosstool-ng-1.24.0
2、三步: 配置(configure)、编译(make)、安装(make install)。
接下来要make了,生成的ct-ng文件会在下面的地址,注意下面的地址steve替换成自定义的字段,
./configure --prefix的作用是:编译的时候用来 **指定程序存放路径 **
./configure --prefix /home/steve/arm-linux-tool/crosstool-install/
出现以下问题 要求的工具:libtool没有找到,很多同学也出现过这种问题,我们来解决一下。下面三句1、确认libtool已经安装。2、安装libtool-bin。3、再次运行configure。
sudo apt-get install libtool
sudo apt-get install libtool-bin
./configure --prefix /home/steve/arm-linux-tool/crosstool-install/
如下图所示,已经解决。
编译
make
安装
make install
安装完成
3、完成install 查看ct-ng是否可用
然后进入安装目录执行ct-ng
cd /home/steve/arm-linux-tool/crosstool-install/bin
在文件夹里我们也能看到它
4、添加环境变量
我们添加一下ct-ng的文件夹路径到PATH中,方便我们之后调用
export PATH=$PATH:/home/steve/arm-linux-tool/crosstool-install/bin/
指令说明:export PATH=你要添加的地址:$PATH
#配置完后可以通过echo $PATH查看配置结果。
#生效方法:立即生效
#有效期限:临时改变,只能在当前的终端窗口中有效,当前窗口关闭后就会恢#复原有的path配置
#用户局限:仅对当前用户
也就是如果你下次打开终端窗口这个path就失效了
如果你会用vim修改,建议用vi ~/.bashrc在最下面添加PATH(如果path是空的就别用这个方法,就先用临时变量把),然后保存退出,使用source ~/.bashrc使其生效,这里不介绍这个方法了,我们接下来复制config文件,准备build
临时环境变量添加后,ct-ng可以在别的文件路径也能使用了
三、ct-ng的配置,为build准备
(这一步每个人可能要不一样的配置,不一定要照着做,这一步完成不了ct-ng build的话,就直接参考config文本编辑覆盖)
1、创建(复制)一个config文件
先来看一下crosstool-ng-1.24.0文件夹里有啥
里面有一些样例
cd /home/steve/arm-linux-tool/crosstool-ng-1.24.0/samples
我们可以从这里样例中复制config文件
然后在menuconfig图形化菜单中配置 目标路径、目标cpu、目标文件名等
ct-ng menuconfig是必须要有这一步的,就算是直接复制好正确的config也得执行一下ct-ng menuconfig并保存,已确保没有少某些文件
下面是从网上仓库复制的config文件
码云地址: https://gitee.com/steveqobs/linux
我已经把正确配置的config文件上传至我的公开仓库中,build需要的包也在里面,可以在ubuntu中使用git clone直接下载到本地,如果不会git 可以参考这篇博客:https://blog.csdn.net/qq_42112618/article/details/120864188
就下面这一句,把 .config 和所有 ct-ng build 需要的包下载ok了
进入主目录,准备把资源下载到这里
cd /home/steve
git完成后会有一个文件夹:/home/steve/linux
这个文件夹路径后面还要用到,cp复制命令要复制这个路径内的.config文件,src1.24里面是ct-ng build需要下载的包,需要你自己复制到/home/steve/arm-linux-tool/src,在文件管理器里用ctrl+A全选,复制到src文件夹即可
git clone https://gitee.com/steveqobs/linux
2、配置config文件并复制到crosstool-build文件夹
注意:.config文件是隐藏文件,需要用ls -a 才能看到,
可使用vi .config进行编辑,也可以在windows编辑好了在复制到ubuntu中
复制到/home/用户名/arm-linux-tool/crosstool-build/
打开刚下载好的config文件,你可以修改好再复制到crosstool-build中,也可以复制到crosstool-build中再修改
vi /home/steve/linux/.config
以下标注了几个关键配置
local tarballs directory: 下载的包会在这个路径
prefix directory: 最后要使用的程序会在这个文件夹里
(如果你没安装vim就会是下面这样纯白的文字)
这里自定义成自己的名字、厂商名等
还有cpu、linux内核版本等、这里不再描述,根据自己的情况修改。
复制到crosstool-build文件夹
我是git克隆到本地文件夹了,然后把编辑好的config复制到crosstool-build文件夹中:
(两个文件路径中间有空格)
cp /home/steve/linux/.config /home/steve/arm-linux-tool/crosstool-build/.config
3、执行 打开图像化菜单,确认配置
ct-ng menuconfig
方向键上下选择配置项,左右选择功能键
确认完毕后 save 了再exit
其他配置比如cpu型号 linux内核 自行研究
退出图像化菜单
四、开始ct-ng build
ct-ng build
很可能会遇到错误,可能因为网络、可能因为本来就没有这个包
下面的意思是isl包 下载失败
之前git 下载的包就派上用途了 直接全选复制到src
/home/steve/arm-linux-tool/src
发现这次build和之前需要的包不一样了,最容易出错的isl, 之前是0.16版本这次0.20版本,没下载成功,然后我去http://mirror.sobukus.de/files/src/isl/
找到了对应版本,拖进了ubuntu
再次执行ct-ng build
应该没毛病了 等一小时吧
耗时43分钟,还行,之前最久build的一次是69分钟
到这一步之后,我开始找要执行的文件在哪,发现同样的配置,1.24和1.23生成的名字不一样了
注意在这个文件夹/home/steve/x-tools/arm-syqCortexA9-eabi/bin
五、测试arm-某某-某某-gcc
我们先到上面这个文件夹试一下能不能用,注意加个 ./
1、运行arm-某某-某某-gcc
./arm-某某-某某-gcc --version
如果在PATH中添加了arm-某某-eabi-gcc所在文件夹路径,那么在别的路径下只执行arm-某某-eabi-gcc也能成功
2、接下来我们把它添加到PATH中
vi ~/.bashrc
翻到最下面 按 i 进入编辑模式
如果你的PATH是空的那你要小心,得把他们全加上,不然你的所有命令都无法使用,到时候还得添加临时环境变量,下面的steve和syq替换成你自己的字段,复制到bashrc中
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
使修改 生效
source ~/.bashrc
3、测试c语言文件
随便找个文件夹新建一个c语言文件试试
右键单击gedit打开输入
#include<stdio.h>
int main (void)
{
printf("!!! hello !!!");
return 0;
}
保存并关闭。下一步
arm-某某-某某-gcc hello.c -o hello
查看生成的文件信息
file hello
生成的是hello
本来应该在开发板上面执行的。gcc编译的文件可以直接执行