当前位置: 代码迷 >> 综合 >> linux驱动开发扩展--自动创建设备文件
  详细解决方案

linux驱动开发扩展--自动创建设备文件

热度:36   发布时间:2024-03-07 11:12:20.0

要使用struct class、class_create(…) 以及device_create(…)需要包含/include/linux/device.h头文件。

class_create

(1)创建一个类,会在/sys/class目录下生成相应的文件夹

(2)第一个参数指定类的所有者是哪个模块,第二个参数指定类名。

(3)class_destroy(…)函数,用于在模块卸载时删除类。

(4)函数分析

class_create
    __class_create
        __class_register
            kset_register
                kobject_uevent
            add_class_attrs
                class_create_file
                    sysfs_create_file

device_creat(struct class *class, struct device *parent,dev_t devt, void *drvdata, const char *fmt, ...)

(1)用户空间中的udev会自动响应device_create(…)函数,去/sysfs下寻找对应的类从而创建设备节点。 在/dev目录下创建相应的设备节点

(2)第一个参数指定所要创建的设备所从属的类,第二个参数是这个设备的父设备,如果没有就指定为NULL,第三个参数是设备号,第四个参数是为回调而添加到设备的数据,如果没有就指定为NULL,第五个参数是设备名称。

(4)device_destroy函数用于删除设备节点

(3)函数分析

device_create
    device_create_vargs
        kobject_set_name_vargs
        device_register
            device_add
                kobject_add
                device_create_file
                device_create_sys_dev_entry
                devtmpfs_create_node
                device_add_class_symlinks
                device_add_attrs
                device_pm_add
                kobject_uevent

include/linux/device.h

struct class {const char		*name;struct module		*owner;struct class_attribute		*class_attrs;struct device_attribute		*dev_attrs;struct kobject			*dev_kobj;int (*dev_uevent)(struct device *dev, struct kobj_uevent_env *env);char *(*devnode)(struct device *dev, mode_t *mode);void (*class_release)(struct class *class);void (*dev_release)(struct device *dev);int (*suspend)(struct device *dev, pm_message_t state);int (*resume)(struct device *dev);const struct kobj_ns_type_operations *ns_type;const void *(*namespace)(struct device *dev);const struct dev_pm_ops *pm;struct class_private *p;
};

一个struct class结构体类型变量对应一个类。

自动创建设备文件并使用内核提供的寄存器读写接口例程