Chinaunix首页 | 论坛 | 博客
  • 博客访问: 18067
  • 博文数量: 5
  • 博客积分: 51
  • 博客等级: 民兵
  • 技术积分: 32
  • 用 户 组: 普通用户
  • 注册时间: 2011-12-21 12:45
文章分类

全部博文(5)

文章存档

2013年(3)

2012年(1)

2011年(1)

我的朋友

分类: 嵌入式

2011-12-27 19:08:04

1. abort
.abort: 停止汇编
.align abs­expr1, abs­expr2: 以某种对齐方式,在未使用的存储区域填充值. 第一个值表示对齐方式,4, 8,16 或
                                           32. 第
二个表达式值表示填充的值.
2. if...else...endif
.if
.else
.endif: 支持条件预编译

3. include
.include "file": 包含指定的头文件, 可以把一个汇编常量定义放在头文件中.

4. comm
.comm symbol, length:在 bss 段申请一段命名空间,该段空间的名称叫 symbol, 长度为 length.  Ld 连接器在
                                           连接会
为它留出空间.
5. data
.data subsection: 说明接下来的定义归属于 subsection 数据段.

6.  equ

.equ symbol, expression: 把某一个符号(symbol)定义成某一个值(expression).该指令并不分配空间.

7. global

.global symbol: 定义一个全局符号, 通常是为 ld 使用.

8. ascii

.ascii "string": 定义一个字符串并为之分配空间.

9. byte

.byte expressions: 定义一个字节, 并为之分配空间.

10. short

.short expressions: 定义一个短整型,  并为之分配空间.
11. int
.int expressions: 定义一个整型,并为之分配空间.

12 long

.long expressions: 定义一个长整型, 并为之分配空间.

13 word

.word expressions: 定义一个字,并为之分配空间, 4bytes.

14. macro/endm

.macro: 定义一段宏代码, .macro 表示代码的开始, .endm 表示代码的结束.

15. req

name .req register name:  为寄存器定义一个别名.

16. code

.code [16|32]: 指定指令代码产生的长度, 16 表示 Thumb 指令, 32 表示 ARM 指令.

17. ltorg

.ltorg: 表示当前往下的定义在归于当前段,并为之分配空间.

ARM GNU 专有符号
1. @
表示注释从当前位置到行尾的字符.
2. #
注释掉一整行.
3. ;
新行分隔符.


lds 文件说明
1. OUTPUT_FORMAT(bfdname)
指定输出可执行文件格式.
2.  OUTPUT_ARCH(bfdname)
指定输出可执行文件所运行 CPU 平台
3. ENTRY(symbol)
指定可执行文件的入口段

段定义说明
1.  段定义格式
SECTIONS { ...
段名 : {
内容
}
...
}

u­boot.lds 文件说明
OUTPUT_FORMAT("elf32­littlearm", "elf32­littlearm", "elf32­littlearm")
;指定输出可执行文件是 elf 格式,32 位 ARM 指令,小端
OUTPUT_ARCH(arm)
;指定输出可执行文件的平台为 ARM
ENTRY(_start)
;指定输出可执行文件的起始代码段为_start.
SECTIONS
{
. = 0x00000000  ; 从 0x0 位置开始
. = ALIGN(4) ; 代码以 4 字节对齐
.text      :  ;指定代码段
{
cpu/arm920t/start.o   (.text) ; 代码的第一个代码部分
*(.text)  ;其它代码部分
}
. = ALIGN(4)
.rodata : { *(.rodata) } ;指定只读数据段
. = ALIGN(4);
.data : { *(.data) } ;指定读/写数据段
. = ALIGN(4);
.got : { *(.got) } ;指定 got 段, got 段式是 uboot 自定义的一个段, 非标准段
__u_boot_cmd_start = . ;把__u_boot_cmd_start 赋值为当前位置, 即起始位置
.u_boot_cmd : { *(.u_boot_cmd) } ;指定 u_boot_cmd 段, uboot 把所有的 uboot 命令放在该段.
__u_boot_cmd_end = .;把__u_boot_cmd_end 赋值为当前位置,即结束位置
. = ALIGN(4);
__bss_start = .; 把__bss_start 赋值为当前位置,即 bss 段的开始位置
.bss : { *(.bss) }; 指定 bss 段
_end = .; 把_end值为当前位置,即 bss 段的结束位置

}



阅读(649) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:嵌入式Linux之我行——ARM MMU工作原理剖析

给主人留下些什么吧!~~