IMX6ULL驱动学习--MISC驱动

    技术2022-07-11  81

    MISC杂项驱动

    MISC驱动MISC简介程序结构注册`miscdevice`设备 程序测试

    MISC驱动

    MISC简介

    MISC驱动,又称杂项驱动。通常嵌套在platform总线驱动中。所有的MISC设备驱动的主设备号都是10,从设备号不同,解决了设备号紧张的情况。

    程序结构

    注册miscdevice设备

    注册miscdevice设备

    定义miscdevice设备 向内核注册miscdevice设备时,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 struct attribute_group **groups; const char *nodename; umode_t mode; };

    我们主要设置name,minor,fops属性,minor在include/linux/miscdevice.h有定义,我们可以选择已有定义,也可以自定义。name是设备名字,注册成功后会在/dev目录下生成相应设备文件,fops是操作函数集合,由用户提供。

    注册miscdevice设备 注册miscdevice设备调用函数如下: int misc_register(struct miscdevice * misc) @misc : 要注册的设备 @return : 负数 失败,0 成功。

    此函数作用相当于如下函数集合:

    alloc_chrdev_region(); /* 申请设备号 */ cdev_init(); /* 初始化 cdev */ cdev_add(); /* 添加 cdev */ class_create(); /* 创建类 */ device_create(); /* 创建设备 */ 注销miscdevice设备 注销函数如下: int misc_deregistermisc_deregister(struct miscdevice *misc); @misc : 要注销的设备 @return : 负数 失败,0 成功。

    此函数作用相当于如下函数集合:

    cdev_del(); /* 删除 cdev */ unregister_chrdev_region(); /* 注销设备号 */ device_destroy(); /* 删除设备 */ class_destroy(); /* 删除类 */

    程序测试

    Processed: 0.011, SQL: 12