函数device_register()在实现过程中调用了函数device_initialize()和函数device_add(),而函数device_initialize()完成对新创建的逻辑设备对象部分字段的初始化工作,主要包括设备引用计数器、信号量、设备访问锁等字段的初始化工作,函数device_add()首先对逻辑设备对象部分字段进行初始化,然后将此逻辑设备加到Linux内核系统的设备驱动程序模型中。函数device_add()能够自动地在/sys/devices/virtual
目录下创建新的逻辑设备目录,在/dev
目录下创建与逻辑类对应的设备文件。所以函数device_register()的作用就是二者的结合。
device_register文件包含
#include <linux/device.h>
device_register函数定义
在内核源码中的位置:linux-3.19.3/drivers/base/core.c
函数定义格式:
int __must_check device_register(struct device *dev)
device_register输入参数说明
- 函数device_register()的输入参数是
struct device
结构体类型的指针,代表函数即将被操作的逻辑设备,此结构体的定义在极客笔记函数device_create()的分析中已详细说明。
device_register返回参数说明
- 函数
device_register()
的返回结果是int类型的变量,可能的取值为-ENOMEM、0,其中ENOMEM的值为12。
device_register实例解析
函数device_register()必须和函数device_unregister()配对使用,所以此函数的实例解析请读者参考极客笔记函数device_unregister()的分析文档。