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

3.3 建立交叉编译环境

3.3.1 安装GCC工具包

配置好主机环境后,下一步工作就是在主机Linux环境下安装GNU工具链。GNU是一个自由软件工程项目,由GCC、Binutils和Debugger组成。GCC代表“GNU Compiler Collection”,由一组支持不同编程语言的编译器组成,包括C、C++、Objective-C、Objective-C++、Java、Fortran等,Blackfin平台目前仅支持C、C++和Fortran三种编程语言。建立交叉编译环境的步骤如下:

(1)从Blackfin官方网站www.blackfin.uclinux.org获得GNU toolchains工具软件:

blackfin-toolchain-2009R1-RC6.i386.tar.bz2

blackfin-toolchain-uclibc-full-2010R1-RC4.i386.tar.bz2

(2)创建“/opt/uClinux”目录,把上面两个文件解压到该目录,得到bfin-uclinux和bfin-linux-uclibc两个子目录。

(3)把编译器路径环境变量添加到“/etc/profile”中,这样在启动PC Linux系统时以下路径被自动加到系统搜索路径中,无须每次都手动添加路径。“/opt/uClinux/bfin-uclinux/bin”和“/opt/uClinux/bfin-uClinux/bin”是Blackfin编译器及实用工具软件的安装目录。

export PATH=/opt/uClinux/bfin-uclinux/bin:$PATH

export PATH=/opt/uClinux/bfin-uclinux/bin:$PATH

使用GNU工具开发时要特别注意toolchains版本和bootloader以及µClinux内核版本的匹配,如果版本不匹配可能会出现一些编译错误。

3.3.2 GCC编译器

基于Blackfin的µClinux软件开发有两组工具链:bfin-uclinux-xxx和bfin-linux-uclibcxxx,二者均使用uClibc库,但是生成不同格式的二进制可执行文件。bfin-uclinux-gcc是µClinux发行包下使用的默认编译器,用来编译内核和bootloader程序。bfin-uclinux-gcc编译生成的是FLAT格式的文件,FLAT是一种相对简单的、轻量级的可执行文件格式,生成的文件体积较小。bfin-linux-uclibc-gcc生成的文件格式是FDPIC ELF,ELF格式是Linux环境下的标准文件格式,支持动态连接和动态加载,但是文件头较大,占用资源较多。使用bfin-uclinux-gcc编译器生成FLAT格式的文件需要使用“-elf2flt”编译选项,GCC首先生成一个.gdb ELF文件,然后使用bfin-uclinux-elf2flt转换为FLAT格式的可执行文件。

下面以一个简单的程序test.c来说明二者的不同:

#include <stdio.h>

int main()

{

int i;

i = 10;

return 0;

}

首先使用bfin-linux-uclibc-gcc编译,然后用strip去除符号信息:

bfin-linux-uclibc-gcc –o test test.c

bfin-linux-uclibc-strip test

使用ll命令查看生成的test目标文件为3316字节。

如果使用bfin-uclinux-gcc编译:

bfin-uclinux-gcc -elf2flt –o test test.c

使用ll命令查看生成的test目标文件为1812字节,而且多了一个test.gdb文件。

3.3.3 Binutils

安装GNU工具包后,在“bfin-uclinux/bin/”和“bfin-linux-uclibc/bin/”目录下可以看到很多可执行文件,除去C语言编译器bfin-uclinux-gcc和C++语言编译器bfin-uclinux-g++、bfin-uclinux-c++外,下面列出一些比较重要的Binutils工具。

•bfin-uclinux-as: 针对Blackfin汇编语言的Linux环境下的编译器。

•bfin-uclinux-ar: 创建、修改、添加目标代码文件包,用来生成静态库文件“.a”。

•bfin-uclinux-elf2flt: 把ELF格式的文件转换为FLT格式。

•bfin-uclinux-nm: 列出目标文件中的变量和函数。

•bfin-uclinux-objcopy: 复制和转换文件格式。

•bfin-uclinux-objdump: 反汇编目标文件,显示目标文件的信息。

•bfin-uclinux-strip: 删除目标文件中的符号连接,可以明显减小目标文件的体积,但是由于把调试信息删除,因此无法使用GDB进行调试。

•bfin-uclinux-ld: Blackfin程序链接器。编译器生成的二进制文件不能直接执行,还需要链接器加工为最终可以执行的文件。 wYvmFAJ4lq/65g9aLpHfn++beg0SZhtmt4ROYYUCO8CoYMTB6nPqVeD6Eu+B4r++

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