1. 李楠的主页首页
  2. Hexo 迁移

EasyARM-i.MX28x 安装交叉编译器

简单了解交叉编译器

所谓的交叉编译,就是在宿主机平台上使用某种特定的交叉编译器,为某种与宿主机不同平台的目标系统编译程序,得到的程序在目标系统上运行而非在宿主机本地运行。这里的平台包含两层含义:一是核心处理器的架构,二是所运行的系统。这样,

交叉编译有 3 种情形:

1.arm-none-eabi-gcc表示目标处理器是ARM,不运行操作系统,仅运行前后台程序
2.arm-uclinux-eabi-gcc表示目标处理器是ARM,运行uClinux操作系统
3.arm-none-linux-gnueabi-gcc表示目标处理器是ARM,运行Linux操作系统
4.mips-linux-gnu-gcc表示目标处理器是MIPS,运行Linux操作系统

进行ARM Linux 开发,通常选择arm-linux-gcc交叉编译器。ARM-Linux交叉编译器可以自行从源代码编译,也可以从第三方获取。在能从第三方获取交叉编译器的情况下,请尽量采用第三方编译器而不要自行编译,一是编译过程繁琐,不能保证成功,二是就算编译成功,也不能保证交叉编译器的稳定性,编译器的不稳定性会对后续的开发带来无限隐患。而第三方提供的交叉编译器通常都经过比较完善的测试,确认是稳定可靠的。

安装交叉编译器

解压工具链压缩包

致远电子提供的资料中提供了gcc-4.4.4-glibc-2.11.1-multilib-1.0.tar.bz2交叉编译工具包
使用FileZill或者WinCap工具将该工具包上传至虚拟机Ubuntu的桌面上待用
用FileZill或者WinCap工具上传文件时需要Ubuntu安装SSH服务,默认的Ubuntu是不带该服务的,安装SSH服务请移步Linux上安装使用SSH服务 进入Ubuntu操作环境,将桌面上我们刚才上传的文件解压至/opt/目录
输入命令

1
~$ tar xjvf gcc-4.4.4-glibc-2.11.1-multilib-1.0_EasyARM-iMX283.tar.bz2 -C /opt/

进入/opt/目录我们会发现已经解压的gcc-4.4.4-glibc-2.11.1-multilib-1.0文件夹,该文件夹目录里边还有一层目录arm-fsl-linux-gnueabi,在此如果有强迫症的同学可以自行将内目录替换掉外目录。方法如下:
1.输入命令,先将arm-fsl-linux-gnueabi文件夹移动至/opt/目录下

1
~$ sudo mv arm-fsl-linux-gnueabi/ /opt

2.回到/opt目录,输入命令删除gcc-4.4.4-glibc-2.11.1-multilib-1.0文件夹

1
~$ sudo mv arm-fsl-linux-gnueabi/ /opt

在完成解压后,如果不设置环境变量,如果不指定交叉编译器的完整路径,系统是无法调用交叉编译器的。那么接下来我们就应该开始设置系统环境变量了

设置环境变量

如果系统只有一个交叉编译器,还是强烈推荐设置系统环境变量,毕竟每次都设置全路径,稍微显得有点麻烦。设置系统环境变量后,只需在Linux终端输入以下命令,就可以调用交叉编译器,简单方便。

1
~$ arm-fsl-linux-gnueabi-gcc

全路径引用

如果不添加交叉编译器的路径到系统环境变量中,则必须在每次使用交叉编译器 的地方写明交叉编译器的全路径,例如:

1
2
~$ export CC=/opt/arm-fsl-linux-gnueabi/bin/arm-fsl-linux-gnueabimake 
~$ CROSS_COMPILE=$CC ARCH=arm uImage

临时设置

临时设置系统环境变量,是通过export命令,将交叉编译器的路径添加到系统 PATH 环境变量中。用法(多个值之间用冒号隔开),例如:

export PATH=$PATH:/交叉编译器路径
我们的路径

export PATH=$PATH:/opt/arm-fsl-linux-gnueabi/bin
然后执行echo命令,查看系统PATH的值:

1
~$ echo $PATH

