购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.2 交叉编译器

2.2.1 交叉编译器概念

由于嵌入式系统硬件上的特殊性,一般不能安装发行版的Linux系统,例如,Flash存储空间很小,没有足够的空间安装;或者处理器很特殊,也没有发行版的Linux系统可用。所以需要专门为特定的目标板定制Linux操作系统,这必须要相应的开发环境,于是人们想到了交叉开发模式。在开发主机上,可以安装开发工具、编辑、编译目标板的Linux引导程序、内核和文件系统,然后在目标板上运行。通常这种在主机环境下开发,在目标板上运行的开发模式叫作交叉开发。

2.2.2 交叉编译器获取

自己从源代码构建arm-linux 交叉编译工具链是一件很麻烦的事情,所以如果能下载预先编译好的工具链是比较节省时间的做法。

arm-linux-gcc版本4.3.2:http://code.google.com/p/princess-alist/downloads/detail?name=arm-linux-gcc-4.3.2.tgz&can=2&q=label%3AFeatured

2.2.3 交叉编译器安装

下面介绍一下arm-linux-gcc的安装。

安装交叉编译工具链步骤如下。

(1)以root用户登入。

(2)复制arm-linux-gcc-4.3.2.tgz到根目录下tmp文件夹里。

(3)解压命令。

注意,tgz和-C之间有空格,-C是大写,-C和/之间有空格。

(4)配置编译环境的路径。

① 在小红帽的终端里输入:[root@localhost ~]gedit /root/.bashrc。

注意,gedit和/root之间有空格,bashrc前面有一个点(“.”)。

② 文字编辑器中打开.bashrc文件,在文件最后(最后一行)加上下面代码:export PATH=/usr/local/arm/4.3.2/bin:$PATH

注意,是在最后添加新行。

③ 保存关闭后,注销当前用户(Ctrl+Alt+Backspace),用root账号重新登录系统(使刚刚添加的环境变量生效)。

④ 在终端里输入:[root@localhost ~]arm-linux-gcc -v 。

如果安装成功,则将会输出 arm-linux-gcc的版本号,如图2.1所示。

若想让它在非超级用户下使用(自己还没有使用过)。那首先,以用户登入。

(1)输入命令:vi ~/.bashrc,编辑.bashrc文件,在文件末尾加入的内容

export PATH=/usr/local/arm/4.3.2/bin:$PATH。

图2.1 查看arm-linux-gcc的版本号

(2)输入命令:gedit /etc/profile,在文件的末尾加上PATH=/usr/local/arm/4.3.2/bin:$PATH。

保存对profile的修改后,执行source /etc/profile就OK了。同样地,先注销当前用户,再登录后进入控制台执行arm-linux-gcc -v 看看能否执行成功就可以了。

2.2.4 交叉编译器使用

使用arm-linux-gcc编译程序的方法与gcc一致。其编译过程如图2.2所示。

图2.2 C编译器生成可执行文件流程图

Linux系统中可执行的文件有两种格式。第一种格式是a.out格式,这种格式用于早期的Linux系统及 UNIX系统的原始格式。a.out来自于UNIX C编译程序默认的可执行文件名。当使用共享库时,a.out格式就会发生问题。把a.out格式调整为共享库是一种非常复杂的操作,由于这个原因,一种新的文件格式被引入UNIX系统5的第四版本和Solaris系统中。它被称为可执行和连接的格式(ELF)。这种格式很容易实现共享库。ELF格式已经被Linux系统作为标准的格式采用。gcc编译程序产生的所有的二进制文件都是ELF格式的文件(即使可执行文件的默认名仍然是a.out)。较旧的a.out格式的程序仍然可以运行在支持ELF格式的系统上。

总体选项如下所示。

(1)-E 预处理后就停止。

(2)-S编译后就停止。

(3)-c预处理、编译、汇编,但不进行链接。

(4)-o file指这输出文件为file.。

(5)-v显示版本号。

(6)-Wall 基本打开所有需要注意的警告信息。

(7)-g产生调试信息。

(8)-O -O1 -O2优化选项。

(9)-llibrary 连接名为library的库文件。

(10)-nostartfiles 不连接系统标准启动文件,而标准库仍然正常使用启动文件。crt1.o,crti.o,crtend.o,crtn.o等没被连接。

(11)nostdlib不连接系统标准启动文件和标准库文件。

(12)-static阻止连接共享库。

(13)-shared 生成一个共享OBJ文件。

(14)-Xlinker option 把选项option传递给连接器。

(15)-W1,option 把选项option传递给连接器。

(16)-u symbol使连接器认为取消了symbol的符号定义。

(17)-Idir 在头文件的搜索路径中加入dir目录。

(18)-I- 使搜索路径适用于#include指令。

(19)-Ldir 添加dir目录。

(20)-Bprefix这个选项指出在何处寻找可执行文件、库文件及编译器自己的数据文件。 X2MS7Em4JuQDl7Qo5CVXdPLP44B705ET4HbpcD6txfNyDJyfRbJS8B2C06ZexUEI

点击中间区域
呼出菜单
上一章
目录
下一章
×