1.创建设备类
字符类设备设备节点的生成和杂项设备节点生成相类似,不过相比较杂项设备设备,字符设备需要额外添加一个设备类。
linux创建设备类需要通过class类进行创建。linux中的class是设备类,是一个抽象的概念,并没有对应的实体。它提供给用户接口相似的一类设备集合。常见的有输入子系统input、usb、串口tty、块设备block等。在linux根目录中,使用命令”vim include/linux/device.h”:
#define class_create(owner, name)
({
static struct lock_class_key __key;
__class_create(owner, name, &__key);
})
参数owner:一般是THIS_MODULE;参数name:设备名称;调用函数class_creat会返回一个class结构体变量。
在linux根目录中,使用命令”vim include/linux/device.h”:
struct class {
const char *name;
struct module *owner;
struct class_attribute *class_attrs;
struct device_attribute *dev_attrs;
struct bin_attribute *dev_bin_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 subsys_private *p;
};
对于代码中的参数可以不用去管,只需要定义一个class变量,然后在创建设备节点的时候作为一个参数赋值使用即可。与class_creat相对应的函数class_destroy,就只有一个参数class。这个函数也是在头文件”include/linux/device.h”
### 2.创建字符设备节点
创建设备节点需要函数device_create在头文件”include/linux/device.h”,使用命令”vim include/linux/device.h”,查找device_create函数:
extern struct device *device_create(struct class *cls,struct device *parent,dev_t devt,void *drvdata,const char *fmt....);
extern struct device_detroy();
参数struct class *cls:设备所属的类,前面创建类的返回值;参数struct device *parent:设备的父设备,NULL;参数dev_t devt:设备号;参数void *drvdata :设备数据,NULL;参数const char *fmt:设备名称。与device_create对应的函数device_destory();只有两个参数,分别是设备类和设备号。