免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 956 | 回复: 0
打印 上一主题 下一主题

MMU代码分析 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-27 22:18 |只看该作者 |倒序浏览
话说我还是刚学完的计算机体系结构,VA,PA,TLB……还都历历在目呢,但是看这章这叫一个痛苦啊。。。。。找技术手册,发现居然没有提MMU,厄,既然学不出头绪,就迎着头皮把代码分析完吧。。
下面是关于书上P114页的代码解读。
整个程序分为两部分,
第一部分:初始化SDRAM;把第2部分程序复制到内存某段地址;设置3段虚页表,让他们指向实地址(其中一段就是前面的把第1段复制到的地址);设置并开启MMU
第二部分:就是被复制的程序了,这段程序完成LED灯的显示与执行。
初始化SDRAM和前面大同小异,只不过放到了C语言中,一样的,把数值直接写入到寄存器地址嘛。。。
复制程序一样的,对于MINI2440,肯定是需要修改的。这个一会儿再说吧。
虚页表要好好说道一下了:-)
这个实例程序采用的是段页表,Section Address(见P110页下面的图),段描述符的格式这个样子:
31~20:Section Base Address,段基地址,虚地址对应的物理地址的高12位由这个段地址决定,而物理地址的后19~0位由页表决定,就是要用户自己设置的虚页表了啦。20位,正好是1Mb嘛。。
剩下的几位也不能闲着啊。
11~10:AP,决定如何对这一块内存进行权限检查,见P108页表7.1
8~5:domain,域,4位可以对应16个域。每个域按照P108表7.1进行了相关的设置,这一块内存首先利用domain指向的域中规定的方法进行权限检查,如果该区域对应的是11,不检查,再用AP的方式进行检查。
4:规定为1
3:Ctt,是否允许读取指令Cache,0为允许,1为不允许。
2:B:是否使用Write Buffer
1~0:取10,表示这个描述符号是段描述符~
因此就定义了两种参数模式:
MMU_SECDESC:NCNB模式
MMU_SECDESC_WB:WB模式
三段虚页表的映射关系:
上面也说道了,因为是使用段描述符号,所以物理地址的低20位,0~19由页表中的值来决定。
用个表示吧。
虚地址               物理地址
0x00000000    0x00000000
0xA0000000    0x56000000
0xB0000000    0x30000000
以第二行的这个为例子吧,虚地址0xA0000000,因为每个段描述符号可以表示1M的,因此,
0xA0000000>>20,就是表示这个段描述符号条目的编号,也就是需要把第2行的这一映射关系存入
0x30000000+0xA0000000>>20 这个内存单元中,存入的数值呢,就是0x56000000的高12位,低20位要设定MMU的权限控制啊,别忘了。见上吧。
Ok,程序基本就是这么分析完毕了。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/92646/showart_1946599.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP