字符驱动设备3(虚拟地址映射)

内核中有两套虚拟地址映射方法:动态和静态
静态映射:内核移植时以代码的形式硬编码,如果需要改变需要更改源代码后重新编译内核,内核启动时建立静态映射表, 内 核关机时销毁,中间一直有效。
动态映射:驱动程序根据需要随时动态建立映射,使用、销毁映射,映射的短期的
动态映射和静态映射是可以同时使用的。
静态映射好处是效率高,坏处是始终占用虚拟地址空间;
动态映射好处是按需使用地址空间,坏处是需要用代码建立映射和销毁映射。

关于静态映射
1、不同版本内核的静态映射表位置和名字可能不同
2、不同soc的静态映射表和名字也可能不同
3、所有静态映射表其实就是头文件中的宏定义
三星版本的linux内核为例:
虚拟地址基地址定义在:arch/arm/plat-samsung/include/plat/map-base.h
#define S3C_ADDR_BASE (0xFD000000) // 三星移植时确定的静态映射表的基地址,表中的所有虚拟地址都是以这个地址+偏移量来指定的
一般在palt*文件夹中的map***.h中,静态地址是根据基地址和偏移地址计算出来。

如何建立动态映射
(1)request_mem_region,向内核申请(报告)需要映射的内存资源。
(2)ioremap,真正用来实现映射,传给他物理地址他给你映射返回一个虚拟地址
如何销毁动态映射
(1)iounmap
(2)release_mem_region
注意:映射建立时,是要先申请再映射;然后使用;使用完要解除映射时要先解除映射再释放申请。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值