打印

两次开启MMU

[复制链接]
2448|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cecwxf|  楼主 | 2011-4-28 10:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
今天我在阅读何宗键老师wince参考书籍的时候,发现了一个现象,那就是wince启动的时候,有两次开启MMU的过程,一次是在bootloader执行的时候,开启的MMU,一次是在OAL开始调用kernelstart函数的时候。有点疑问??为什么要开启两次MMU呢???两次开启MMU有什么不同???

相关帖子

沙发
cecwxf|  楼主 | 2011-4-28 15:09 | 只看该作者
无人应答???

使用特权

评论回复
板凳
cecwxf|  楼主 | 2011-4-28 15:09 | 只看该作者
自己顶!!

使用特权

评论回复
地板
cbhuan| | 2011-4-28 15:11 | 只看该作者
给你顶顶

使用特权

评论回复
5
cecwxf|  楼主 | 2011-5-1 20:00 | 只看该作者
自己来解决吧:因为最后在Bootloader中要调用OEMLaunch()函数,实际上调用的是Launch()函数进行实际的跳转。Launch()函数由汇编实现: LEAF_ENTRY Launch ldr r2,=PhysicalStart ldr r3,=(VIR_RAM_START - PHY_RAM_START) sub r2,r2,r3 mov r1 ,#0x0070;//禁用MMU mcr p15,0,r1,c1,c0,0 nop mov pc,r2;跳转 nop 因为跳转地址是物理地址,,,所以在跳转之前,首先把MMU禁用 ,然后,通过直接给PC寄存器赋值,实现实际的跳转。
结论:初始化MMU要在跳转物理地址之后进行。bootlaoder中初始化MMU就是在地址重定位,即将程序搬移到RAN后进行的。之后 bootloader启动完毕,系统需要调转到OS去执行,用到了跳转物理地址,所以在这之前要关闭MMU,跳转完毕以后即可打开MMU,两次MMU映射的地址也是一样的。

使用特权

评论回复
6
cecwxf|  楼主 | 2011-5-25 17:59 | 只看该作者
晕  上面有一部分解释错误,重新来
第一次MMU映射和第二次MMU映射不同。
第一次只设置一级页表,第二次不只要设置一级页表,而且还要设置二级页表。
OK

使用特权

评论回复
7
woshic23| | 2011-6-28 18:50 | 只看该作者
对MMU页表的设置内容是存在内存里了吗?在操作内存时会把页表内容改写掉吗?

使用特权

评论回复
8
woshic23| | 2011-6-28 18:52 | 只看该作者
初次接触MMU望有经验的大侠指点!!!!
多谢!!!!

使用特权

评论回复
9
ycz9999| | 2011-7-1 00:05 | 只看该作者
你可以通过改写协处理器CP15的C2寄存器来修改页表基地址的

使用特权

评论回复
10
woshic23| | 2011-7-1 14:09 | 只看该作者
已经解决!!
多谢!!

使用特权

评论回复
11
woshic23| | 2011-7-1 16:12 | 只看该作者
对MMU的讲解有本书写的很详细《ARM体系结构与编程》杜春雷的
很好的书!!!

使用特权

评论回复
12
cecwxf|  楼主 | 2011-7-3 11:12 | 只看该作者
呵呵 此贴竟然后面还有人回了。
最近一个多星期没有学习了,刚考试完。
要迅速进入状态。

使用特权

评论回复
13
lauai| | 2011-7-27 12:31 | 只看该作者
楼主你用的什么板子在学呀?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:充实灵魂,满足自己。做生活的强者,当时代的勇士!!!

2

主题

421

帖子

2

粉丝