【Linux开发笔记】crosstool-ng制作交叉编译工具链
创始人
2024-06-01 20:21:08
0

1 编译/安装crosstool-ng

1.1 crosstool-ng简介

crosstool-ng是一个交叉编译工具链生成器。它支持许多体系结构和组件,并具有简单而强大的菜单样式界面。

crosstool-ng官网地址:https://crosstool-ng.github.io/

1.2 下载crosstool-ng源码

下载地址:https://crosstool-ng.github.io/download/

1.3 解压

tar -xvf crosstool-ng-1.25.0.tar.xz

1.4 配置编译/安装参数

1.4.1 执行configure

进入解压后的crosstool-ng目录中,

如果需要指定crosstool-ng的安装路径以及修改其他的编译参数,可以先执行查看configure的一些参数配置。

./configure --help

linux中编译各种开源库和工具有一些比较通用的方法,我在【Linux开发笔记】Linux编译第三方库通用方法文章中也有提到过。

我这里选择默认的配置,直接执行configure。

./configure

1.4.2 解决依赖问题

在执行configure的过程中,会检查各种需要的依赖项,下面的列表中是我在configure过程中遇到的依赖问题以及解决方法:

问题解决
configure: error: missing required tool: flexsudo apt-get install flex
configure: error: missing required tool: makeinfosudo apt-get install texinfo
configure: error: missing required tool: help2mansudo apt-get install help2man
configure: error: Required tool not found: GNU awksudo apt-get install gawk
configure: error: configure: error: Required tool not found: makesudo apt-get install make
configure: error: Required tool not found: libtoolsudo apt-get install libtool
sudo apt-get install libtool-bin
configure: error: curses library not foundsudo apt-get install ncurses-dev
YACC parser.tab.csudo apt-get install bison

1.4.3 编译/安装

1.编译

make

2.安装

sudo make install

执行

ct-ng -v

正常显示版本信息,则安装成功。

2 制作交叉编译工具链

2.1 交叉编译准备

新建一个名为arm-linux(作为本次交叉编译的工作目录,名称随意)的目录。

进入crosstool-ng目录下的sample目录,该目录下有各个环境的config模板,如下图所示:

config模板

交叉编译器的命名规则及详细解释可以参考交叉编译器的命名规则及详细解释这篇文章。

根据自己当前的环境选择,我这里用到的是s3c2440al-40,所以选择的config模板是arm-unknown-linux-gnueabi,进入arm-unknown-linux-gnueabi目录中,将该目录下的crosstool.config拷贝到arm-linux目录下,并重命名为.config。

在arm-linux中新建三个目录,

1.build:作为crosstool-ng的构建目录;
2.arm-unknown-linux-gnueabi:作为工具链安装目录;
3.src:作为交叉编译过程中存放依赖包源码的目录。

下载gcc和gdb源码,gnu官网下载太慢,这里推荐阿里云镜像站下载gcc和gdb源码包。

将下载好的gcc和gdb源码包放进src目录下,实际上crosstool-ng在编译过程中会下载依赖项到src目录,也可以将各个依赖项的源码放进src目录下,crosstool-ng找到src中如果有依赖项的本地源码包,那么就直接用本地源码包了。

2.2 交叉编译配置

在arm-linux目录下执行

ct-ng menuconfig

终端中出现crosstool-ng的配置菜单,如下图所示:

crosstool-ng配置菜单

2.2.1 Paths and misc options配置

选项操作
Local tarballs directory设置为src目录绝对路径
Working directory设置为build目录绝对路径
Prefix directory设置为工具链安装目录绝对路径

注意:Prefix directory设置为工具链安装目录绝对路径,但是该路径不能和.config为同一个目录,我之前就是配置了工具链安装目录和.config为同一目录,结果在执行编译的时候,总是会报下面的错误,花费了不少时间在上面。

[00:03] / bzip2: Can't open input file .config: No such file or directory.
[ERROR]  
[ERROR]  >>
[ERROR]  >>  Build failed in step '(top-level)'
[ERROR]  >>
[ERROR]  >>  Error happened in: CT_InstallConfigurationFile[scripts/functions@2536]
[ERROR]  >>        called from: main[scripts/crosstool-NG.sh@634]
[ERROR]  >>
[ERROR]  >>  For more info on this error, look at the file: 'build.log'
[ERROR]  >>  There is a list of known issues, some with workarounds, in:
[ERROR]  >>      https://crosstool-ng.github.io/docs/known-issues/
[ERROR]  >>
[ERROR]  >>  If you feel this is a bug in crosstool-NG, report it at:
[ERROR]  >>      https://github.com/crosstool-ng/crosstool-ng/issues/
[ERROR]  >>
[ERROR]  >>  Make sure your report includes all the information pertinent to this issue.
[ERROR]  >>  Read the bug reporting guidelines here:
[ERROR]  >>      http://crosstool-ng.github.io/support/
[ERROR]   
[ERROR]  (elapsed: 0:01.50)

2.2.2 Target options配置

