Linux内核(3)——常量

来源:互联网 发布:广东毕业生就业数据 编辑:程序博客网 时间:2024/06/08 01:32

常量定义

初始定义
宏phys定义了你的机器上的地址转换__virt_to_phys()。这个宏用于把虚拟地址转换为一个物理地址。通常情况下:

phys = virt - PAGE_OFFSET PHYS_OFFSET

解压缩符号
解压缩器的地址地址。由于当你调用解压缩器代码时,通常关闭MMU,因此这里并不讨论虚拟地址和物理地址的问题。通常你在这个地址处调用内核,开始引导内核。它不需要在RAM中,只需要位于FLASH或其他只读或读/写的可寻址的存储设备中。

l ZBSSADDR

解压缩器的初始化为0的工作区的起始地址。必须位于RAM中,解压缩器会替你把它初始化为0,此外,需要关闭MMU。

l ZRELADDR

解压缩内核将被写入的地址和最终的执行地址。必须满足:

__virt_to_phys(TEXTADDR) == ZRELADDR

内核的开始部分被编码为与位置无关的代码。

l INITRD_PHYS

放置初始RAM盘的物理地址。仅当你使用bootpImage时相关(这是一种非常老的param_struct结构)

l INITRD_ⅥRT

初始RAM盘的虚拟地址。必须满足:

__virt_to_phys(INITRD_ⅥRT) == INITRD_PHYSl PARAMS_PHYS

param_struct 结构体或tag lis的物理地址,用于给定内核执行环境下的不同参数。

内核符号
RAM第一个BANK的物理地址地址。

l PAGE_OFFSET

RAM第一个BANK的虚拟地址地址。在内核引导阶段,虚拟地址PAGE_OFFSE将被映射为物理地址PHYS_OFFSET,它应该与TASK_SIZE具有相同的值。

l TASK_SIZE
一个用户进程的最大值,单位为byte。用户空间的堆栈从这个地址处向下增长。
任何一个低于TASK_SIZE的虚拟地址对用户进程来说都是不可见的,因此,内核通过进程偏移对每个进行进行动态的管理。我把这叫做用户段。任何高于TASK_SIZE的对所有进程都是相同的,称之为内核段。(换句话说,你不能把IO映射放在低于TASK_SIZE和PAGE_OFFSET的位置处。)

l TEXTADDR
内核的虚拟起始地址,通常为PAGE_OFFSET 0x8000。内核映射必须在此结束。

l DATAADDR
内核数据段的虚拟地址,不能在使用解压缩器的情况下定义。

l VMALLOC_START
l VMALLOC_END
用于限制vmalloc()区域的虚拟地址。此地址必须位于内核段。通常,vmalloc()区域在最后的虚拟RAM地址以上开始VMALLOC_OFFSET字节。

l VMALLOC_OFFSET
偏移通常纳入vmalloc_start提供虚拟内存和vmalloc区之间的一个通道。我们这样做是为了允许越界内存访问(例如,写入映射内存映射的结尾)捕获。通常设定8MB。

构架宏
pram——指定了RAM起始的物理地址,必须始终存在,并应等于PHYS_OFFSET。
pio——是供arch/arm/kernel/debug-armv.S中的调试宏使用的,包含IO的8 MB区域的物理地址。
vio——是8MB调试区域的虚拟地址。
这个调试区域将被位于代码中(通过MAPIO函数)的随后的构架相关代码再次进行初始化。
l BOOT_PARAMS
参见 PARAMS_PHYS.
l FⅨUP(func)
机器相关的修正,在存储子系统被初始化前运行。
l MAPIO(func)
机器相关的函数,用于IO区域的映射(包括上面的调试区)。
l INITIRQ(func)
用于初始化中断的机器相关的函数。

阅读全文
0 0
原创粉丝点击