写在前头
*.版权声明:本篇文章为原创,可随意转载,转载请注明出处,谢谢!另我创建一个QQ群82642304,欢迎加入!
*.目的:整理一下RIotBoard开发板的启动流程,对自己的所学做一个整理总结,本系列内核代码基于linux-3.0.35-imx。
*.备注:整个系列只是对我所学进行总结,记录我认为是关键的点,另我能力有限,难免出现疏漏错误,如果读者有发现请多指正,以免我误导他人!
解压时会不会出现覆盖
在RIotBoard板上,内核被Uboot加载到的地址为0x10800000,而内核被解压的地址也是0x10800000,所以根据上篇的分析,目前内存上面的分布为:
我们可以看出,解压的时候会导致解压后的数据覆盖掉待解压的数据,所以解压之前我们先要处理一下,防止覆盖情况的发生。
接着上篇文章分析的代码位置往下看
/*
* Check to see if we will overwrite ourselves.
* r4 = final kernel address
* r9 = size of decompressed image
* r10 = end of this image, including bss/stack/malloc space if non XIP
* We basically want:
* r4 - 16k page directory >= r10 -> OK
* r4 + image length <= current position (pc) -> OK
*/
add r10, r10, #16384
cmp