天天看點

【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);

繼續閱讀