【Linux开发笔记】crosstool-ng制作交叉编译工具链

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官网下载太慢,这里推荐阿里云镜像站下载gccgdb源码包。

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

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Ubuntu是一种基于Linux的操作系统,而crosstool-ng是一个工具生成工具。这个工具允许用户在Ubuntu操作系统上生成交叉编译工具,从而能够在一个平台上为不同的目标体系结构编译和构建软件。 使用crosstool-ng可以为各种不同的目标体系结构生成交叉编译工具,包括ARM、MIPS、PowerPC等。生成的工具包含了一个交叉编译器、库和头文件,可以用来编译和构建适用于特定目标体系结构的应用程序。 Ubuntu的用户可以通过安装crosstool-ng并按照相应的文档和指南进行设置和配置。首先,用户需要在Ubuntu上安装和配置必要的开发工具和依赖项,然后从crosstool-ng的官方网站下载最新的源代码并进行编译和安装。 安装完成后,用户需要使用crosstool-ng提供的配置文件进行配置和设置。用户可以选择合适的目标体系结构,并选择所需的版本和选项。之后,用户可以运行crosstool-ng来生成交叉编译工具。 一旦工具生成完成,用户就可以使用它来编译和构建适用于特定目标体系结构的应用程序。用户可以在Ubuntu上开发应用程序,并将其交叉编译为可在其他平台上运行的可执行文件。 总之,Ubuntu和crosstool-ng的结合为用户提供了一个方便而强大的工具,使他们能够在Ubuntu上生成适用于不同目标体系结构的交叉编译工具,并开发多平台的应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值