Linux-交叉编译工具链的制作(crosstool-ng-1.24),基于ubuntu16.04,虚拟机软件VM15.5pro或VirtualBox6.1.26

前言

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编译的文件可以直接执行
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_42112618/article/details/120848016