内核如何理解,哪个驱动模块函数处理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 结构 - 请仔细阅读。