交叉编译工具链的制作
交叉编译工具链的制作
前言及准备
本笔记制作的交叉编译工具已通过简单验证,对初次有需求需要搭建交叉工具链有一定的指导意义,制作工具链比较耗时,需做好花费一整天时间的准备。
资料学习链接
crosstool-ng详解
linux工具、软件安装的基本步骤:
下载,配置,编译,安装
crosstool-ng下载
crosstool-ng-1.23.0.tar.bz2
或使用指令
新建 arm-linux-tool 文件夹用于制作工具链
mkdir arm-linux-tool
cd arm-linux-tool
wget http://crosstool-ng.org/download/crosstool-ng/crosstool-ng-1.23.0.tar.bz2
tar -xvjf crosstool-ng-1.23.0.tar.bz2
新建
mkdir crosstool-build crosstool-install src
一、安装crosstool-ng
1.编译依赖
sudo apt-get install gperf flex bison texinfo gawk libtool automake libncurses5-dev g++ help2man
gperf是完美哈希函数生成器;
bison和flex是用来生成语法和词法分析器;
texinfo和man类似,用来读取帮助文档;
automake是帮助生成Makefile的工具;
libtool帮助在编译过程中处理库的依赖关系,自动搜索路径;
gawk是linux下用于文本处理和模式匹配的工具;
2.配置、安装
cd crosstool-ng-1.23.0
./configure --prefix /home/wangh/workspace/wh_tools/arm-linux-tool/crosstool-install/
配置过程中出现的缺少安装项通过安装解决
配置正常生成 makefile 后,进行编译安装
make
make install
验证安装是否成功
在 crosstool-install/bin 目录下执行 ./ct-ng -v
为了后面使用方便,配置临时环境变量
export PATH=$PATH:/home/wangh/workspace/wh_tools/arm-linux-tool/crosstool-install/bin/
二、配置交叉编译工具链
对于常见的架构,比如arm,mips,powerpc等等,都有了很多的,已经帮我验证过,可以正常编译的示例配置了,所以我们接下来,主要就是:
搞懂自己借用哪个配置,然后调用默认配置,然后再确认一下配置,根据自己的情况去改一改,就差不多,就配置好了。
下面介绍,如何去配置crosstool-ng的主要的两种情况:
- 如果已有同样(类似的)配置,那么直接拿过来用即可
- 如果没有需要的配置,则找到一个最为接近的配置,借用后,再去修改为自己所要的配置
在 crosstool-ng 源码的 crosstool-ng-1.23.0/samples 目录下已经提供了很多配置模板,我们基于模板修改。
拷贝 crosstool-ng-1.23.0/samples/arm-unknown-linux-gnueabi 到 crosstool-build文件夹;
复制 arm-unknown-linux-gnueabi/crosstool.config 为 .config用来配置
cd crosstool-build
cp arm-unknown-linux-gnueabi/crosstool.config .config
ct-ng menuconfig
(1)Paths and misc options 配置选项
设定源码包路径和交叉编译器的安装路径
- 源码包路径:设置Paths and misc options下的Local tarballs directory为 /home/wangh/workspace/wh_tools/arm-linux-tool/src
- 交叉编译器的安装路径:设置Paths and misc options下的Prefix directory为 /home/wangh/workspace/wh_tools/arm-linux-tool/x-tools/${CT_TARGET}
(2)Target options 配置选项
1.修改交叉编译器针对的架构
设置Target options下的Architecture level为 armv7-a
设置Target options下的Emit assembly for CPU为 cortex-a7
设置Target options下的Tune for CPU为 cortex-a7
iMX6ULL配置如下:
Architecture level=CT_ARCH_ARCH=-march=armv7-a //架构
Emit assembly for CPU=CT_ARCH_CPU=-mcpu=cortex //家族
Tune for CPU=CT_ARCH_TUNE=-mtune=cortex-a7 //内核
iMX283配置如下:
- Architecture level=CT_ARCH_ARCH=-march=armv5tej //架构
- Emit assembly for CPU=CT_ARCH_CPU=-mcpu=arm9e //家族
- Tune for CPU=CT_ARCH_TUNE=-mtune=arm926ej-s //内核
2.设置支持硬件 FPU,iMX6ULL 支持硬件浮点运算单元
(3)Toolchain options 配置选项
1.修改 Tuple’s vendor string 厂商字符串 如:arm-fsl-linux-gnueabi-
我们用 ht 或自定义,这里我用 wh 标识
- 修改 Tuple’s alias ,给交叉编译工具起别名,这样会给每个工具创建一个软连接
这样 arm-wh-linux-guneabihf-gcc 就可以使用 arm-linux-gcc 表示。
(4)Operating System 配置选项
1.使用本地内核,配置内核版本与路径
修改 Path to custom source, tarball or directory 为/home/wangh/Tools/linux-4.1.15
修改自定义内核版本为 4.1.15
(5)C-library 配置选项
其他先保持默认。
做完上述配置工作后,选择save然后退出。
执行 ct-ng build
整个编译过程时间比较长,crosstool-ng 会自动下载相应的包(没有配置本地内核的还需要下载内核文件),然后解压、配置、编译、链接,但有个别包在自动下载过程中会出错,如:libelf-0.8.13,这个时候就需要手动下载,然后放到之前设置的 arm-linux-tool/src 目录下,重新运行 ct-ng build 即可。
编译出错
Building binutils 时出现 g++: internal compiler error: Killed (program cc1plus) 错误,经查询可能是内存不足, 临时使用交换分区来解决。
sudo dd if=/dev/zero of=/swapfile bs=64M count=16 sudo mkswap /swapfile sudo swapon /swapfile
编译完成之后释放资源
sudo swapoff /swapfile sudo rm /swapfile
其他不太好查询的错误可查看目录下的编译日志,会有出错的具体原因,如配置Emit assembly for CPU为 cortex 导致编译gcc时出现无法识别的错误,修改为cortex-a7即可。
整个编译过程时间较长,视电脑配置,配置好12小时,差一点的34小时,当然编译出错再次编译也会浪费大量时间,做好需要花费1~2天时间的准备。
编译完成
经过几次修改和漫长的编译终于编译完成。
配置环境变量
echo "PATH=$PATH:/home/wangh/workspace/wh_tools/arm-linux-tool/x-tools/arm-wh-linux-gnueabihf/bin" >> ~/.bashrc
source ~/.bashrc
安装成功测试
arm-linux-gcc --version
三、工具编译测试
1.写一个简单的C程序, hello.c
#include<stdio.h>
#include<stdlib.h>static char buff[256];
static char* string;int main (void)
{string = buff;printf("Please input a string: ");fgets(string, 256, stdin);printf("Your string is: %s", string);return 0;
}
2.使用配置的工具链交叉编译
arm-linux-gcc hello.c -o hello
3.nfs共享到目标板上执行
交叉编译工具链的制作相关推荐
- 制定交叉编译工具_交叉编译工具链的制作
交叉编译工具链的制作 前言及准备 本笔记制作的交叉编译工具已通过简单验证,对初次有需求需要搭建交叉工具链有一定的指导意义,制作工具链比较耗时,需做好花费一整天时间的准备. 资料学习链接 linux工具 ...
- Linux环境下交叉编译工具链的制作
本文参照教材嵌入式Linux开发入门宝典 一.在Windows上安装虚拟机 1.浏览器搜索VMware,下载VMware Workstation Pro最新版,目前为16.2.3,并完成安装. 2.打 ...
- arm-linux交叉编译工具链的制作(基于S3C2440)【转】
本文转载自:http://eric-gao.iteye.com/blog/2160622 制作arm-linux交叉编译工具链一般通过crosstool工具或者crosstool-NG,前者使用方便, ...
- linux top交叉编译_ARM Linux交叉编译工具链的制作
本次是在VMWare虚拟机里安装了CentOS5.2操作系统,并在上面编译自己的ARM交叉编译工具链,下面是相应的步骤: 首先下载crosstool0.43源码包(crosstool-0.43.tar ...
- arm hisiv100 linux,hisiv100交叉编译工具链安装
hisi交叉编译工具链安装 一. 摘要: 交叉编译简单的说,就是A机器上编译生成,运行在B机器上.那么在A机器上的编译工具安装,就是本文所要描述的内容. 工欲善其事必先利其器,所以交叉 ...
- hisi linux nptl.tar,hisiv100交叉编译工具链安装
hisi交叉编译工具链安装 一. 摘要: 交叉编译简单的说,就是A机器上编译生成,运行在B机器上.那么在A机器上的编译工具安装,就是本文所要描述的内容. 工欲善其事必先利其器,所以交叉 ...
- Crosstool-ng制作交叉编译工具链
Crosstool-ng制作交叉编译工具链 交叉编译器可以用现成的,比如CodeSourcery制作的交叉编译器,也可以自己制作,一般是用kernel+gcc+glibc+binutils的源码包来编 ...
- Linux ARM交叉编译工具链制作过程
一.下载源文件 源代码文件及其版本与下载地址: Binutils-2.19.tar.bz2 http://ftp.gnu.org/gnu/binutils/ gcc-4.4.4.tar.bz2 htt ...
- 全手工制作arm-linux交叉编译工具链《一》-转
全手工制作arm-linux交叉编译工具链 (Gcc 4.2.1 + Glibc 2.6.1 + Linux 2.6.22.6)<一> 作者:Garfield Trump 仅仅是本人在学习 ...
最新文章
- MSEG和EKBE的区别在哪里
- vim 折叠的用法
- wtl单文档选项_Vue3 文档阅读 —— TypeScript 支持
- 深入Java集合学习系列:LinkedHashSet的实现原理
- session mysql登录实现_PHP+MYSQL+MYSQL+SESSION实现用户登录的实例
- xss 全编码两次_URL编码与XSS
- 收获,不止SQL优化——抓住SQL的本质--第二章
- MySQL学习笔记三: 1. 多表查询 2. 事务 3. DCL
- Windows10共享文件夹、打印机,可是网络上显示“未授予用户在此计算机上的请求登录类型”的解决方案
- C# 语法一 构造函数
- 全国31省份实体经济发展水平数据 (2004-2017年)
- python调用谷歌地图_谷歌地图API Python/R
- python从键盘输入一个数、计算出大于n的最小素数_请问,可以帮忙做下这个题吗?--从键盘输入一个数,求大于该数的最小素数....
- 基本矩阵运算法则之笔记
- 谷歌插件.crx文件无法安装
- MCS51 系列单片机的中央处理器(CPU)
- python中true什么意思_python中的bool是什么意思
- gcc -ffunction-sections -fdata-sections -Wl,–gc-sections 参数详解
- 2020全国语文高考作文
- OCR图片预处理之去除印章(一)