操作系统或者内核如何与IO设备进行通信?
内核与IO设备的通信,实际上说的就是驱动与设备的通信,要实现通信,首先内核必须能够找到IO设备,这就有一个寻址的问题,一直存在2种说法:一种是独立寻址和统一寻址,对应到linux内核,就是IO内存和IO端口了。
内核IO资源管理要解决什么问题?
为了解决IO资源分配的冲突,实际上IO资源的管理上也采用了树形结构来管理,如:设备的IO资源的分配由总线来分配,设备中具体的输入和输出的资源分配,则由设备来分配,这样先分配一大块,然后再去细分,有层次的分。
IO资源管理与总线设备驱动模型的关系
一般驱动的probe中需要完成IO资源的申请,也就是调用request_resource,因为这个资源的分配与硬件相关,此时硬件相关的信息只有在已经存在的情况下,才能分配。
在设备驱动中这个request_resource调用并不是必须的唯一操作,有的情况下,还需要将扩展设备的地址空间映射到内核地址空间,内核才能访问设备,也就是通过ioremap来修改系统的页表来实现。
IO资源分为resource和ioport_resource(对应2种寻址方式),如何查看和了解呢?
可以在/proc/iomem和/proc/ioports来查看
阅读(1194) | 评论(0) | 转发(0) |