Chinaunix首页 | 论坛 | 博客
  • 博客访问: 445093
  • 博文数量: 63
  • 博客积分: 1175
  • 博客等级: 少尉
  • 技术积分: 1204
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-19 11:33
文章分类
文章存档

2015年(1)

2014年(3)

2013年(7)

2012年(52)

分类: WINDOWS

2012-04-19 12:22:58

关于skyeye和arm-elf-gcc的使用已经在前一篇中做过介绍了,这一篇将不再讲解。

这一篇我想讲述的是关于skyeye的配置文件,链接脚本以及汇编和C的混合编程。

1.skyeye.conf文件

这是skyeye的默认配置文件,通过skyeye.conf文件我们可以配置出任何skyeye支持的硬件环境。

《一步步写嵌入式操作系统》之基础知识篇 - 527829159 - xiyouren

这是S3c2410x这款芯片的配置文件。下面解释一下这个文件:

第一行关键字CPU记录的是芯片系列:s3c2410x微处理器使用的arm920t核;

第二行关键字mach记录的是芯片的型号;

#physical memory表示下边将要描述该芯片的物理特性,这句话完全可以不用写(带#表示注释部分,

所以下边的I/O映射这句话也是注释);

第四行mem_bank关键字描述的是芯片的内存空间特性:

map = M表示该段内存空间是一段内存,map = I表示该段内存空间对应的是外设端口;

type=rw表示该内存空间 具备可读写属性;

addr表示内存空间的起始地址,size表示内存空间的大小,

file = ./helloworld.bin表示预先要被加载到这段内存空间的映像文件。

2.链接脚本(helloworld.lds)

链接脚本是程序链接时的参考文件,其目的是描述输入文件中各段应该怎样被映射到输出文件,以及程序运行时的内存布局等等。

《一步步写嵌入式操作系统》之基础知识篇 - 527829159 - xiyouren

ENIRY命令等同于arm-elf-ld命令中的参数-e,即显式的指定哪一个函数为程序的入口函数;

SECTIONS命令是用来描述输出文件的内存布局的,有多条命令组成;

. = 0x00000000:(注意:点和=中间一定要有空格,不然会出错点号在SECTIONS命令中被称为位置计数器,它代表了当前位置;

.text:{*(.text)}:.text关键字定义了该输出位置为代码段,花括号内部定义了代码段的具体内容,其中*号表示所有文件,*(.text)的意思是所有

目标文件的代码段将被链接到这一区域,我们也可以特别的指定某个目标文件出现在代码段的最前面。

ALIGN(N):产生对齐的代码或数据,例如.=ALGIN(4)表示位置计数器会向高地址方向去最近的4字节的整数倍。

.data定义了该输出位置为数据段;.bss定义了该输出位置为bss段。

所以在进行链接文件时我们可以将命令arm-elf-ld -e hello -Ttext 0x0 hello.o -o hello 改为arm-elf-ld -T helloworld.lds hello.o -o hello

3.汇编与C的汇合编程

这块我个人还有点问题没解决,所以留在下次讲解。

阅读(3064) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~