用GNU工具开发基于ARM嵌入式系统的方法

豆豆网   技术应用频道   2007年09月03日    社区交流

内容摘要:从测试代码、引导程序、嵌入式Linux移植、应用程序、图形界面都可以用GNU工具进行开发,不需要在开发工具上做额外的投入。本文所介绍的开发方法同样适用于其它公司的基于ARM的产品。

  (2)用gcc或g++生成目标文件

  如果应用程序包括多个文件,就需要进行分别编译,最后用连接器连接起来。如笔者的引导程序包括3个文件:init.s(汇编代码、初始化硬件) xmrecever.c(通信模块,采用Xmode协议)和flash.c(Flash擦写模块)。

  分别用如下命令生成目标文件:

  arm-linux-gcc-c-O2-o init.o init.s

  arm-linux-gcc-c-O2-o xmrecever.o xmrecever.c

  arm-linux-gcc-c-O2-o flash.o flash.c

  其中-c命令表示只生成目标代码,不进行连接;-o 命令指明目标文件的名称;-O2表示采用二级优化,采用优化后可使生成的代码更短,运行速度更快。如果项目包含很多文件,则需要编写makefile文件。关于makefile的内容,请感兴趣的读者参考相关资料。

  (3)编写连接脚本文件

  gcc等编译器内置有缺省的连接脚本。如果采用缺省脚本,则生成的目标代码需要操作系统才能加载运行。为了能在嵌入式系统上直接运行,需要编写自己的连接脚本文件。编写连接脚本,首先要对目标文件的格式有一定了解。GNU编译器生成的目标文件缺省为elf格式。elf文件由若干段(section)组成,如不特殊指明,由C源程序生成的目标代码中包含如下段:.text(正文段)包含程序的指令代码;.data(数据段)包含固定的数据,如常量、字符串;.bss(未初始化数据段)包含未初始化的变量、数组等。C++源程序生成的目标代码中还包括.fini(析构函数代码)和.init(构造函数代码)等。有关elf文件格式,读者可自行参考相关资料。连接器的任务就是将多个目标文件的.text、.data和.bss等段连接在一起,而连接脚本文件是告诉连接器从什么地址开始放置这些段。例如笔者的引导程序连接文件link.lds为:

责编:豆豆技术应用

正在加载评论...