Chinaunix首页 | 论坛 | 博客
  • 博客访问: 92085
  • 博文数量: 18
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 180
  • 用 户 组: 普通用户
  • 注册时间: 2009-02-08 08:26
文章分类
文章存档

2010年(4)

2009年(14)

我的朋友

分类: LINUX

2009-05-27 22:18:44

话说我还是刚学完的计算机体系结构,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,程序基本就是这么分析完毕了。
阅读(1731) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~