大家好,armv8上面,我想开着mmu,但是虚拟地址和物理地址又是一样的,这个怎么样才能实现。
谢谢。
MMU的作用就是用来做虚拟地址和物理地址转换的,你开着还要保持一致,有什么特殊原因吗?
这个在baremetal的arm代码里面一般都是配置PA等于VA的。 需要在page table的描述符上,把PA配置为和VA一样。
在linux一般不这样做, linux kernel运行在EL1的VA是高地址.一般一个SOC的physical map,还不会有0xFFFF 0000 0000 0000 这么大的地址
这个比较好实现,设置TLB描述表项的物理地址即可,具体方法如下:
以1MB一级页表为例,设:
unsigned int page_table[4096]={0}
unsigned int va=0xC000 0000 <---虚拟地址
unsigned int pa=0x4000 0000 <--物理地址
设置
page_table[va>>20].pa=pa & 0xfff0 0000
page_table[va>>20].pa表示对应表项的pa字段
表项的低20位为该TLB描述符属性,参照手册