函数cdev_add()用于向Linux内核系统中添加一个新的cdev结构体变量所描述的字符设备,并且使这个设备立即可用。
cdev_add文件包含
#include <linux/cdev.h>
cdev_add函数定义
在内核源码中的位置:linux-3.19.3/fs/char_dev.c
函数定义格式:
int cdev_add(struct cdev *, dev_t, unsigned)
cdev_add输入参数说明
- 函数
cdev_add()
有三个输入参数,第一个输入参数代表即将被添加入Linux内核系统的字符设备,此结构体在极客笔记函数cdev_alloc()分析文档的返回参数说明部分有详细解释; - 第二个输入参数是
dev_t
类型的变量,此变量代表设备的设备号,其中包括主设备号和次设备号,其内核定义如下:
typedef __kernel_dev_t dev_t;
其中__kernel_dev_t的定义如下:
typedef __u32 __kernel_dev_t;
由此,可知dev_t其实是一个无符号的32位整数,其中32为的前12位代表主设备号,后20位代表此设备号。
- 第三个输入参数是无符号的整型变量,代表想注册设备的设备号的范围,用于给struct cdev中的字段count赋值。
cdev_add返回参数说明
- 函数
cdev_add()
返回int型的结果,表示设备是否添加成功。如果成功,则返回0,如果失败,则返回- ENOMEM, ENOMEM的被定义为12。
cdev_add实例解析
函数cdev_add()
必须与函数cdev_del()
配对使用,才能保证测试程序不会出问题,函数cdev_add()的测试程序及结果分析请参考极客笔记函数cdev_del()的分析文档。