Chinaunix首页 | 论坛 | 博客
  • 博客访问: 933758
  • 博文数量: 153
  • 博客积分: 4195
  • 博客等级: 上校
  • 技术积分: 2631
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-22 11:32
文章存档

2012年(7)

2010年(35)

2009年(111)

分类:

2009-09-12 17:12:35

8 arm支持的存储块大小有以下几种:

 ●段:大小是1M

 ●大页:大小是64KB

 ●小页:大小是4KB

 ●极小页:大小是1KB

mmu中通过两级页表实现上述地址映射:

一级页表中包含有以段为单位的地址变换条目和指向二级页表的指针。(因此如果需要以段位映射只需要一级页表

二级页表中包含以大页和小页为单位的地址变换条目。

 

9 mmu的变换蛮复杂的,这里先用一级页表的转换为例:

先要通过cp15c2寄存器(存放了页表基地址)和虚拟地址进行映射地址转换得到一级描述符地址,然后再通过物理地址的高12位、AP部分、C,B控制位、得到一级描述符,再将一级描述符存放在一级描述符地址中。

注意:一级描述符地址的最后两位指定了该一级描述符的类型。杜春雷书p180页,不过讲的很晦涩,没看懂,在我们一级页表的代码中用了00

     一级描述符的最后两位是一级描述符的类型标识,为0b10时该一级描述符为段描述符。

     一级描述符地址的最后两位和一级描述符的最后两位有点混淆???!

 

以下是AP的含义:(R,Sc1寄存器的控制位)

AP    S  R   Privileged permissions User permissions

0b00  0  0  不能访问        不能访问

0b00  1  0  只读           不能访问

0b00  0  1  只读           只读

0b00  1  1  不可预测        不可预测

0b01  X  X  读/写      不能访问

0b10  X  X  读/写      只读

0b11  X  X  读/写      读/写

 

以下是CB的含义:

C1时表示使能cache

B1时表示使能写缓存

C(高速缓存)和B(缓冲)位被用来控制高速缓存和写缓冲,并决定是否高速缓存。

阅读(2060) | 评论(6) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2009-10-24 13:30:08

1.0x4000000是我们esram的地址,要用esram当然要对它进行映射 2. ldr r0, =0x30004100 这是通过转换表算出来的一级描述符地址,然后把算出来的这个地址放进r0寄存器中 3.ldr r1, =0x4000c02 请参考杜春雷平81 图5.4 4.这些代码都是基于SEP4020处理器的

chinaunix网友2009-10-23 10:25:09

; 0.0x4000000映射到0x4000000 得到并写入1级页表 ;=======请问博主这个0x400 0000=64M这个地址怎么来?为什么要用这个地址? ldr r0, =0x30004100 ; R0寄存器加载1级页表描述符地址,具体配置如下:这是通过页表基址和虚拟地址得到的;=====个人觉得您加的解释是再介绍LDR这个指令怎么用。。。。 ldr r1, =0x4000c02 ;=====C02 这个偏移量是怎么来的?2倒可以理解是页表项代表为一级1MB段页表意思 str r1, [r0] ldr r0, =0x30004104 ; R0寄存器加载1级页表描述符地址,具体配置如下: ldr r1, =0x4100c02 str r1, [r0] 小弟最

chinaunix网友2009-10-22 16:22:16

上面只是在无操作系统下的一级页表的配置,只是段映射,序号8的循环是将sdram所在的0x30000000起的32M都做配置(因为段映射每次只能1M),关于二级页表的配置请参考Linux源码,或者是杜春雷的书,配起来还是蛮麻烦的

chinaunix网友2009-10-22 14:25:49

博主俺看了一天还没有看明白,这里只做一级页表填写,那么4GB空间有4K的一级页表项需要填写阿,我看了你的序号1~9,还有序号8的循环看不懂。 虚拟地址的变化增加也没有看出规律来,请博主帮帮忙,多加点文字解释。

myleeming2009-10-21 10:47:18

以下是无操作系统时的一级页表配置: ;************************************************************************************** ;* 初始化页表 ;************************************************************************************** ; 初始化MMU,Cache以及WB mov r0, #0 ; 将r0寄存器置0,用于后续对CP15寄存器赋值 mcr p15, 0, r0, c7, c7, 0 ; 失效I/DCache ; mcr p15, 0, r0, c7, c10, 4 ; 挤干WB mcr p15, 0, r0, c8, c7, 0 ; 失效I/D TLBs mrc p15, 0, r0, c1, c0, 0 ; 加载控制寄存器C1到R0 bic r0, r0,#0x000f ; 将R0的W(WB)C(Cache)A(Align)M(MMU)