分类: WINDOWS
2012-04-19 12:22:58
关于skyeye和arm-elf-gcc的使用已经在前一篇中做过介绍了,这一篇将不再讲解。
这一篇我想讲述的是关于skyeye的配置文件,链接脚本以及汇编和C的混合编程。
1.skyeye.conf文件
这是skyeye的默认配置文件,通过skyeye.conf文件我们可以配置出任何skyeye支持的硬件环境。
这是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)
链接脚本是程序链接时的参考文件,其目的是描述输入文件中各段应该怎样被映射到输出文件,以及程序运行时的内存布局等等。
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的汇合编程
这块我个人还有点问题没解决,所以留在下次讲解。