作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在 register_chrdev 函数中,我们必须提供设备名称。即使我们创建了一个具有相同主编号的另一个名称的设备,它也能正常工作。那么在该函数中命名的意义是什么。
我是初学者:)
最佳答案
根据 register_chrdev 的手册页:
The name parameter is a short name for the device
and is displayed in the The /proc/devices list. It also
must exactly match the name passed to unregister_chrdev
function when releasing the functions.
因此,内核根本没有真正使用该名称,只是作为您稍后识别注册的一种方式,以便您可以撤消它,并在/proc 设备列表中调用驱动程序。
之所以有两个名称不同但主要工作相同的独立 register_chrdev,是因为现代 Linux 内核允许多个驱动程序注册相同的主要编号,并基本上共享它。大概两个司机都会接到那个专业的所有电话,并且必须根据次要号码决定是否采取行动。我不太确定这一点,因为我曾经使用过的所有驱动程序和大多数驱动程序都遵循“每个主编号一个驱动程序”的习惯用法
最后一件事,与其硬编码一个主编号,不如将零传递给 register_chrdev 并让内核为您选择一个免费的主编号并将其返回给您。这样您就不必担心踩到其他驱动程序的脚趾,但您需要让您的用户空间代码检查/proc/devices 以便正确 mknod/dev 条目。
关于linux - LKMG chardev.c 关于register_chrdev 函数的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4462515/
我正在修改驱动程序并在 LDD3 中遇到了 cdev 接口(interface)。看完http://lwn.net/Articles/195805/我更困惑而不是开悟。从那里的评论 In order
我是一名优秀的程序员,十分优秀!