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

mmu_enable授命执行的前后顺序

2013-03-26 
mmu_enable指令执行的前后顺序本帖最后由 edwardlulinux 于 2012-10-07 01:01:15 编辑hi 大侠们:跪求问题

mmu_enable指令执行的前后顺序
本帖最后由 edwardlulinux 于 2012-10-07 01:01:15 编辑 hi 大侠们:
    跪求问题答案,还望高手指点。

前提:
    1,cpu就是取值运算。当没有分支指令时叫顺序执行。pc指针自加,取到后面的指令。
    2,当有分支指令时,跳转到某一个位置取指令去执行。
问题:
    当enable mmu后,pc指针还是自动加操作?如果这时候是自加的操作,在enable mmu后和之前的地址就是不一样了。需要转换,这时候如何实现无缝跳转?
1 __turn_mmu_on:
2     mov    r0, r0
3     mcr    p15, 0, r0, c1, c0, 0        @ 设置cp#15控制寄存器(启用MMU)
4     mrc    p15, 0, r3, c0, c0, 0        @ read id reg
5     mov    r3, r3
6     mov    r3, r13                        @ r3中装入最后要跳入的*虚拟*地址
7     mov    pc, r3                        @ 跳转到__mmap_switched
8 __enable_mmu_end:

A:
假设mmutable已近建立完成。就是最简单的线性映射的关系:
0xC000 0000,0xC000 0000+OFFSET -> 0x5000 0000,0x5000 0000+OFFSET
假设 3 4 行代码之前pc的内容是0xC0008000的值。但是在第5行后pc的内容是自动更新吗?还是依旧在0xC000800C?或者是0x5000000C?
假设__mmap_switched这个函数的地址是连接器按照0xC0000000的base来连接的,那么在mov pc r3的时候是不是要把r3寄存器内容修改成虚拟地址,应为这个时候mmu已经启动了。

B:
在补充一个问题:
paging_ini函数会再次建立页表,这时候的页表为精细页表(4K)的。那么在paging_init的之后在哪里有调用enable_mmu的函数,再次使能mmu,使mmu进入(4K)的页表模式?

请高手不要吝惜笔墨,真心求教。
谢谢


[解决办法]
新手问个问题,以指令寄存器存储一条指令开始,到主存中获得数据之前,指令的地址码部分是如何在CPU内部及主存之间流动和虚实转换的?(希望具体到寄存器如PC寄存器、总线等)
谢谢
[解决办法]
关键的PC寄存器与MMU是怎么样联系的?

热点排行