zImage内核镜像解压过程详解
[11-20 15:53:56] 来源:http://www.88dzw.com arm嵌入式 阅读:8665次
文章摘要:•需要重载内核地址,将r0的偏移量加到BSS region和GOT table中的每一项。对于位置无关的代码,程序是通过GOT表访问全局数据目标的,也就是说GOT表中中记录的是全局数据目标的绝对地址,所以其中的每一项也需要重载。• 清空bss堆栈空间r2-r3•建立C程序运行需要的缓存•这时r2是缓存的结束地址,r4是kernel的最后执行地址,r5是kernel境象文件的开始地址•用文件misc.c的函数decompress_kernel(),解压内核于缓存结束的地方(r2地址之后)。可能大家看了上面的文字描述还是不清楚解压的动态过
zImage内核镜像解压过程详解,标签:arm嵌入式系统,arm系统,http://www.88dzw.com•需要重载内核地址,将r0的偏移量加到BSS region和GOT table中的每一项。
对于位置无关的代码,程序是通过GOT表访问全局数据目标的,也就是说GOT表中中记录的是全局数据目标的绝对地址,所以其中的每一项也需要重载。
• 清空bss堆栈空间r2-r3
•建立C程序运行需要的缓存
•这时r2是缓存的结束地址,r4是kernel的最后执行地址,r5是kernel境象文件的开始地址
•用文件misc.c的函数decompress_kernel(),解压内核于缓存结束的地方(r2地址之后)。
可能大家看了上面的文字描述还是不清楚解压的动态过程。还是先用图表的方式描述下代码的搬运解压过程。然后再针对中间的一些关键过程阐述。
假定zImage在内存中的初始地址为0x30008000(这个地址由bootloader决定,位置不固定)
1、初始状态
.text |
|
. got |
? |
. data |
? |
.bss |
? |
.stack |
2、head.S调用misc.c中的decompress_kernel刚解压完内核后
.text |
|
. got |
? |
. data |
? |
.bss |
? |
.stack |
|
3、此时会将head.S中的部分代码重定位
.text |
|
. got |
? |
. data |
? |
.bss |
? |
.stack |
|
Tag:arm嵌入式,arm嵌入式系统,arm系统,arm嵌入式
《zImage内核镜像解压过程详解》相关文章
- › zImage内核镜像解压过程详解
- 在百度中搜索相关文章:zImage内核镜像解压过程详解
- 在谷歌中搜索相关文章:zImage内核镜像解压过程详解
- 在soso中搜索相关文章:zImage内核镜像解压过程详解
- 在搜狗中搜索相关文章:zImage内核镜像解压过程详解
分类导航
最新更新