原创 WINCE两次开启MMU

2011-4-28 10:43 2076 4 7 分类: MCU/ 嵌入式

今天我在阅读何宗键老师wince参考书籍的时候,发现了一个现象,那就是wince启动的时候,有两次开启MMU的过程,一次是在bootloader执行的时候,开启的MMU,一次是在OAL开始调用kernel start函数的时候。有点疑问??为什么要开启两次MMU呢???两次开启MMU有什么不同???

网上看了一个帖子http://bbs.driverdevelop.com/read.php?tid-112016-page-2.html,讲的有点意思。

知道的同学说一下,不甚感激、

留待后面解决。


PARTNER CONTENT

文章评论3条评论)

登录后参与讨论

wangxinfeng6666_749290079 2011-5-13 01:22

上面理由有些牵强,,明天我总结一下 重新补上

wangxinfeng6666_749290079 2011-5-1 17:31

结论:初始化MMU要在跳转物理地址之后进行。bootlaoder中初始化MMU就是在地址重定位,即将程序搬移到RAN后进行的。之后bootloader启动完毕,系统需要调转到OS去执行,用到了跳转物理地址,所以在这之前要关闭MMU,跳转完毕以后即可打开MMU,两次MMU映射的地址也是一样的。

wangxinfeng6666_749290079 2011-5-1 17:23

因为最后在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寄存器赋值,实现实际的跳转。
相关推荐阅读
wangxinfeng6666_749290079 2014-04-15 18:43
lianjie
...
wangxinfeng6666_749290079 2014-02-24 00:24
Linux设备模型(热插拔、mdev 与 firmware)
转自:http://blog.chinaunix.net/space.php?uid=20543672&do=blog&cuid=460882 热插拔有 2 个不同角度来看待热...
wangxinfeng6666_749290079 2013-12-17 20:06
2012.8.15
今天测试了自己做的标签的天线性能,感觉效果还不错。相信在实际的应用中也会有比较好的效果.下来的事情就是激励器代码的不断优化,标签代码的不断优化.通过这两者的不断优化来成功地运作.     ...
wangxinfeng6666_749290079 2013-12-17 20:05
2012.8.4小记
七月忙的狗血喷头。双频的产品终于有了点样子,后续就是一些结构模具上的微调. 解决的问题其实都很简单,从调试激励器、2510、2530标签,时序分析、波形分析到一个一个Bug的去除.成长还算大....
wangxinfeng6666_749290079 2013-12-08 21:48
find与grep命令
在linux下面工作,有些命令能够大大提高效率。本文就向大家介绍find、grep命令,他哥俩可以算是必会的linux命令,我几乎每天都要用到他们。本文结构如下: find命令 find命令...
wangxinfeng6666_749290079 2013-08-05 13:56
内核,initrd,ramdisk,关系,用途
转自:http://www.lupaworld.com/forum.php?mod=viewthread&tid=61425 原名:内核与ramdisk到底是什么关系? ...
EE直播间
更多
我要评论
3
4
关闭 站长推荐上一条 /3 下一条