杂项设备

一、杂项设备
先看杂项设备结构定义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;
        umode_t mode;
};
注册杂项设备使用misc_register函数,原型如下:
int misc_register(struct miscdevice * misc);
注销杂项设备使用misc_deregister函数,原型如下:
int misc_deregister(struct miscdevice *misc);

二、实例
static struct file_operations dev_fops = {
        .owner = THIS_MODULE,
        .ioctl = sbc2440_leds_ioctl,
};

static struct miscdevice misc = {
        .minor = MISC_DYNAMIC_MINOR,
        .name = DEVICE_NAME,
        .fops = &dev_fops,
};
        
static int __init dev_init(void)
{       
        ...
        
        ret = misc_register(&misc);

        ...
}
        
static void __exit dev_exit(void)
{       
        misc_deregister(&misc);
}  
以上来自mini2440 led驱动中的一个例子。

三、原理
在杂项设备的misc_init函数中,创建了一个misc class,同时注册了一个字符设备驱动,该字符设备的主设备号为10,在调用misc_register函数去注册一个杂项设备时,最终会创建一个设备节点,如果杂项设备的minor为MISC_DYNAMIC_MINOR,表示由系统分配一个次设备号。所以杂项设备最终还是主设备号为10的一个字符设备驱动。

你可能感兴趣的:(杂项设备)