Linux驱动中物理地址、虚拟地址的转换

物理地址、虚拟地址的转换

 

1、在单片机和逻辑中,我们操作硬件是可以直接

比如:

unsigned int *p = 0x12345678;

*p = 0x87654321;

但是在Linux上不行,是不能对物理地址直接进行操作的。(因为使能了MMU)

可我们还是避免不了操作硬件。那么在Linux上如果想要操作硬件,需要先把物理地址

转换成虚拟地址。

 

2、使能了MMU以后有什么好处呢?

(1)让虚拟地址成了可能

(2)可以让系统更加安全,因为有了MMU,我们上层应用看到的内存都是虚拟内存,我们应用不能直接访问硬件,所以这样我们就保证了系统安全。

 

3、MMU非常复杂,那么我们如何完成物理地址到虚拟地址的转换

 

内核给我们提供了相关的函数

ioremap,iounmap

 

ioremap:把物理地址转换成虚拟地址,

iounmap:释放掉ioremap映射的地址。

 

定义:在#include的asm-generic里

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

参数:

phys_addr_t iffset: 映射物理地址的起始地址

size_t size : 要映射多大的内存空间。

返回值:

成功:返回虚拟地址的首地址

失败:返回NULL

 

注意:物理地址只能被映射一次!!!多次映射就会失败。

 

 

4、如何查看哪些物理地址被映射过了呢?

可以通过命令行来查看,连接开发板。

使用命令

cat /proc/iomem 

来查看!

 

 

 

 

 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值