Linux教程

[Linux 驱动] --register_chrdev() 、 class_create()、device_create()、三个函数的说明 (自动创建设备节点)

本文主要是介绍[Linux 驱动] --register_chrdev() 、 class_create()、device_create()、三个函数的说明 (自动创建设备节点),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

register_chrdev(MEM_MAJOR,"char0",&fops) 向内核注册了一个字符设备(不只是注册了设备号,还做了 cdev 的初始化以及 cdev 的注册)。第一个参数为主设备号,0代表动态分配,这里的 MEM_MAJOR 为1;第二个参数是设备的名字;第三个参数为文件操作指针,完成注册后,在 /proc/devices 中第一个字符设备我们就看到了 :/char0。

static const struct file_operations fops = {
        .read = il3945_sta_dbgfs_stats_table_read,
        .open = simple_open,
        .llseek = default_llseek,
};

 

自动创建节点
在驱动中加入对 udev 的支持(自动创建设备节点)的主要做法是:在驱动初始化的代码里调用 class_create() 为该设备创建一个 class,再为每个设备调用 device_create() 创建对应的设备。

内核中定义的 struct class 结构体,顾名思义,一个 struct class 结构体类型的变量对应一个类,内核同时提供了 class_create() 函数,可以用它来创建一个类(class),这个类(class)存放在 sysfs 下面,一旦创建好了这个类,再调用 device_create() 函数来在 /dev 目录下创建相应的设备节点。

这样,加载模块的时候,用户空间中的 udev 会自动响应 device_create() 函数,去 /sysfs 下寻找对应的类,从而创建设备节点。


————————————————
版权声明:本文为CSDN博主「BestW2Y」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u014674293/article/details/101377823/

这篇关于[Linux 驱动] --register_chrdev() 、 class_create()、device_create()、三个函数的说明 (自动创建设备节点)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!