【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目录可以看到制作好的工具链。

相关内容

热门资讯

常用商务英语口语   商务英语是以适应职场生活的语言要求为目的,内容涉及到商务活动的方方面面。下面是小编收集的常用商务...
六年级上册英语第一单元练习题   一、根据要求写单词。  1.dry(反义词)__________________  2.writ...
复活节英文怎么说 复活节英文怎么说?复活节的英语翻译是什么?复活节:Easter;"Easter,anniversar...
2008年北京奥运会主题曲 2008年北京奥运会(第29届夏季奥林匹克运动会),2008年8月8日到2008年8月24日在中华人...
英语道歉信 英语道歉信15篇  在日常生活中,道歉信的使用频率越来越高,通过道歉信,我们可以更好地解释事情发生的...
六年级英语专题训练(连词成句... 六年级英语专题训练(连词成句30题)  1. have,playhouse,many,I,toy,i...
上班迟到情况说明英语   每个人都或多或少的迟到过那么几次,因为各种原因,可能生病,可能因为交通堵车,可能是因为天气冷,有...
小学英语教学论文 小学英语教学论文范文  引导语:英语教育一直都是每个家长所器重的,那么有关小学英语教学论文要怎么写呢...
英语口语学习必看的方法技巧 英语口语学习必看的方法技巧如何才能说流利的英语? 说外语时,我们主要应做到四件事:理解、回答、提问、...
四级英语作文选:Birth ... 四级英语作文范文选:Birth controlSince the Chinese Governmen...
金融专业英语面试自我介绍 金融专业英语面试自我介绍3篇  金融专业的学生面试时,面试官要求用英语做自我介绍该怎么说。下面是小编...
我的李老师走了四年级英语日记... 我的李老师走了四年级英语日记带翻译  我上了五个学期的小学却换了六任老师,李老师是带我们班最长的语文...
小学三年级英语日记带翻译捡玉... 小学三年级英语日记带翻译捡玉米  今天,我和妈妈去外婆家,外婆家有刚剥的`玉米棒上带有玉米籽,好大的...
七年级英语优秀教学设计 七年级英语优秀教学设计  作为一位兢兢业业的人民教师,常常要写一份优秀的教学设计,教学设计是把教学原...
我的英语老师作文 我的英语老师作文(通用21篇)  在日常生活或是工作学习中,大家都有写作文的经历,对作文很是熟悉吧,...
英语老师教学经验总结 英语老师教学经验总结(通用19篇)  总结是指社会团体、企业单位和个人对某一阶段的学习、工作或其完成...
初一英语暑假作业答案 初一英语暑假作业答案  英语练习一(基础训练)第一题1.D2.H3.E4.F5.I6.A7.J8.C...
大学生的英语演讲稿 大学生的英语演讲稿范文(精选10篇)  使用正确的写作思路书写演讲稿会更加事半功倍。在现实社会中,越...
VOA美国之音英语学习网址 VOA美国之音英语学习推荐网址 美国之音网站已经成为语言学习最重要的资源站点,在互联网上还有若干网站...
商务英语期末试卷 Part I Term Translation (20%)Section A: Translate ...