压缩内核zImage的启动过程中的参数
来源:互联网 发布:淘宝的评价管理在哪 编辑:程序博客网 时间:2024/06/16 19:14
转自http://blog.csdn.net/coldsnow33/article/details/37726613
.text段开始,先是内核解压地址的确定
#ifdef CONFIG_AUTO_ZRELADDR
#else
#endif
先从Linux基本参数入手吧,见表1。TEXT_OFFSET是代码相对于物理内存的偏移,通常选为32k=0x8000。CONFIG_AUTO_ZRELADDR的意思是如果你不知道ZRELADDR地址要定在内存什么地方,那么这段代码就可以帮你。看到0xf8000000了吧,那么后面有多少个0呢?答案是27个,那么2的27次方就是128M,这就明白了,只要你把解压程序放在最后解压完成后的内核空间的128M之内的偏移的话,就可以自动设定好解压后内核要运行的地址ZRELADDR。
如果你没有定义的话,那么,就会去取zreladdr作为最后解压的内核运行地址。那么这个zreladdr是从哪里来的呢?答案是在:arch/arm/boot/compressed/Makefile中定义的
# Supply ZRELADDR to the decompressor via a linker symbol.
ifneq ($(CONFIG_AUTO_ZRELADDR),y)
LDFLAGS_vmlinux += --defsym zreladdr=$(ZRELADDR)
endif
ZRELADDR这又是哪里定义的呢?答案是在:arch/arm/boot/Makefile中定义的
ifneq ($(MACHINE),)
include $(srctree)/$(MACHINE)/Makefile.boot
endif
# Note: the following conditions must always be true:
#
#
#
ZRELADDR
PARAMS_PHYS:= $(params_phys-y)
INITRD_PHYS:= $(initrd_phys-y)
而里面的几个参数是在每个arch/arm/Mach-xxx/ Makefile.boot里面定义的,内容如下:
params_phys-y := 0x20000100
initrd_phys-y
这下知道了,绕了一大圈,终于知道r4存的是什么了,就是最后内核解压的起址,也是最后解压后的内核的运行地址,记住,这个地址很重要。
解压内核参数
解压时symbol
解释
ZTEXTADDR
千成不要看成ZTE啊,呵,这里是zImage的运行的起始地址,当内核从nor flash中运行的时候很重要,如果在ram中运行,这个设为0
ZBSSADDR
这个地址也是一样的,这个是BSS的地址,如果在nor中运行解压的话,这个地址很重要。这个要放在RAM。
ZRELADDR
这个地址很重要,这个是解压后内核存放的地址,也是最后解压后内核的运行起址。
一般设为内存起址的32K之后,如ARM: 0x20008000
ZRELADDR = PHYS_OFFSET + TEXT_OFFSET
INITRD_PHYS
RAM disk的物理地址
INITRD_VIRT
RAM disk的虚拟地址
__virt_to_phys(INITRD_VIRT) = INITRD_PHYS
PARAMS_PHYS
内核参数的物理地址
内核参数
PHYS_OFFSET
实际RAM的物理地址
对于当前ARM来说,就是0x20000000
PAGE_OFFSET
内核空间的起始虚拟地址,通常: 0xC0000000,高端1G
__virt_to_phys(PAGE_OFFSET) = PHYS_OFFSET
TASK_SIZE
用户进程的内存的最太值(以字节为单位)
TEXTADDR
内核启运行的虚拟地址的起址,通常设为0xC0008000
TEXTADDR = PAGE_OFFSET + TEXT_OFFSET
__virt_to_phys(TEXTADDR) = ZRELADDR
TEXT_OFFSET
相对于内存起址的内核代码存放的偏移,通常设为 32k (0x8000)
DATAADDR
这个是内核数据段的虚拟地址的起址,当用zImage的时候不要定义。
- 压缩内核zImage的启动过程中的参数
- ARM linux解析之压缩内核zImage的启动过程
- ARM linux解析之压缩内核zImage的启动过程
- ARM linux解析之压缩内核zImage的启动过程 一
- ARM linux解析之压缩内核zImage的启动过程 二
- ARM linux解析之压缩内核zImage的启动过程 三
- 基于Linux2.6.35内核的zImage启动过程研究
- linux内核启动过程——zImage自解压
- Linux 内核启动过程分析----zImage自解压
- 2.4 zImage 启动过程
- Linux内核源码分析--内核启动之(1)zImage自解压过程(Linux-3.0 ARMv7)
- Linux内核源码分析--内核启动之(1)zImage自解压过程(Linux-3.0 ARMv7)
- Linux内核源码分析--内核启动之(1)zImage自解压过程(Linux-3.0 ARMv7)
- Linux内核源码分析--内核启动之(1)zImage自解压过程(Linux-3.0 ARMv7)
- Linux内核源码分析--内核启动之(1)zImage自解压过程(Linux-3.0 ARMv7)
- Linux内核源码分析--内核启动之(1)zImage自解压过程(Linux-3.0 ARMv7)
- zImage的生成过程
- 内核的启动过程
- 常用对象集合自定义排序
- 使用编辑器里的声音插件
- riot实现alert标签
- VC中CDockablePane使用心得
- 1017. A除以B (20)
- 压缩内核zImage的启动过程中的参数
- 一个无穷级数展开式
- Hibernate环境的配置
- Kafka学习(1)——kafka文档阅读笔记
- Y400电脑键帽扣下来和安装上去
- Maven依赖中的scope详解
- Hibernate
- Java基础:网络编程
- [GDOI2017模拟]最大值(贪心+递推)