整个的一个外设映射关系以及phys_to_virt与io_remap
2018-02-18 21:48
831 查看
整个的一个外设映射关系以及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还是其他外设没有关系。只要建立起映射关系,我们便能访问他们。
在使用计算出的虚拟地址时,首先要保证已经建立器物理地址和虚拟地址的一个映射关系
首先一定要有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还是其他外设没有关系。只要建立起映射关系,我们便能访问他们。
在使用计算出的虚拟地址时,首先要保证已经建立器物理地址和虚拟地址的一个映射关系
相关文章推荐
- phys_to_virt(),ioreamp(),IO_ADDRESS() 的区别
- phys_to_virt(),ioreamp(),IO_ADDRESS() 的区别
- Linux驱动修炼之道-内存映射 mmap()/phys_to_virt()
- phys_to_virt(),ioreamp(),IO_ADDRESS() 的区别
- phys_to_virt(),ioreamp(),IO_ADDRESS() 的区别
- Linux驱动修炼之道-内存映射 mmap()/phys_to_virt()
- 关于如何自定义一个 文本输入框(UITextView) 的思想以及整个操作流程
- NHibernate学习笔记(二):one-to-one关系映射
- EF里的继承映射关系TPH、TPT和TPC的讲解以及一些具体的例子
- Hibernate12_映射关系---manyTomany
- JPA关系映射系列五:many-to-many 关联表存在额外字段关系映射
- Spring boot data JPA数据库映射关系 : @OneToOne,@OneToMany,@ManyToMany
- J2EE系列之Hibernate4学习笔记(十一)--Hibernate继承关系映射(根类对应一个表)
- 驱动——ioremap和phys_to_virt
- mybatis对象之间映射关系以及数据库表建立的时候外键的添加
- Mybatis 一对多(OneToOne)关系映射
- 物理地址,虚拟地址,总线地址,i/o地址空间,内存地址空间,以及他们的映射关系
- Hibernate one-to-many / many-to-one关系映射
- 细说一个汉字等于几个字符,以及汉字,字符,字节,位之间的关系
- linux驱动学习(七) ioctl中的cmd和_IO() , _IOR() , IOW() ,_IOWR() 以及_IOC_NR()的关系