交叉编译器的概念
交叉编译器也叫做交叉编译工具链(cross compilation tool chain),是在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,比如在PC平台(X86 CPU)上 编译 出能运行在以ARM为内核的CPU平台上的程序, 编译得到的程序在X86 CPU平台上是不能运行的,必须放到ARM CPU平台上才能运行,虽然两个平台用的都是Linux系统。
使用交叉编译器的原因
ARM上可以运行操作系统,所以用户完全可以将ARM当做计算机来使用,理论上也可以在ARM上使用本地的编译器来编译程序.但是,编译器在编译程序时,会产生大量的中间文件,这会占用很大的内存和磁盘空间,且对CPU处理速度要求较高,比如S3C2440A内存、磁盘空间只有几十到100多兆,CPU只有400-500MHz,完全达不到编译程序的要求.所以,在进行ARM-linux嵌入式开发时必须在PC机(x86结构)上编译出能够运行在ARM上的程序,然后再将程序下载到ARM中来运行.这就用到了交叉编译器.
要进行交叉编译,用户需要在主机平台上安装对应的交叉编译工具链(cross compilation tool chain),然后用这个交叉编译工具链编译用户的源代码,最终生成可在目标平台上运行的代码.交叉编译工具链可以从网上下载,也可以自己制作.
EABI 的概念
EABI,Embeded application binary interface,即嵌入式应用二进制接口,是描述可连接目标代码、库目标代码、可执行文件影像、如何连接、执行和调试以及目标代码生成过程,和c, c++语言接口的规范,是编译连接工具的基础规范,也是研究它们工作原理的基础.简而言之,EABI就是一种编译规范,交叉编译器在编译时,对于浮点运算会使用硬浮点运算,而对于没有硬浮点运算的处理器,比如S3C2440,会使用软浮点,但这样会在速度上受到很大的限制,而EABI则对浮点运算进行了优化,提高了浮点运算的性能,节省了编译时间.
安装交叉编译器
-
在 linaro官网 下载 ARM的交叉编译器,因为最新的UBOOT需要使用6.X以上的交叉编译器,所以建议下载较新的交叉编译器进行编译;最新的是9.X,此处我们为了稳定,下载 7.X 的最新版本,具体什么版本可自行下载
-
下载完 gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabi.tar 后,复制到 liunx 系统中一个目录中(例如:home/wy/tools)
-
使用
tar -xvf gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabi.tar
解压压缩包 -
设置环境变量(仅当前用户生效,多用户全局生效的方法可改动
/etc/profile 或者 /etc/bash.bashrc 文件)- 在用户家目录下(例如: /home/wy/)
vi .bashrc
- 然后在该文件的末尾加入:
export PATH=$PATH:/home/wy/tools/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabi/bin
(这里的路径是编译器的安装路径),改动好了之后保存。 source .bashrc
//让改动过的环境变量生效
- 在用户家目录下(例如: /home/wy/)
-
使用 arm-linux-gnueabi-gcc -v 查看交叉编译器的版本号