整个的一个外设映射关系以及phys_to_virt与io_remap

整个的一个外设映射关系以及phys_to_virt与io_remap的区别

首先一定要有DDR和IO外设是同级设备的观念,其实他们只是地址总线上的不同区段的地址而已
首先我们会传入ddr的实际大小(通过内核参数mem=xx),此时会将整个DDR映射到内核的线性映射区中,在set_up的时候我们将这个线性映射区一分为2,
一部分用于内核自己用,用于支持正常内核运行所需要的内存空间,以及各种malloc(除过vmalloc),另一部分设置为resever区,以保证内核不会去操作这段内存。
此时DDR已经占用了一些kernel space。
对于外设,我们继续映射(使用静态或者动态)到kernel space的动态映射区
对于reserve出来的内存如何使用呢,两个方法:
1.由于他被映射到了内核的静态映射区,所以是一个固定的映射,可以使用phys_to_virt得到内存的虚拟地址(因为是一一映射,且之前整个DDR的与内核的静态映射区之间的映射关系已经建 立起来了),然后直接操纵这片地址就可以,这种方式适用于大片内存的操作;
2.使用ioremap把这一片reseve出来的内存当作IO外设动态映射过来

其实,不管是phys_to_virt还是使用IO_ADDRESS去操作虚拟地址,目的都是计算出虚拟地址,他们只是工具。我们应该看到的是哪段物理地址被映射到虚拟地址的哪个空间,与他是DDR还是其他外设没有关系。只要建立起映射关系,我们便能访问他们。
在使用计算出的虚拟地址时,首先要保证已经建立器物理地址和虚拟地址的一个映射关系

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值