Linux内核API register_chrdev

函数register_chrdev()调用函数__register_chrdev()实现其功能,函数__register_chrdev()首先调用函数__register_chrdev_region()创建一个字符设备区,此设备区的主设备号相同,由函数register_chrdev()的第一个参数决定,次设备号的变化范围是0~256,设备区的名字为函数register_chrdev()的第二个参数,此函数将更改/proc/devices文件的内容;然后动态申请一个新的字符设备cdev结构体变量,对其部分字段进行初始化,初始化完成之后将其加入Linux内核系统中,即向Linux内核系统添加一个新的字符设备。函数register_chrdev()调用函数cdev_alloc()动态申请一个字符设备,调用函数cdev_add()将其加入Linux内核系统中。

register_chrdev文件包含

#include <linux/fs.h>

register_chrdev函数定义

在内核源码中的位置:linux-3.19.3/include/linux/fs.h

函数定义格式:

static inline int register_chrdev(unsigned int major, const char *name,
                                    const struct file_operations *fops)
{
    return __register_chrdev(major, 0, 256, name, fops);
}

register_chrdev输入参数说明

  • 函数register_chrdev()有三个输入参数,第一个输入参数是unsigned int型的变量,代表动态申请字符设备的主设备号,对于此设备号函数自动赋值为0。
  • 第二个输入参数是char型的指针,代表申请设备的设备名。
  • 第三个输入参数是struct file_operations结构体类型的指针,代表申请设备的操作函数,通过此结构体包含的函数完成对设备的访问及控制操作,此结构体在函数cdev_init()的说明文档中已详细说明,详细信息请参考极客笔记函数cdev_init()说明文档的输入参数说明部分。

register_chrdev返回参数说明

  • 函数register_chrdev()返回int型的结果,表示设备添加是否成功。如果成功返回0,如果失败返回-ENOMEM, ENOMEM的定义值为12。

register_chrdev实例解析

函数register_chrdev()需要和函数unregister_chrdev()配对使用,不能单独进行测试,所以在此没有单独测试,实例解析及结果分析请读者参考极客笔记函数unregister_chrdev()的分析文档。

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

评论 抢沙发

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

赞助商