linux驱动中的io内存

本文介绍了Linux驱动中关于IO内存的概念,包括IO映射和内存映射两种方式。在有MMU的系统中,如x86和ARM9以上CPU,驱动必须将物理地址转换为虚拟地址来访问IO内存。在驱动开发中,需要通过动态映射将已知的物理地址映射到虚拟地址空间,以便进行操作。文章还提到了驱动安装和卸载时的内存管理过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、什么是IO内存
一般我们的外设都是通过读写设备上的寄存器来进行的,通常包括控制寄存器、状态寄存器、数据寄存器三大类。外设的寄存器通常被连续编址,并且根据CPU的体系架构不同CPU对I0端口的编制方式有两种:
。IO映射方式(IO-mapped):比较典型的有X86处理器为外设专门实现了一个单独的地址空间,称为“I0端口空间”或者“IO地址空间”,此时CPU可以通过专门的指令(比如X86的IN和OUT) 来访问这个“IO端口空间”
。内存映射方式 (memory-mapped): RISC指令系统的CPU一般只实现一个物理地址空间,外设10端口成为内存的一部分。此时CPU可以访问外设的10端口,就像访问自己的内存一样方便,不必再设置专门的指今来访问。在驱动开发过程中一般使用内存映射方式。
外设的SFR(特殊功能寄存器) 编址与内存的编址是同一个地址空间,叫做I0内存。这个I0关键字,其实就是配置寄存器。

原因:
Linux 内核运行后,开启了 MMU(内存管理单元),所以不能直接访问 CPU 的物理地址,也就是说,不能直接使用物理地址访问系统的 IO 内存。必须将物理地址转换为虚拟地址,内核通过虚拟地址来访问系统的 IO 内存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

hqb_newfarmer

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

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

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

打赏作者

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

抵扣说明:

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

余额充值