首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 驱动开发 >

ARM S5PC110 MMU 访问地址的有关问题

2012-09-10 
ARM S5PC110 MMU 访问地址的问题hi 大侠们:想要问个关于MMU的问题。我手上的开发板是QT210的。现在在uboot中

ARM S5PC110 MMU 访问地址的问题
hi 大侠们:
  想要问个关于MMU的问题。
  我手上的开发板是QT210的。现在在uboot中输入以下命令:
  (1):
  nand read 30A00000 B00000 180000
  md 30A00000 10
  (2):
  nand read C0A00000 B00000 180000
  md C0A00000 10

  以上两组命令后现实的内容完全一样。唯一不一样的地方是nand读取后存放地址。(1)中是30A00000而(2)中是C0A00000。

  看了lowlevel_init.S中关于mmu的设置(uboot中使用了MMU),打开使能MMU。而且映射的地址关系是这样的:
  /*
  * MMU Table for SMDKC110
  * 0x0000_0000 -- 0xBFFF_FFFF => Not Allowed
  * 0xB000_0000 -- 0xB7FF_FFFF => A:0xB000_0000 -- 0xB7FF_FFFF
  * 0xC000_0000 -- 0xC7FF_FFFF => A:0x3000_0000 -- 0x37FF_FFFF  
  * 0xC800_0000 -- 0xDFFF_FFFF => Not Allowed
  * 0xE000_0000 -- 0xFFFF_FFFF => A:0xE000_0000 -- 0XFFFF_FFFF
  */

  我的问题是这样的:
虚拟转实际过程中我们使用的是减掉偏移。如果是不相同的两个地址为什么会导致读取的内容是一样的?
  硬件的sdram的映射地址位30000000 ~ 4FFFFFFF(256MBx2)
  假如输入的地址是C0A00000 那么最后作用在物理地址上的就是30A00000。如上图中红色的映射关系所示。
  但是如果是30A00000,那么这个地址将会如何被MMU所识别?也是减去一个便宜量?或者说在uboot的代码中。MMU的设置是双向的?
  vir《=》phy 是相等的?
  不知到我的理解对吗,大侠不要吝啬自己的文笔和知识,请多给点意见。
谢谢

[解决办法]
VA到PA不是简简单单的偏移那么简单。PA=tabMap[VA>>20]+VA&0xfffff
就是说将虚拟地址的高12位取出来,作为指针数组的下标,该下标对应的元素是一个内存地址,把这个地址
作为一段地址的基指,再加上低20位偏移地址。
根据这个0x0000_0000 -- 0xBFFF_FFFF => Not Allowed
也许你的页表中没有指定页表基址,mmu根本找不到VA到PA的映射关系,也许没有使用mmu就直接处理了。

[解决办法]
MMU都是通过映射表来实现的。可以分成几级映射,就有几个层次的表。表的基地址写在mmu寄存器里,一个虚地址来了,高10位找到相应的一级表,后面n位找到二级表,最后结合最后偏移量得到物理地址。。。。
这些都是标准的统一的。
如果说一段地址不让访问没有映射,其实是可以将其对应的表项属性进行设置,每个表都有属性标志,比如可读写缓存。。。
如果禁止读写,就不能访问了,虽然表项存在。

热点排行