linux驱动程序通信,Linux设备驱动程序学习--与硬件通信

7ad68a85e38321d258f625da0abeb932.png

654b5f60f03b58fe68b54e21c5a50323.png

Linux设备驱动程序学习--与硬件通信

平台相关性

由于自身的特性,I/O指令与处理器密切相关的,非常难以隐藏系统间

的不同。所以大部分的关于端口I/O的源码是平台依赖的。以下是x86

和ARM所使用函数的总结:

IA-32(x86)

x86_64

这个体系支持所有的以上描述的函数,端口号是unsigned short类型。

ARM

端口映射到内存,支持所有函数。串操作用C语言实现。端口是unsigned int类型。

使用I/O内存

除了x86上普遍使用的I/O端口外,和设备通讯另一种主要机制是通过

使用映射到内存的寄存器或设备内存,统称为I/O内存。因为寄存器

和内存之间的区别对软件是透明的。I/O内存仅仅是类似RAM的一个

区域,处理器通过总线访问这个区域,以实现设备的访问。

根据平台和总线的不同,I/O内存可以就是否通过页表访问分类。若通

过页表访问,内核必须首先安排物理地址使其对设备驱动程序可见,在

进行任何I/O之前必须调用ioremap。若不通过页表,I/O内存区域就

类似I/O端口,可以使用适当形式的函数访问它们。因为“side effect”

的影响,不管是否需要ioremap,都不鼓励直接使用I/O内存的指针。

而使用专用的I/O内存操作函数,不仅在所有平台上是安全,而且对

直接使用指针操作I/O内存的情况进行了优化。

I/O内存分配和映射

I/O内存区域使用前必须先分配,函数接口在定义:

struct resource*request_mem_region(unsigned long start,unsigned long len,char*name);/*从start开始,分配一个len字节的内存区域。成功返

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值