简介
内核中定义了struct class结构体,一个struct class 结构体类型变量对应一个类,内核同时提供了几个函数。
class_create():创建一个类,这个类存放于/sys/class/下面,先创建这个类,再调用device_create();
device_create():在/dev目录下创建相应的设备节点(在/proc/devices/下也可以看到)。
注意:真正创建设备节点的函数是device_add,device_register也调用到了device_add。
创建设备节点函数
一般创建设备节点会用这三个函数:device_create、device_register、device_add。
设置节点名函数
在创建节点以前,一般用dev_set_name函数设置节点名,例如:
struct device dev;
dev_set_name(&dev, "mtd%d", mtd_num)
device_create调用过程
(linux-4.9.37):(不同版本内核略有不同)device_create
device_create_vargs //对device类中的变量赋值,devt name release等初始化这个结构体中的变量
device_create_groups_vargs
device_add
//创建/dev/目录下的设备节点
device_create_file(dev, &dev_attr_uevent)
device_add_class_symlinks(dev)
device_add_attrs(dev)
bus_add_device(dev)
device_pm_add(dev)
//创建/sys/class/...目录下的属性文件
device_create_file(dev, &dev_attr_dev)
device_create_sys_dev_entry(dev)
kobject_uevent(&dev->kobj, KOBJ_ADD);
bus_probe_device(dev);
device_register调用过程
(linux-4.9.37):(不同版本内核略有不同)
device_register(struct device *dev)
device_initialize(dev);
return device_add(dev);