天天看点

【linux驱动分析】misc设备驱动

    misc设备驱动。又称混杂设备驱动。

misc设备驱动共享一个设备驱动号MISC_MAJOR。它在include\linux\major.h中定义:

        #define MISC_MAJOR 10

miscdevice的结构体例如以下,它在include\linux\miscdevice.h中定义:

struct  miscdevice {

 int  minor;

 const  char  *name;

 const  struct file_operations  *fops;

 struct  list_head  list;

 struct  device  *parent;

 struct  device  *this_device;

 const  char  *nodename;

 mode_t  mode;

};

misc设备驱动的注冊和注销时用这两个函数,他们也定义在include\linux\miscdevice.h中:

extern int misc_register(struct miscdevice * misc);

extern int misc_deregister(struct miscdevice *misc);

样例:

再分配此设备号时,能够设为MISC_DYNAMIC_MINOR。这样会自己主动分配此设备号,如:

static struct miscdevice misc = {

 .minor = MISC_DYNAMIC_MINOR,

 .name = DEVICE_NAME,

 .fops = &dev_fops,

以下的是file_operations结构体:

static struct file_operations dev_fops = {

 .owner = THIS_MODULE,

 .unlocked_ioctl = sbc2440_leds_ioctl,

注冊和注销函数:

static int __init dev_init(void)

{

 int ret;

 …………

 ret = misc_register(&misc);

 printk (DEVICE_NAME"\tinitialized\n");

 return ret;

}

static void __exit dev_exit(void)

 misc_deregister(&misc);

继续阅读