linux驱动:(7)物理地址到虚拟地址映射

单片机、裸机、linux操控硬件方法

在单片机和裸机中操作硬件是通过指针来对寄存器赋值来进行操控 

但对于linux中不能这样,不能直接对物理地址直接修改,因为linux使能了mmu,所以不能直接菜操作物理地址

如果要操作硬件,需要先把物理地址转换成虚拟地址

使能mmu的好处

  • 让虚拟地址成了可能
  • 可以让系统更加安全,上层应用看到的都是虚拟内存,不能直接访问硬件

物理地址到虚拟地址映射函数

内核提供了几个函数,定义在源码根目录中的include/asm-generic/io.h

ioremap:物理地址转为虚拟地址

iounmap:把映射的地址释放掉

static inline void _iomem *ioremap(phys_addr_t offset,size_t size)
static inline void _iomem *ioremap(void _iomem *addr)

参数

  • phys_addr_t offset:是映射物理地址的起始位置
  • size_t size:要映射多大的内存空间
  • void _iomem *addr:要取消映射的虚拟地址的首地址

返回值

  • ioremap:成功返回虚拟地址的首地址,失败返回null

注意

  • 物理地址只能被映射一次,多次映射会失败

查看被映射过的物理地址

输入命令:cat /proc/iomem

如果要取消某个映射就需要找到对应的驱动取消

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值