arm exynos4412平臺mmu配置以及的簡單創建.
1.mmu的全稱是Memory Management Unit(內存管理單元)
2.mmu所在位置.mmu再arm核心.他不是一個外設,他是arm核心的的一部分.
3.爲什麼要使用mmu,因爲在多任務的操作系統當中,進程A,B,C都可能使一段地
D,爲了保存他們訪問的不是同一個物理地址,我們給每個進程4G的虛擬地址空間
然後使用,如何使用mmu來轉化虛擬地址空間和物理地址空間之間的對應關係,
這個轉換關係被稱爲頁表,再每個進程中都保存了一個進程特有的頁表,
爲了保證他們的物理地址不會重複,這些虛擬地址會被映射不同的物理地址段.
4.mmu工作原理:用來控制內存的訪問權限.
CP15 協處理器的c3寄存器
DACR, Domain Access Control Register, VMSA
DDI0406C_arm_architecture_reference_manual.pdf P1541
mmu一共有16個域,cp15中的32個位,每兩個位表示一個域,用來控制內存
訪問權限.
0b00 No access. Any access to the domain generates a Domain fault.
//如果cp15設置的是0b00那麼被映射的區域步可訪問.
0b01 Client. Accesses are checked against the permission bits in the
translation tables.
//需要檢查權限才能訪問.
0b10 Reserved, effect is UNPREDICTABLE .
//保留
0b11 Manager. Accesses are not checked against the permission bits in
the translation tables.
//不需要檢查權限.就可以訪問內存.
5.cp15協處理器,的寄存器c2的值用來保存頁表的物理地址.
ttb DDI0406C_arm_architecture_reference_manual.pdf P1711
MRC p15, 0, <Rt>, c2, c0, 1 ; Read 32-bit TTBR1 into Rt
MCR p15, 0, <Rt>, c2, c0, 1 ; Write Rt to 32-bit TTBR1
它用來保存頁表的物理首地址.下面是mcr的語法.
MCR指令將ARM處理器的寄存器中的數據傳送到協處理器的寄存器中。如果協處理器不能成功地執行該操作,將產生未定義的指令異常中斷。
指令的語法格式:
MCR{ <cond>} p15, 0, <Rd>, <CRn>, <CRm>{,<opcode_1>}
MCR2 p15, 0, <Rd>, <CRn>, <CRm>{,<opcode_2>}
其中,<cond>爲指令執行的條件碼。當<cond>忽略時指令爲無條件執行。MCR2中,<cond>爲Ob1111,指令爲無條件執行指令。
<opcode_1>爲協處理器將執行的操作的操作碼。對於CP15協處理器來說, <opcode_1>永遠爲0b000,當<opcode_1>不爲0b000時,該指令操作結果不可預知。
<Rd>作爲元寄存器的ARM寄存器,其值被傳送到得協處理器寄存器中。
<Rd>不能爲PC,當其爲PC時,指令操作結果不可預知。
<CRn>作爲目標寄存器的協處理器寄存器,其編號可能爲C0,C1....C15。 <CRm>附加的目標寄存器或者原操作數寄存器,
用於區分同一個編號的不同物理寄存器。當指令中不需要提供附加信息時,將C0指定爲<CRm>,否則指令操作結果不可預知。
<opcode_2>提供附加信息,用於區別同一個編號的不同物理寄存器。當指令中指定附加信息時,省略<opcode_2>或者將其指定爲0,否則指令操作結果不可預知。
MRC指令將協處理器的寄存器中數值傳送到ARM處理器的寄存器中。如果協處理器不能成功地執行該操作,將產生未定義的指令異常中斷。
指令的語法格式:
MRC{<cond>} p15, 0, <Rd>, <CRn>, <CRm>{,<opcode_2>}
MRC2 p15, 0, <Rd>, <CRn>, <CRm>{,<opcode_2>}
6.還有一個cp15協處理器的c1寄存器,的功能介紹,他是用來關閉和開啓mmu的.
可以在DDI0388I_cortex_a9_r4p1_trm.pdf中找到.p74頁中的
System Control Register的
[0] M bit Banked Enables the MMU: 0MMU disabled.
This is the reset value.1 MMU enabled.
MRC p15, 0,<Rd>, c1, c0, 0; Read SCTLR
MCR p15, 0,<Rd>, c1, c0, 0; Write SCTLR
也就是cp15寄存器中的c1寄存器的第0位要設置爲1,mmu功能才能開啓.
設置爲0則關閉.
7.下面是講解一下mmu是如何工作的.
第一步:cpu會找到cp15協處理器
第二步:cp15協處理器的寄存器c2中保存的當前頁表的物理地址.
第三步:通過這個地址mmu會找到內存中頁表,
第四步:mmu通過這個頁表進行相應的關係進行虛擬地址和物理地址的轉化.
8.轉化的過程如下:
mmu介紹
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.