快速业务通道

UIO-用户空间驱动的新发展

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-05-13
尚观科技原创文章 并非所有的设备驱动程序都要在内核编写,有些情况下,在用户空间编写驱动程序能够更好地解决遇到的问题.是否应鼓励人们开发用户态的驱动一直是一个有争议的话题,反对者认为,用户态驱动常常是不开放源代码的,这和linux的开源精神背道而驰,另外,用户态驱动的性能也常常受到质疑;而支持者认为,在内核中引入对用户态驱动的支持是现实的需要,这种方式能更好地应对复杂的或者是比较特殊的硬件,尤其是在嵌入式领域中,更值得推广. 本文无意于讨论这两种观点孰优孰劣,只是帮助大家了解一下这种驱动编写方式的优点和缺点,然后再来看看linux最新版内核中如何支持这一概念. 用户空间驱动程序的优点:
*可以和整个C库链接
驱动程序不用借助外部程序(对于复杂的外设,常常需要和驱动一起发行用户提供策略的应用程序)就可以完成许多非常规的任务.
*在驱动中可以使用浮点数
在某些特殊的硬件中,可能需要使用浮点数,而linux内核并不提供浮点数的支持.如果能在用户态实现驱动,就可以轻松解决这一问题
*驱动的问题不会导致整个系统挂起
有过驱动开发经验的人一定会对调试深有感触,一些错误常常导致整个系统挂起.而用户态的驱动在调试上就要方便很多.
*用户内存可以换出
*设计良好的驱动仍然可以支持对设备的并发访问
*可以给出封闭源码的驱动程序,不必采用GPL
*更为灵活
用户空间驱动的最常见例子是X-server,很多USB设备的驱动也可以放到用户空间.目前,很多人尝试在用户态为PCI设备提供驱动
用户空间驱动的缺点:
*中断在用户空间不可用
Empire CMS,phome.net

最新的UIO接口已经解决了这一问题
*响应时间较慢
*只能支持字符设备,无法支持块设备和网络设备
*可靠性较低,很多驱动都是闭源的,我们没法通过阅读代码解决问题
*有些硬件厂商只提供和某些linux开发版(常常早就过时了)相匹配的用户空间驱动 尽管对用户空间驱动存在争议,但内核还是选择对其进行支持.最新的接口称为UIO(以前的内核也有,但新版本做了很多修改),是在2.6.22版本的一个补丁中出现的,并且在2.6.23中正式合并到了内核的代码树中.和以前相比,该接口有了一些改变. 和以前的版本一样,UIO并没有完全取消内核空间代码.在内核中有一个很小的模块用于建立连接到PCI总线的设备(device)或者接口(interface),并提供中断处理程序.这一点(中断处理程序)很重要,尽管有更多的事情可以在用户空间完成,但还是需要有一个内核中的中断处理程序来通知设备停止发送中断. 该内核模块需要包括<linux/uio_driver.h>.如果他是一个PCI设备的驱动,需要按照统一设备模型的要求注册PCI驱动.当需要连接设备的时候(可能在PCI的probe()函数中),该驱动需要填写一个uio_info结构体: struct uio_info {
char *name;
char *version;
struct uio_mem mem[MAX_UIO_MAPS];
long irq;
unsigned long irq_flags;
void *priv;
irqreturn_t (*handler)(int irq, struct uio_info *dev_info);
int (*mmap)(struct uio_info *info, struct vm_area_struct *vma);
int (*open)(struct uio_info *info, struct inode *inode);
int (*release)(struct uio_info *info, struct inode *inode);
/* Internal stuff omitted */
};
上面结构体中,name是设备的名字;version是驱动的版本号(将显示在sysfs中);irp是设备所使用的IRQ号;irq_flags是中断调用标志,将传递给request_irq();handler()是中断处理程序,除了负责应答硬件中断,一般不再做别的工作;mmap()/open()/release()由file_operations中的对应成员调用
Empire CMS,phome.net
结构体中的mem数组用于描述任何可以被映射到用户空间的内存区域.uio_mem结构体的主要成员如下:
struct uio_mem {
unsigned long addr;
unsigned long size;
int

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号