Chinaunix首页 | 论坛 | 博客
  • 博客访问: 150719
  • 博文数量: 49
  • 博客积分: 45
  • 博客等级: 民兵
  • 技术积分: 545
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-23 13:22
文章分类
文章存档

2017年(5)

2016年(18)

2015年(18)

2014年(8)

我的朋友

分类: Android平台

2015-03-17 11:38:26

1,对于多核的处理器,每个CPU 都有自己的MMU,这个是在做trustzone SMP 启动的时候验证过的。

2,Uboot MMU 解读: 

在board/samsung/tiny4412/lowlevel_init.S 中

mmu_table:

        .set __base,0  开始地址

        // Access for iRAM

        .rept 0x200  从开始地址起,总共要重复的次数

        FL_SECTION_ENTRY __base,3,0,0,0

        .set __base,__base+1

        .endr

        // Not Allowed

        .rept 0x400 - 0x200 这一段的不允许访问

        .word 0x00000000

        .endr

        .set __base,0x400  开始地址

        // 512MB for SDRAM with cacheable

        .rept 0x800 - 0x400 从开始地址起,总共要重复的次数是0x800-0x400

        FL_SECTION_ENTRY __base,3,0,1,1 权限设置

        .set __base,__base+1

        .endr

        // access is not allowed.

        .rept 0xc00 - 0x800

        .word 0x00000000

        .endr

        .set __base,0x400

        // 512MB for SDRAM with cacheable

        .rept 0xE00 - 0xC00

        FL_SECTION_ENTRY __base,3,0,1,1

        .set __base,__base+1

        .endr

        // access is not allowed.

        .rept 0x1000 - 0xE00

        .word 0x00000000

        .endr

总共4G 即0x1000 被映射完毕

3,虚拟地址:

对于开启MMU 的系统,由CPU 发出访问的地址都是虚拟地址,虚拟地址经由MMU 转换成物理地址。

4,总线地址

实际上就是说这个发出地址的请求不是由CPU 发出的,他有可能是DMA控制器,或者USB控制器发出的地址请求,不是CPU 发出的地址自然就不会被MMU 截获,所以就不可能是虚拟地址了,但是我们的控制器(DMA或者具有类似DMA功能的USB控制器等)拿到一个地址的时候,这个地址往往是从CPU移交过来的,所以,我们得先把这个地址转换成总线地址(物理地址)再给控制器使用。通常内核会有一个vir_to_phy 之类的接口可以直接转换。  当然,对于控制器的IO 也有IOMMU 专门管这个,类似MMU了,只不过MMU 是给CPU 用的,IOMMU 是给外设控制器用的。

哎,以前没看到谁的博客把这个说明白的。

 

阅读(2222) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~