编译工具链制作神器 - crosstool-ng

本文介绍了如何使用crosstool-ng制作交叉编译工具链,详细阐述了从获取源码、配置、编译安装到测试工具链的全过程,旨在帮助嵌入式开发者自定义针对特定硬件的编译环境。
摘要由CSDN通过智能技术生成

From: Linux hole

深呼吸,深呼吸 - XXXX

Hello,大家好。
最近一直忙着调试Bug,一直无果。很让人伤心,多模块糅合,Ps. 驱动 用户态 硬件全方位定位,搞的人很累。所以一直没有写点东西;
以前我一直以为要写东西就必须写的高大上的东东,后来才发现,高大上的东东搞起来除了很费力以外,反而可能让人觉得你不也是COPY过来的吗?你不是也是TS过来的吗? 拽什么拽啦。。

鉴于此,我决定写点通俗易懂,能引来吃西瓜观众的tech文章。
始于此吧,今天我们来讲一下怎么制作自己的交叉链子

做嵌入式开发的小伙伴可能对“交叉工具链子”这个词很敏感,可能是一道面试题啊(也许会和编译原题一来聊出来)。那么究竟什么是交叉工具链子呢?工具链子是软件开发项目中的一个重要组成部分,其会将正在开发的代码进行编译、汇编和链接。一些工具链中的碎片将最终在生成的二进制:譬如静态库。简而言之就是可以在宿主机上,编译生成可在目标机上的运行的,可执行程序的编译器统称(集编译,链接,汇编,调试,反汇编等等)。所以呢,工具链子本身是一个非常敏感的工具。

在实际开发中,很多人可能都没有遇见过让自己去做一个链子的情况,毕竟链子基本上都是现成的,编译脚本也是现成的,配置也是现成的。就算要做,网上也有一些零零散散的制作过程,那么我为什么还要写这么制作文章呢? 岂不是显得脱裤子放屁;以上已知存在的制作链子的方法有以下几点限制:
- 1、虽然这些链子可以通用,但是由于配置文件一致,它不能为您优化某些特定场景,
- 2、它们可以编写一个特定的目标,
- 3、它们可能使用的是比较老的组件(C 库,配置等等),无法支持较新CPU的特性;
但是呢,这些链子还是有一些好处:
- 1、已经准备好,方便配置和使用,
- 2、既然能被广泛使用,也说明它们的稳定性;

但是如果你想把你的程序运行在指定的硬件上,那么你最起码要学会如何制作工具链;

制作交叉编译链子

有很多种方法可以做链子,这里我推荐一个制作交叉链子神器 - crosstool-ng
ct-ng 告别了过去制作交叉链子复杂的过程,把制作交叉链子做成了一套自动化部署工具,没有门槛,想怎么改就怎么改。
如果在配合buildroot 或者 ptxdist,简直分分钟做出一套属于自己的Linux Embedded 发行版呀有木有。
咳咳,制造发行版的这个事情我们后面在来care,下面我们来看看怎么利用神器制作自己的交叉链子。

利用crosstool-ng 制作属于自己的工具链

1、安装crosstool-ng
1.1、获取源码

crosstool-ng版本众多,这里我们选用最新的版本,版本号是1.22.0。

hole@hole-2016:~$ mkdir crosstool-ng-source 
hole@hole-2016:~$ cd crosstool-ng-source
hole@hole-2016:~/crosstool-ng-source$ wget http://crosstool-ng.org/download/crosstool-ng/crosstool-ng-1.22.0.tar.bz2
1.2、校检版本签名

此步骤可以跳过

1.3、配置
hole@hole-2016:~/crosstool-ng-source$ tar xvf crosstool-ng-1.22.0.tar.bz2
hole@hole-2016:~/crosstool-ng-source$ mkdir crosstool-ng
hole@hole-2016:~/crosstool-ng-source$ cd crosstool-ng
hole@hole-2016:~/crosstool-ng-source/crosstool-ng$ ./configure --prefix=/usr/ct-ng/

此处如果不指定–prefix 那么默认目录是/usr/local

1.4、编译 && 安装
hole@hole-2016:~/crosstool-ng-source/crosstool-ng$ make && sudo make install

上述如果指定了–prefix,记得添加到环境变量

hole@hole-2016:~/crosstool-ng-source/crosstool-ng$ export PATH=/usr/ct-ng/bin:$PATH
2、使用croostool-ng 制作工具链子

下面开始制作,我以x86_64 为demo;其它的工具链方法都一样。

2.1、查看已知示例工具链的配置
hole@hole-2016:~/crosstool-ng-source/crosstool-ng$ cd ..
hole@hole-2016:~/crosstool-ng-soucrce$ mkdir x86_64-cross
hole@hole-2016:~/crosstool-ng-soucrce$ cd x86_64-cross
hole@hole-2016:~/crosstool-ng-soucrce/x86_64-cross$ ct-ng list-samples

然后就会列出下面推荐的已知工具链的名称:

Status  Sample name
[G..]   alphaev56-unknown-linux-gnu
[G..]   alphaev67-unknown-linux-gnu
[G..]   arm-bare_newlib_cortex_m3_nommu-eabi
[G..]   arm-cortex_a15-linux-gnueabi
[G..]   arm-cortex_a8-linux-gnueabi
[G.X]   arm-cortexa5-linux-uclibcgnueabihf
[G.X]   arm-cortexa9_neon-
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值