Linux内核定义的常量

转载 2007年10月07日 05:28:00
 

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

             phys = virt - PAGE_OFFSET + PHYS_OFFSET

2 解压缩符号

l         ZTEXTADDR

解压缩器的地址地址。由于当你调用解压缩器代码时,通常关闭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_VIRT

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

__virt_to_phys(INITRD_VIRT) == INITRD_PHYS

l         PARAMS_PHYS

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

3 内核符号

l         PHYS_OFFSET

RAM第一个BANK的物理地址地址。

l         PAGE_OFFSET

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

l         TASK_SIZE

一个用户进程的最大值,单位为byte。用户空间的堆栈从这个地址处向下增长。

任何一个低于TASK_SIZE的虚拟地址对用户进程来说都是不可见的,因此,内核通过进程偏移对每个进行进行动态的管理。我把这叫做用户段。任何高于TASK_SIZE的对所有进程都是相同的,称之为内核段。(换句话说,你不能把IO映射放在低于TASK_SIZEPAGE_OFFSET的位置处。)

l         TEXTADDR

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

l         DATAADDR

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

l         VMALLOC_START

l         VMALLOC_END

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

l         VMALLOC_OFFSET

Offset normally incorporated into VMALLOC_START to provide a hole between virtual RAM and the vmalloc area. We do this to allow out of bounds memory accesses (eg, something writing off the end of the mapped memory map) to be caught. Normally set to 8MB.

4 构架相关的宏

l         BOOT_MEM(pram,pio,vio)

pram——指定了RAM起始的物理地址,必须始终存在,并应等于PHYS_OFFSET

pio——是供arch/arm/kernel/debug-armv.S中的调试宏使用的,包含IO8 MB区域的物理地址。

vio——是8MB调试区域的虚拟地址。

这个调试区域将被位于代码中(通过MAPIO函数)的随后的构架相关代码再次进行初始化。

l         BOOT_PARAMS

参见 PARAMS_PHYS.

l         FIXUP(func)

机器相关的修正,在存储子系统被初始化前运行。

l         MAPIO(func)

机器相关的函数,用于IO区域的映射(包括上面的调试区)。

l         INITIRQ(func)

用于初始化中断的机器相关的函数

 

Linux内核定义的常量

  定义了你的机器上的地址转换__virt_to_phys()。这个宏用...
  • anxiongshan
  • anxiongshan
  • 2007年10月07日 05:28
  • 447

向linux内核版本号添加字符/为何有时会自动添加"+"号或者"xxx-dirty"

原文地址:http://blog.csdn.net/adaptiver/article/details/7225980 转载说明:你可能想不到,是git管理的“问题”,看下面的解析,对于u-boot也...
  • kangear
  • kangear
  • 2013年11月29日 10:40
  • 1962

Linux内核定义的常量

Linux内核定义的常量 转载  Linux内核定义的常量    1 初始定义 定义了你的机器上的地址转换__virt_to_phys()。这个宏用于把虚拟地址转换为一个物理地址。通常情...
  • wangshh03
  • wangshh03
  • 2017年06月13日 14:04
  • 36

c++中常量的两种定义方式

常量是定以后,在程序运行中不能被改变的标识符。C++中定义常量可以用#define 、const 这两种方法。例如: #define PRICE 10 //定义单价常量10 const int P...
  • qq_35809147
  • qq_35809147
  • 2016年10月10日 09:53
  • 874

Linux下设置和查看环境变量

Linux的变量种类 按变量的生存周期来划分,Linux变量可分为两类:  1 永久的:需要修改配置文件,变量永久生效。  2 临时的:使用export命令声明即可,变量在关闭shell时失...
  • ws379374000
  • ws379374000
  • 2017年12月08日 11:23
  • 103

Linux环境变量详解

环境变量设置 /etc/profile:在登录时,操作系统定制用户环境时使用的第一个文件,此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。并从/etc/profile.d目录的...
  • gatieme
  • gatieme
  • 2014年05月16日 14:52
  • 15721

thinkphp系统常量与自定义常量

----------------------------------------Action中使用的系统常量---------------------------------------- THINK...
  • wuji_1
  • wuji_1
  • 2014年03月03日 13:41
  • 4353

java中定义常量方法

一、常量定义的基本注意事项。    在Java语言中,主要是利用final关键字(在Java类中灵活使用Static关键字)来定义常量。当常量被设定后,一般情况下就不允许再进行更改。如可以利用如下的...
  • bugDemo
  • bugDemo
  • 2012年06月10日 20:33
  • 8917

关于Linux下的环境变量

1.  /etc/profile 2.~/.bash_profile 3.~/.bashrc 4./etc/bashrc
  • foreverfriends
  • foreverfriends
  • 2017年05月10日 08:45
  • 275

linux下新旧两个软件的环境变量设置

将新版软件的环境变量添加在旧版软件的环境变量之前 ex:  =====================================================     /root/.b...
  • Hacker_NO_1
  • Hacker_NO_1
  • 2015年04月14日 12:34
  • 665
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux内核定义的常量
举报原因:
原因补充:

(最多只允许输入30个字)