- 論壇徽章:
- 0
|
本帖最后由 leslielg 于 2012-09-14 09:37 編輯
arm linux, 2.6.35
1. __create_page_tables 的時(shí)候,先
add r0, r4, #(KERNEL_START & 0xff000000) >> 18
str r3, [r0, #(KERNEL_START & 0x00f00000) >> 18]!
將內(nèi)核鏈接地址(KERNEL_START=PAGE_OFFSET+TEXT_OFFSET)印射到內(nèi)核運(yùn)行的物理地址(由pc計(jì)算出來(lái)的位置)。
然后
/*
* Then map first 1MB of ram in case it contains our boot params.
*/
add r0, r4, #PAGE_OFFSET >> 18
orr r6, r7, #(PHYS_OFFSET & 0xff000000)
.if (PHYS_OFFSET & 0x00f00000)
orr r6, r6, #(PHYS_OFFSET & 0x00f00000)
.endif
str r6, [r0]
又將PAGE_OFFSET印射到物理地址0的位置。
問(wèn)題是如果uboot設(shè)置內(nèi)核運(yùn)行的物理地址不在物理地址0處,那這兩個(gè)印射是不是就沖突了?第一個(gè)印射在頁(yè)表里被第二個(gè)印射覆蓋,會(huì)不會(huì)對(duì)kernel產(chǎn)生影響?還是作者知道會(huì)覆蓋,但是后來(lái)kernel有處理,所以不會(huì)導(dǎo)致影響?
2. add r0, r4, #(KERNEL_START & 0xff000000) >> 18
str r3, [r0, #(KERNEL_START & 0x00f00000) >> 18]!
為何設(shè)置頁(yè)表要先取最高8位,然后再加上后面4位?不能直接取得12位的頁(yè)表項(xiàng)?
3. #define THREAD_START_SP (THREAD_SIZE - 8 )
為何這里要減去8?
先謝了!
|
|