ARM-Linux 交叉编译器可以自行从源代码编译,也可以从第三方获取,但最好直接从第三方获取。如果自己编译的话,一是编译过程繁琐,不能保证成功,二是就算编译成功,也不能保证交叉编译器的稳定性,编译器的不稳定性会对后续的开发带来无限隐患。而第三方提供的交叉编译器通常都经过比较完善的测试,确认是稳定可靠的。
直接用其提供的交叉编译工具链,我们只需解压安装就行了。我这里解压到“/opt/”目录
解压命令:tar xjvf gcc-4.4.4-glibc-2.11.1-multilib-1.0.tar.bz2 -C /opt/
如果不添加交叉编译器的路径到系统环境变量中,则必须在每次使用交叉编译器
的地方写明交叉编译器的全路径,例如:
export CC=/opt/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/arm-fsl-linux-gnueabimake
CROSS_COMPILE=$CC ARCH=arm uImage
你这样会累shi的,不推荐这种方法。
临时设置系统环境变量,是通过export命令,将交叉编译器的路径添加到系统 PATH 环境变量中。用法(多个值之间用冒号隔开),例如:
export PATH=$PATH:/交叉编译器路径
那我们的就是:
export PATH=$PATH:/opt/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin
然后执行echo命令,查看系统 PATH 的值:
echo $PATH
输出:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/opt/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin
/etc/profile 是系统全局的配置文件,在该文件中设置交叉编译器的路径,能够让登录本机的全部用户都可以使用这个编译器。
打开终端,输入“sudo vi /etc/profile
”命令,打开/etc/profile 文件,在文件末尾添加:
export PATH=$PATH:/opt/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin
保存文件并退出。
然后在终端输入“. /etc/profile
”(点+空格+文件名),执行 profile 文
件,使刚才的改动生效。
“/etc/profile”是全局配置文件,会影响登录本机的全部用户。如果不希望影响其他用户,也可以只修改当前用户的配置文件,通常是“~/.bashrc”或者“~/.bash_profile”。修改方法与修改“/etc/profile”类似,这时无需 sudo,直接 vi 打开即可,在文件末尾增
加:
export PATH=$PATH:/opt/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin
与执行“/etc/profile”的方式一样,输入“. .bashrc”或者“. .bash_profile”,执行修改过的文件,使修改生效。
我个人使用的是第三种,反正就我一人使用。
打开终端,输入 arm-fsl-linux-gnueabi-
,然后按键盘 TAB键,同样可以看到很多 arm-fsl-linux-gnueabi-
开头的命令。
我们输入arm-fsl-linux-gnueabi-gcc -v
,可以看以下版本信息。
进一步测试,可以编写一个简单的 c 文件,用交叉编译器交叉编译,并查看编译结果。
在“~”目录下创建 hello.c 文件。经典的hello world。
#include
int main(void)
{
printf("Hello %d!\n");
return 0;
}
执行命令:arm-fsl-linux-gnueabi-gcc hello.c -o hello
再执行命令:file hello
输出:
hello:ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.26, not stripped
可以看到 hello 程序是 32 位 ARM 指令架构的程序。