UIO(linux Userspace I/O子系统)用户空间设备驱动I/O技术介绍(由搜集整理)
UIO(Userspace I/O)是运行在用户空间的I/O技术。Linux系统中一般的驱动设备都是运行在内核空间,而在用户空间用应用程序调用即可,而UIO则是将驱动的很少一部分运行在内核空间,而在用户空间实现驱动的绝大多数功能!使用UIO可以避免设备的驱动程序需要随着内核的更新而更新的问题.通过UIO的运行原理图可以看出,用户空间下的驱动程序比运行在内核空间的驱动要多得多,UIO框架下运行在内核空间的驱动程序所做的工作很简单,常做的只有两个:分配和记录设备需要的资源和注册uio设备和必须在内核空间实现的小部分中断应答函数,经过实践表明后面的工作也是可以省略的!我们认为uio内核空间的程序所做的越少越好,在用户空间能完成的我们就不需要放在内核空间做(比如说响应中断),这样假如内核有变化,uio框架中的驱动维护也是比较简单。
Linux UIO 驱动模型(图)
uio驱动的内核部分,用户空间部分,和uio 框架以及内核内部函数的关系图
uio驱动重要的数据结构:
UIO的内核部分和用户空间的工作
内核空间
UIO的少量运行在内核空间的驱动所做的工作有哪些呢?
(1)分配和记录设备需要的资源和注册uio设备
在设备的探测函数中:
- 使能PCI 设备
- 申请资源
- 读取并记录配置信息
- 注册uio设备// uio_register_device()
// uio_8139d_pci_probe & uio_8139d_handler
(2)必须*在内核空间实现的小部分中断应答函数
用户空间的关键操作
1关键操作
2.响应硬件中断