Linux内核API cdev_add

函数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()的分析文档。

赞(0)
未经允许不得转载:极客笔记 » Linux内核API cdev_add
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址