1.交叉编译器
\qquadARM裸机、Uboot移植、linux移植这些都需要在linux系统上进行编译,编译就需要编译器。在linux系统中,可以使用gcc命令对c语言程序进行编译,但gcc编译器是针对X86架构的,现在需要对ARM架构的代码进行编译。所以我们现在需要一个可以对ARM架构的代码进行编译的gcc编译器,这个编译器被称为交叉编译器。
\qquad交叉编译器具有如下的特点:
\qquad(1)是一个gcc编译器
\qquad(2)运行在X86架构上
\qquad(3)可以编译ARM架构的代码,也就是说编译出来的可执行文件是在ARM芯片上运行的
2.ARM-linux交叉编译器的下载安装
\qquad我下载的是gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz
,下载地址:arm-linux交叉编译器4.9.4
\qquad下载完成后,在/usr/local
目录下,创建一个arm
目录,然后再把gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz
拷贝到/usr/loacl/arm
目录下,再解压。
sudo mkdir arm #创建arm目录
sudo cp /home/xiaoming/downloads/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz /usr/local/arm #复制
sudo tar xvf gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz
\qquad解压完成之后,还需要把/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin
的路径添加到/etc/profile
sudo vim /etc/profile #打开profile
\qquad在文件最后,添加export PATH=$PATH:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin
\qquad查看是否安装成功,若安装成功会显示版本号gcc version 4.9.4 (Linaro GCC 4.9-2017.01)
arm-linux-gnueabihf-gcc -v
3.交叉编译器的编译过程
\qquad首先使用arm-linux-gnueabihf-gcc
,将.c .s文件编译为.o文件,.s文件是汇编文件,.c文件是c语言文件。
\qquad-g
:产生调试信息;-c
:编译源文件,但是不链接;-o
:制定编译产生的.o文件的名字。
arm-linux-gnueabihf-gcc -g -c .c文件(或者.o文件) -o .o文件
\qquad然后把上一步的所有的.o文件链接到一起,并要指定一个链接起始地址,也就是代码运行的起始地址。链接起始地址一般指向RAM地址,RAM 分为内部RAM和外部RAM,外部RAM即DDR。比如:
arm-linux-gnueabihf-ld -Ttext 0X87800000 xxx.o -o xxx.elf
\qquad最后xxx.elf不是最终烧写到单片机sd卡上的可执行文件,我们要烧写的文件是.bin文件,这需要使用arm-linux-gnueabihf-objcopy -O binary -S -g xxx.elf xxx.bin
\qquad其中-O
:选择以什么格式输出;binary
:以二进制输出;-S
:不要复制源文件中的重定位和符号信息;-g
:不要复制源文件中的调试信息;
arm-linux-gnueabihf-objcopy -O binary -S -g xxx.elf xxx.bin