u-boot_smdkv210 分析八:MMU地址映射

ARM的MMU由CP15協處理器管理。

一. 與MMU管理有關的寄存器有:

C1:某些位 用於配置MMU中的一些操作
C2:頁表基地址,有效的爲[31:14],所以頁表地址必須16KB對齊。
C3:域(domain)的訪問控制屬性
C4:保留
C5:內存訪問失效狀態指示
C6:內存訪問失效時失效的地址
C8:控制和清除TLB內容相關的操作
C10:控制和鎖定TLB內容相關的操作

二. 禁止/使能MMU

C1的0位控制禁止/使能MMU:
MRC P15,0,R0,C1,0,0
ORR R0,#01
MCR P15,0,R0,C1,0,0

三. 段描述符

31                      20  19                        12  11  10  9  8        5  4  3  2  1  0

段基地址                    應爲0                          AP   0   域                  C  B  1  0

上述是一個以Section方式定義的段描述符:
一個Section爲1M,虛擬地址到物理地址的映射實際是高12位地址的置換。
C2的18位基地址作爲索引表的高18位,虛擬地址的高12位作爲索引表的低12位,共同構成低兩位爲0的字對齊索引表地址。
查到的表內容就是這個段描述符,這個描述符裏面的段基地址就是要被替換的虛擬地址高12位。
這個描述符還控制了這1M空間的讀寫、域、cache和buffer屬性。

四. 彙編建表準備

.macro FL_SECTION_ENTRY base,ap,d,c,b
    .word (\base << 20) | (\ap << 10) | (\d << 5) | (1<<4) | (\c << 3) | (\b << 2) | (1<<1)
.endm
.section .mmudata, "a"
    .align 14
    .globl mmu_table

宏FL_SECTION_ENTRY根據控制參數建立一個字大小的描述符。
.align 爲保證16KB地址對齊。

五. 彙編建表

    .set __base,0x200
    // 256MB for SDRAM with cacheable
    .rept 0xD00 - 0xC00
    FL_SECTION_ENTRY __base,3,0,1,1
    .set __base,__base+1
    .endr

__base爲這部分代碼建表物理地址的基地址。
rept控制建描述符數量,用0xD00-0xC00爲了從虛擬地址的0開始連續的建表,增強可讀性。
調用宏創建描述符。
__base每循環一次加一。

六. 實例

下面查看內存發現0xC0000000的確映射到0x20000000了。
SMDKV210 # md 20000000 20                                                       
20000000: 12345678 bdbcd51e bd6ff697 bf71f6ff    xV4.......o...q.               
20000010: fadcdf3f 7b4fe79f 9eb4cfff 8badefd7    ?.....O{........               
20000020: 8fa7ebdf d7afdf7d 6bacf5bf dbb5dbd6    ....}......k....               
20000030: ca39fdbf cba7cfd3 fff5f6bf 2b9553fd    ..9..........S.+               
20000040: df2dce57 ffa1601f cb478f55 8fa7cfff    W.-..`..U.G.....               
20000050: bb81c74f 9bb0f4df b7abd2d3 eba5fe37    O...........7...               
20000060: 9fafffdf df67f7be eea5b6bf bae5cd5b    ......g.....[...               
20000070: fb55ffd6 9be5d8ff c9b5fdfe 83afc09f    ..U.............               
SMDKV210 # md c0000000 20                                                       
c0000000: 12345678 bdbcd51e bd6ff697 bf71f6ff    xV4.......o...q.               
c0000010: fadcdf3f 7b4fe79f 9eb4cfff 8badefd7    ?.....O{........               
c0000020: 8fa7ebdf d7afdf7d 6bacf5bf dbb5dbd6    ....}......k....               
c0000030: ca39fdbf cba7cfd3 fff5f6bf 2b9553fd    ..9..........S.+               
c0000040: df2dce57 ffa1601f cb478f55 8fa7cfff    W.-..`..U.G.....               
c0000050: bb81c74f 9bb0f4df b7abd2d3 eba5fe37    O...........7...               
c0000060: 9fafffdf df67f7be eea5b6bf bae5cd5b    ......g.....[...               
c0000070: fb55ffd6 9be5d8ff c9b5fdfe 83afc09f    ..U.............  

發佈了10 篇原創文章 · 獲贊 4 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章