宏class_register()在实现时,调用了函数__class_register(),作用和函数__class_register()基本相同,对传入的参数代表的设备类进行部分字段的设置,包括设备类的属性、引用计数器等,然后将此设备类添加进Linux内核系统中。设备类对应设备的设备文件,但函数__class_register()不会在目录/dev
下生成设备文件,需要将设备类传给逻辑设备,将逻辑设备注册进内核才会形成设备文件。
class_register文件包含
#include <linux/device.h>
class_register宏定义
在内核源码中的位置:linux-3.19.3/include/linux/device.h
宏定义格式:
#define class_register(class) \
({ \
static struct lock_class_key __key; \
__class_register(class, &__key); \
})
class_register输入参数说明
- 宏
class_register()
的输入参数代表即将被加入Linux内核系统的设备类,是struct class类型的指针变量,具体解释请参考极客笔记函数__class_create()的说明文档中的输入参数说明部分。
class_register返回参数说明
- 宏
class_register
的返回结果是int型的变量,表示设备类是否注册成功。可能的返回结果是0、-ENOMEM,其中返回0代表成功,返回-ENOMEM代表失败,ENOMEM的值为12。
class_register实例解析
此宏需要和函数class_unregister()配对使用,所以在此没有进行单独测试,函数的测试及结果分析请读者参考极客笔记函数class_unregister()的分析文档。