保存桌面快捷方式 - - 设为首页 - 手机版
凹丫丫旗下网站:四字成语大全 - 故事大全 - 范文大全
您现在的位置: 范文大全 >> 理工论文 >> 电子通信论文 >> 正文

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


  (2)用gcc或g++生成目标文件
  
  如果应用程序包括多个文件,就需要进行分别编译,最后用连接器连接起来。如笔者的引导程序包括3个文件:init.s(汇编代码、初始化硬件)xmrecever.c(通信模块,采用Xmode协议)和flash.c(Flash擦写模块)。
  
  分别用如下命令生成目标文件:
  
  arm-linux-gcc-c-O2-oinit.oinit.s
  
  arm-linux-gcc-c-O2-oxmrecever.oxmrecever.c
  
  arm-linux-gcc-c-O2-oflash.oflash.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为:
  
  ENTRY(begin)
  
  SECTION
  
  {.=0x00300000;
  
  .text:{*(.text)}
  
  .data:{*(.data)}
  
  .bss:{*(.bss)}
  
  }
  
  其中,ENTRY(begin)指明程序的入口点为begin标号;.=0x00300000指明目标代码的起始地址为0x00300000,这一段地址为MX1的片内RAM;.text:{*(.text)}表示从0x00300000开始放置所有目标文件的代码段,随后的.data:{*(.data)}表示数据段从代码段的末尾开始,再后是.bss段。
  
  (4)用连接器生成最终目标文件
  
  有了连接脚本文件,如下命令可生成最终的目标文件:
  
  arm-linux-ld-nostadlib-obootstrap.elf-Tlink.ldsinit.oxmrecever.oflash.o
  
  其中,ostadlib表示不连接系统的运行库,而是直接从begin入口;-o指明目标文件的名称;-T指明采用的连接脚本文件;最后是需要连接的目标文件列表。
  
  (5)生成二进制代码
  

《用GNU工具开发基于ARM的嵌入式系统(第3页)》
本文链接地址:http://www.oyaya.net/fanwen/view/141731.html

★温馨提示:你可以返回到 电子通信论文 也可以利用本站页顶的站内搜索功能查找你想要的文章。