全部博文(168)
分类: LINUX
2008-03-30 21:46:59
目前,kenrel maillist在讨论一个user space driver的patch .这个patch的目的是减少写驱动程序时候的内核代码,在用户态实现驱动的功能代码。但是,该机制并没有使驱动程序的内核代码完全消息。一个驱动程序还是需要在内核注册一个小的module来进行,pci注册, irq handler注册。
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: 驱动版本
irq 中断号
irq_flags 中断一些标志信息
open , release分别为文件的对应操作函数
handler 为终端操作函数
以上结构是一个驱动程序的信息, 使用者需要使用如下函数注册/注销。(如果是pci设备,还需要自行注册pci设备).
int uio_register_device(struct device *parent, struct uio_info *info);
void uio_unregister_device(struct uio_info *info);
目前这个patch还处于讨论阶段,并且这种设备只是一个字符设备,还不能作为块设备,网络设备的驱动程序。但是Andrew Morton提到把驱动程序放到用户态这个方法对gpl来说并不是一个非常好的办法,应该鼓励内核的开源代码,而不是用户态的闭源代码。目前,该方案还处于讨论中。