韦东山教程学习——cache和mmu——实际使用体验,创建一级页表

首先需要分析,开发板需要使用哪些地址,哪些需要映射,以及是否需要使用cache和write buffer如下:

1、程序一开始从0地址开始运行,为了保证使能mmu之后,前后地址一致,所以0地址需要映射

      即虚拟地址0映射到物理地址0,可以使用cache和buffer11

2、栈,如果是nor启动,需要用到栈0x40000000,

      即虚拟地址0x40000000映射到物理地址0x40000000,可以使用cache和buffer11

3、中断的跳转地址,于是映射整个sdram,大小为0x30000000到0x34000000共64M,那么就应该映射到0x33f00000

       即虚拟地址0x40000000映射到物理地址0x40000000,可以使用cache和buffer11

4、映射寄存器,查看手册,确定寄存器的范围0x48000000到0x5b00001c,则最后一个条目的地址是0x5b000000

    即虚拟地址0x48000000映射到物理地址0x40000000,不可以使用cache和buffer00

5、framebuffer 0x33c00000

  即虚拟地址0x33c00000映射到物理地址0x33c00000,不可以使用cache和buffer00

 

为了演示虚拟地址起作用,修改链接地址,由0x30000000改为0xb0000000

 

6、映射0xb0000000到物理地址0x3000000,可以使用cache和buffer 11

 

以上只是确定了待会儿要干什么,具体怎么做?

1、根据具体的手册,构造权限AP

2、

 

系统使用的0到4G虚拟内存,每个一级页表的条目映射的地址范围是1M,共有4096个条目,每个条目占据32位,即4Byte

那么整个页表占据4k×4Byte=16KB

这个页表也是要占内存空间的,放在哪儿?由于2440是自己去分配内存,所以确定0x32000000没有被占用,放在这儿、

unsigned int *ttb = (unsigned int *)0x32000000;

unsigned int va, pa;

int index;

 

映射第一部分的内存

va = 0;

pa = 0;

index  = va /0x100000,        确定是第几个条目,为第0个

ttb[index] = ((pa & 0xfff00000) | MMU_SECDSEC_FOR_MEM);

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值