1。背景
arm机器一般因为资源问题进行编译会影响开发速度,而且很多时候因为资源不够而无法完成编译工作。因此,需要在执行机上进行交叉编译,即使用x86或其他架构机器基于交叉编译工具编译出在arm上可以运行的程序。
2. 分类和说明
从授权上,分为免费授权版和付费授权版。
免费版目前有三大主流工具商提供,第一是GNU(提供源码,自行编译制作),第二是 Codesourcery,第三是Linora。
收费版有ARM原厂提供的armcc、IAR提供的编译器等。
免费版如下几种:
arm-none-linux-gnueabi-gcc:是 Codesourcery 公司(目前已经被Mentor收购)基于GCC推出的的ARM交叉编译工具。可用于交叉编译ARM(32位)系统中所有环节的代码,包括裸机程序、u-boot、Linux kernel、filesystem和App应用程序。
arm-linux-gnueabihf-gcc:是由 Linaro 公司基于GCC推出的的ARM交叉编译工具。可用于交叉编译ARM(32位)系统中所有环节的代码,包括裸机程序、u-boot、Linux kernel、filesystem和App应用程序。
aarch64-linux-gnu-gcc:是由 Linaro 公司基于GCC推出的的ARM交叉编译工具。可用于交叉编译ARMv8 64位目标中的裸机程序、u-boot、Linux kernel、filesystem和App应用程序。
arm-none-elf-gcc:是 Codesourcery 公司(目前已经被Mentor收购)基于GCC推出的的ARM交叉编译工具。可用于交叉编译ARM MCU(32位)芯片,如ARM7、ARM9、Cortex-M/R芯片程序。
arm-none-eabi-gcc:是 GNU 推出的的ARM交叉编译工具。可用于交叉编译ARM MCU(32位)芯片,如ARM7、ARM9、Cortex-M/R芯片程序。
命名规则:https://www.veryarm.com/296.html
交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eabi]
arch - 体系架构,如ARM,MIPS
vendor - 工具链提供商
os - 目标操作系统
eabi - 嵌入式应用二进制接口(Embedded Application Binary Interface)
3. 自己编译交叉编译器
3.1 先准备本地环境,安装必要的工具
sudo apt-get install bison flex texinfo automake libtool cvs patch curl subversion gawk cvsd gperf
其中:
bison和flex是用来生成语法和词法分析器;
texinfo和man类似,用来读取帮助文档;
automake是帮助生成Makefile的工具;
libtool帮助在编译过程中处理库的依赖关系,自动搜索路径;
cvs、cvsd和subversion是版本控制软件,用于编译过程中的源码下载;
curl通过给定的网络地址下载源码的工具;
patch是用于给源码打补丁的工具;
gawk是linux下用于文本处理和模式匹配的工具。
3.2 获取crosstool-NG的源码
网站: http://crosstool-ng.github.io/
下载最新的版本:git clone https://github.com/crosstool-ng/crosstool-ng
3.3 安装
下载完成后执行 :
./bootstrap
./configure --prefix /opt/arm-linux-tool/crosstool-ng/
会有libtool找不到的错误: 解决-》sudo apt install libtool-bin && libtool --version
之后执行make
make install
进行安装ct-ng
安装完成后配置环境变量,将ct-ng加入环境变量中
从根目录中的amples/arm-unknown-linux-gnueabi拷贝出需要的配置文件到根目录中 .configure
执行ct-ng menuconfig进行配置,此部分可参考:https://www.jianshu.com/p/a513590de6b8
安装需要下载大量文件,虚拟机实在扛不住,因此,,,,放弃了。。
去找官方网站下载去
这里的原始文件是从linaro拿到的,地址如下: http://releases.linaro.org/components/toolchain/binaries/7.4-2019.02/arm-linux-gnueabi