对S3C2440 MMU的一点理解
罗覃东2009-10-8
以下以TQ2440开发为例说明本人对MMU工作原理的一点理解。
TQ2440开发板的SDRAM为64M,地址范围在0x3000 0000~0x33FF FFFF(属于Bank 6)。
S3C2440是32位的CPU,所以CPU可以看到的虚拟地址为232 = 4GB,而64M的物理地址(在0x3000 0000~0x33FF FFFF)只是虚拟地址的一小部分。
举例:
MOV R1, 0x30000012
下面结合下图说明一下当执行上述语句时,MMU是怎样工作的。
(不好意思,不知道怎样上传图片了,该图片是“ARM920T(Rev 1) Technical Reference Manual” 中的Figure 3-8 Section Translation) 。
Modified virtual address 就是0x30000012,Translation table base 就是CP15的Register 2,也就是TTB寄存器,该寄存器的低14为0。
当执MOV R1, 0x30000012 时,MMU先将0x30000012地高12位右移18位,然后与TTB寄存器中的内容相或,得到的是第一级段描述符的地址,也就是上图中的Seltion level one descriptor的地址,该地址中的内容:
31~20位:0x30000012 映射到物理地址的段基址
19~0 位:该段的一些信息,比如访问权限等等
Seltion level one descriptor地址中的内容的31~20位只是物理地址31~20位而已,剩下的19~0位是从0x30000012这个虚拟地址的19~0位得来的。取出物理地址以后就把物理地址中的内容送到R1中了。