选项操作
Target Architecture设置为arm
Floating point根据cpu本身的浮点运算规格选择,我这里选择的是no fpu
Default instruction set mode设置为arm
Emit assembly for CPU这一项设置为arm9tdmi,可以通过芯片手册查到。ARM9TDMI

2.2.3 Operating System配置

选项操作
Target OS设置为linux
Version of linux设置目标linux内核版本

2.2.4 C compiler配置

选项操作
Version of gcc设置目标gcc版本

2.2.5 Debug facilities配置

选项操作
gdb按Y键勾选gdb
Version of gdb设置目标gdb版本

2.2.6 Companion tools配置

这一项菜单里面有一些配套工具,比如bison、make等,根据自己需求选择。

2.3 构建工具链

在arm-linux目录(即.config所在目录)下执行

ct-ng build

crosstool-ng开始构建工具链,如果遇到以下报错:

[EXTRA]    Retrieving 'xxx-x.x.xx'
[ERROR]    xxx: download failed

比如我遇到的zlib:

[EXTRA]    Retrieving 'zlib-1.2.12'
[ERROR]    zlib: download failed

手动下载该依赖项的源码并放到src目录下。

将手动下载的依赖项源码包在放置了在src中之后,再次执行

ct-ng build

如果出现了以下错误:

make: “build” is up to date

执行一下

touch .config

该命令用于更新一下.config文件的时间戳,然后再次执行

ct-ng build

等待编译完成就大功告成了,硬件性能和工具链编译配置的不同花费的时间也不一样,我这边大概花费一个小时,进入arm-unknown-linux-gnueabi目录可以看到制作好的工具链。

相关内容

热门资讯

天津市古文化街导游词 天津市古文化街导游词  来自××的朋友大家好!  首先我代表青年旅行社欢迎各...
杭州西湖中英文导游词 杭州西湖中英文导游词  杭州西湖的导游词怎么写?下面小编为大家推荐2篇中英文的范文,希望对大家有帮助...
西安秦始皇兵马俑博物馆导游词 西安秦始皇兵马俑博物馆导游词  一篇完整的导游词,其结构一般包括习惯用语、概括介绍、重点讲解三个部分...
杭州山沟沟概况导游词 杭州山沟沟概况导游词  作为一名默默奉献的导游,总归要编写导游词,导游词作为一种解说的文体,它的作用...
我是大连小导游作文共60篇 我是大连小导游作文 第一篇亲爱的朋友们,旅途辛苦了,欢迎来到我的家乡—福州永泰,我是今天的小导游,大...
呼和浩特大昭寺导游词 呼和浩特大昭寺导游词  大昭寺成为藏式宗教建筑的千古典范,是旅游的胜地,吸引了很多游客来参观,导游要...
逍遥津导游词 逍遥津导游词位于合肥市旧城的东北角,是一座约20万平方米的城市公园。逍遥津古为淝水上的一个津渡。公园...
导游词开场白 导游词开场白导游词开场白有一句广告词说:心随我动,沟通无限,那我与在座各位朋友的沟通就从我的自我介绍...
苏州盘门三景导游词 苏州盘门三景导游词范例  苏州历史文化名城遐迩闻名在于她的历史悠久、人文荟萃、风景优美。盘门景区位于...
游长城导游词 游长城导游词  长城是世界七大奇迹之一。它像一条巨龙盘踞在中国北方的辽阔的土地上。它是中国古代劳动人...
颐和园导游词400字 颐和园导游词400字  一、颐和园简介  颐和园,中国清朝时期皇家园林,前身为清漪园,坐落在北京西郊...
辽宁省五女山导游词 辽宁省五女山导游词  作为一名具备丰富知识的导游,时常需要用到导游词,导游词的主要特点是口语化,此外...
介绍平遥古城导游词 介绍平遥古城导游词(通用15篇)  作为一位杰出的导游,往往需要进行导游词编写工作,导游词是导游员进...
太乙洞导游词 太乙洞导游词1、[洞口太乙神像]亲爱的游客,大家好!热烈欢迎观光!我们太乙洞有360万年历史,主洞全...
沈阳故宫导游词 沈阳故宫导游词  作为一名专门为游客提供帮助的导游,就有可能用到导游词,导游词具有注重口语化、精简凝...
广化寺导游词 广化寺导游词  广化寺,又称莆田南山广化寺,大家不妨来看看小编推送的广化寺导游词,希望给大家带来帮助...
学校的导游词 学校的导游词  作为一名专门引导游客、助人为乐的导游,就不得不需要编写导游词,导游词事实上是一种对旅...
云冈石窟介绍导游词 云冈石窟介绍导游词(精选10篇)  作为一无名无私奉献的导游,常常需要准备导游词,导游词是讲解当地的...
福建鼓山十八景精彩导游词参考 福建鼓山十八景精彩导游词参考  各位游客朋友们,大家早上好!欢迎你们来到鼓山十八景,我是你们的导游小...
成都武侯祠导游词 成都武侯祠导游词精选  成都武侯祠号称“三国圣地”,是全国保存最好的纪念三国文化的地方。保存得好的原...