mmu_enable指令执行的前后顺序

小陆zi 2012-10-07 12:44:40
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)的页表模式?

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

...全文
510 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
alphaxiang 2013-05-05
  • 打赏
  • 举报
回复
identity mapping pc是每执行一条指令加4 假设没开启mmu的时候pc = addr1,执行完这条指令开启mmu,那么下调指令的地址会是addr1 + 4 刚开启mmu的时候,会将有一个identity mapping,也就是通过mmu映射后,映射的结果还是addr1 + 4 某手机平台的相关代码片段: adr r0, __enable_mmu_loc ldmia r0, {r3, r5, r6} sub r0, r0, r3 @ virt->phys offset add r5, r5, r0 @ phys __enable_mmu add r6, r6, r0 @ phys __enable_mmu_end mov r5, r5, lsr #20 mov r6, r6, lsr #20 1: orr r3, r7, r5, lsl #20 @ flags + kernel base str r3, [r4, r5, lsl #2] @ identity mapping teq r5, r6 addne r5, r5, #1 @ next section bne 1b 仔细看看这一句 str r3, [r4, r5, lsl #2] @ identity mapping 其实是相当于 : map[i] = i,这就是 identity mapping r4是映射表的基地址 ,r5,r3其实是指向同一节内存
小陆zi 2012-12-15
  • 打赏
  • 举报
回复
我在这里也问个新手的问题和补充: 指令时pc自动取的。就是然后的行为就是pc自加1。或者是跳转指令,重新load了pc count。这个取值的过程应该也是经过MMU的。否则只有data cache了。 这里还有instuction cache。这个cache是存放指令本身还是存放pc寄存器的内容。vipt的cache中是v tag找到p address。那么这样一来是不是说:instuction cache中存放的是pc指针的内容? 谢谢
armstronglaw 2012-12-04
  • 打赏
  • 举报
回复
关键的PC寄存器与MMU是怎么样联系的?
armstronglaw 2012-12-04
  • 打赏
  • 举报
回复
新手问个问题,以指令寄存器存储一条指令开始,到主存中获得数据之前,指令的地址码部分是如何在CPU内部及主存之间流动和虚实转换的?(希望具体到寄存器如PC寄存器、总线等) 谢谢

21,619

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