内核如何理解,哪个驱动模块函数处理read/write/etc?
How does kernel understand, which driver module function handles read/write/etc?
我找到了一个 couple of articles,其中展示了如何制作您自己的 hello-world 驱动程序。
我认为函数名称应该是硬编码的(例如,当您从设备读取时,您使用 read
函数等)。
但是在描述我 cat
设备时应该发生什么时,到处都使用函数名称,如 hello_read
(first article) or device_file_read
(second article)。
kernel是怎么理解的,他应该用什么函数?
您问题的答案是 struct file_operations
。您会发现它在两个示例中都有定义。此结构描述了在对文件执行某些操作(如读取、写入或打开)时应调用哪些函数回调(通过提供指向这些函数的指针)。
当您的驱动程序注册到某个子系统时,将传递指向此结构的指针。如果是 miscdriver(第一个示例),它在 struct miscdevice
结构中设置,然后传递给 misc_register
函数。对于字符设备(第二个示例),它直接作为参数传递给 register_chrdev
.
您提供的第二个示例中描述了 file_operations
结构 - 请仔细阅读。
我找到了一个 couple of articles,其中展示了如何制作您自己的 hello-world 驱动程序。
我认为函数名称应该是硬编码的(例如,当您从设备读取时,您使用 read
函数等)。
但是在描述我 cat
设备时应该发生什么时,到处都使用函数名称,如 hello_read
(first article) or device_file_read
(second article)。
kernel是怎么理解的,他应该用什么函数?
您问题的答案是 struct file_operations
。您会发现它在两个示例中都有定义。此结构描述了在对文件执行某些操作(如读取、写入或打开)时应调用哪些函数回调(通过提供指向这些函数的指针)。
当您的驱动程序注册到某个子系统时,将传递指向此结构的指针。如果是 miscdriver(第一个示例),它在 struct miscdevice
结构中设置,然后传递给 misc_register
函数。对于字符设备(第二个示例),它直接作为参数传递给 register_chrdev
.
您提供的第二个示例中描述了 file_operations
结构 - 请仔细阅读。