line 231, 將位址等於 r10+PROCINFO_MM_MMUFLAGS 裡頭的值放到r7。r10是proc_info的位址。proc的info data structure被定義在『./include/asm-arm/procinfo.h』,offset取得的方式用compiler的功能,以便以後新增structure的欄位的時候不需要更動程式碼。這邊的動作合起來就是讀預設要設給mmu flags的值。
7 ^- b! `& c E( c& [上篇已經將pc所屬的page table entry(pte)設定好,接著繼續看& G5 P/ C p) b5 U
line 247, 248, 將KERNEL_START的位址往右shift 18算出pte的offset,(等於line239&241,239&241是先shift right 20然後shift left 2),並將剛剛r3的值設給pte。『!』的意思是會把address存到r0。/ V$ a6 Q) R) r* J
' y% M6 l0 r/ R. s
line 249~252, 算出KERNEL_END-1的pte位址放到r6, KERNEL_START的下一個pte的位址放到r0。r0 <= r6的話就持續對pte寫入初值的動作。但是這邊的r3有加上(0x1<<20),所以原本的section base會變成加1,目前不是很明瞭為什麼要加1,或許往後面會找到答案。
作者: gogojesse 時間: 2008-10-22 08:24 PM
line279,PAGE_OFFSET是規範RAM mapping完後的virtual address,我們將這個位址所屬的pte算出來放到r0。+ y6 } ]: a2 n# ]$ p
line 280~283,將要 map 的physical address的方式算出來放到r6。/ n1 C4 a' C# u" R
line 284,最後將結果存到r0所指到的pte。& P9 J. W$ P7 Q( J8 h
9 Q, R; \) p, i+ g
以上三個動作,就是做好 ram 起頭的位址一開始map,還沒做完整塊map。由於我們目前的設定方式每塊是1MB,所以這邊是將RAM開始的1MB做map。 8 _0 Z! u6 |5 [9 m9 X) k7 Q) j4 Y: b4 M l S* s. Y
line 327,返回,結束一開始的create page table的動作,我們可以看出其實並沒有做完整的初始化page table,所以之後應該會有其他page table的細節。