这种方法设置环境变量,只能对当前终端有效,关闭终端再次打开将会失效,需要重新设置。

修改全局配置文件

在终端中添加环境变量,需要每次打开终端都设置,也很麻烦。可以考虑将设置的过程添加到系统配置文件中。“/etc/profile”是全局配置文件,会影响登录本机的全部用户,在该文件中设置交叉编译器的路径,能够让登录本机的全部用户都可以使用这个编译器。
输入命令

1
~$ sudo vi /etc/profile

在文尾添加

export PATH=$PATH:/opt/arm-fsl-linux-gnueabi/bin
此时若是新装的Ubuntu会发现VI模式下上下左右键不能正常使用,这个问题的解决方法请移步解决Ubuntu下vi不能正常使用的问题
然后在终端输入“. /etc/profile”(点+空格+文件名),执行profile文件,使刚才的改动生效。如果没有书写错误,此时打开终端,输入

1
~$ arm-fsl-linux-gnueabi-

然后按键盘TAB键,同样可以看到很多arm-fsl-linux-gnueabi-开头的命令。

修改用户配置文件(推荐)

推荐大家使用修改用户配置文件的方法设置环境变量。
如果不希望影响其他用户,也可以只修改当前用户的配置文件,通常是“~/.bashrc”或者“~/.bash_profile”。修改方法与修改“/etc/profile”类似,这时无需 sudo,直接 vi 打开即可,在文件末尾增加:

export PATH=$PATH:/opt/arm-fsl-linux-gnueabi/bin
此路径就是刚才解压交叉编译器的路径
保存文件并退出。
与执行“/etc/profile”的方式一样,输入“. .bashrc”或者“. .bash_profile”,执行修改过的文件,使修改生效。如果无误,打开终端,输入

1
~$ arm-fsl-linux-gnueabi-

然后按键盘 TAB键,同样可以看到很多arm-fsl-linux-gnueabi-开头的命令。进一步测试,可以编写一个简单的c文件,用交叉编译器交叉编译,并查看编译结果。 在用户目录,也就是“~”目录下创建test.c文件。
输入命令

1
~$ vi test.c

输入以下测试程序

1
2
3
4
5
6
7
8
9
10
#include <stdio.h> 
int main(void)
{
int i;
for (i=0; i<5; i++)
{
printf("Test %d!\n", i);
}
return 0;
}

保存并关闭test.c文件,输入以下命令

1
~$ arm-fsl-linux-gnueabi-gcc test.c -o hello

再执行命令:

1
~$ file test

test.c进行编译并查看编译后生成文件的属性:

可以看到 test 程序是 32 位 ARM 指令架构的程序

安装 32 位的兼容库

如果前面的操作都能得到正确现象,那么就该为自己庆祝一下了,因为交叉编译器已经安装完毕,并且能够正确工作了。但是事情总有例外,很有可能在终端输入命令

1
~$ arm-fsl-linux-gnueabi-gcc

得到的却是下面的结果:

-bash: ./arm-fsl-linux-gnueabi-gcc: 没有那个文件或目录
此时请确认:
1.在某个目录下确实存在 arm-fsl-linux-gnueabi-gcc 文件;
2.在终端输入 arm-fsl-linux-gnueabi-,按 TAB 键,能找到 arm-fsl-linux-gnueabi-*系列命令。如果这两个条件都确认无误,那么问题就好解决了。这种问题主要发生在 64 位操作系统上,原因在于大多数交叉编译器为了适应性,通常以 32 位发布,而实际系统是 64 位的,存在架构差异,所以不能执行。解决办法很简单,安装 32 位兼容库就好了。在 Ubuntu 16.04 上的安装命令:

1
2
~$ apt-get install lib32ncurses5 ​
~$ apt-get install lib32z1​

32 兼容库需要从Ubuntu 的源下载,所以此时主机系统应当能访问互联网。
安装32位兼容库后,再次执行命令

1
~$ arm-fsl-linux-gnueabi-gcc

应该得到如下信息:
arm-fsl-linux-gnueabi-gcc: no input files

本文作者:Drixn

本文链接:https://www.drixn.com/95.html

版权申明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

发表评论

电子邮件地址不会被公开。 必填项已用*标注