Linux kernel linux如何识别需要加载的输入驱动程序?

Linux kernel linux如何识别需要加载的输入驱动程序?,linux-kernel,linux-device-driver,Linux Kernel,Linux Device Driver,我一直在研究输入GNU/Linux驱动程序,例如,我想我知道它们是如何相互作用的,但我不明白内核是如何识别一种设备来为它加载这个驱动程序的。我已经仔细看了一遍,但没有发现关于这件事的任何东西 关于我应该阅读什么来理解这个过程,有什么建议吗?背景:内核使用函数发送所谓的UEVENT。此uevents由守护进程从netlink套接字读取(早期版本使用热插拔)。在启动之前,udev预加载/etc/udev/rules.d/中的规则,这些规则包含有关需要执行哪些操作以响应内核(f.e.insmod a模

我一直在研究输入GNU/Linux驱动程序,例如,我想我知道它们是如何相互作用的,但我不明白内核是如何识别一种设备来为它加载这个驱动程序的。我已经仔细看了一遍,但没有发现关于这件事的任何东西


关于我应该阅读什么来理解这个过程,有什么建议吗?

背景:内核使用函数发送所谓的UEVENT。此uevents由守护进程从netlink套接字读取(早期版本使用热插拔)。在启动之前,udev预加载
/etc/udev/rules.d/
中的规则,这些规则包含有关需要执行哪些操作以响应内核(f.e.insmod a模块)中的适当uevent的信息

现在谈谈你的问题。通常,uevent消息附带的是MODALIAS,它可能如下所示:

MODALIAS = usb:v046DpC03Ed2000dc00dsc00dp00ic03isc01ip02

USB设备存储供应商id和设备id,在构造MODALIAS时也会使用它们。可以动态加载的内核设备驱动程序(.ko文件)也存储设备标识符,该驱动程序可以使用。驱动程序可以使用宏声明它与适当的设备/供应商id一起工作。这就是设备和动态模块之间建立关系的方式。

背景:内核使用函数发送所谓的UEVENT。此uevents由守护进程从netlink套接字读取(早期版本使用热插拔)。在启动之前,udev预加载
/etc/udev/rules.d/
中的规则,这些规则包含有关需要执行哪些操作以响应内核(f.e.insmod a模块)中的适当uevent的信息

现在谈谈你的问题。通常,uevent消息附带的是MODALIAS,它可能如下所示:

MODALIAS = usb:v046DpC03Ed2000dc00dsc00dp00ic03isc01ip02

USB设备存储供应商id和设备id,在构造MODALIAS时也会使用它们。可以动态加载的内核设备驱动程序(.ko文件)也存储设备标识符,该驱动程序可以使用。驱动程序可以使用宏声明它与适当的设备/供应商id一起工作。这就是设备和动态模块之间关系的建立方式。

“这就是设备和动态模块之间关系的建立方式。”——这个总结陈述太宽泛了;您只描述了USB设备。OP的标题不仅限于USB设备。也就是说,在典型的SoC中,另一条外围总线上的设备,如ADC、UART,甚至USB控制器,很少是自我识别的。@sawdust如果你不喜欢这个答案,你可以提出你自己的。如果你能解释一下你提到的事情,我会很高兴的。我只是发布了一条我所知道的信息。阿列克肖普斯,不幸的是,我同意@sawdust。你的答案描述了一个特殊的案例。如果OP同意的话,也就是说,“这就是设备和动态模块之间的关系是如何建立的。”——这个求和语句太宽泛了;您只描述了USB设备。OP的标题不仅限于USB设备。也就是说,在典型的SoC中,另一条外围总线上的设备,如ADC、UART,甚至USB控制器,很少是自我识别的。@sawdust如果你不喜欢这个答案,你可以提出你自己的。如果你能解释一下你提到的事情,我会很高兴的。我只是发布了一条我所知道的信息。阿列克肖普斯,不幸的是,我同意@sawdust。你的答案描述了一个特殊的案例。如果OP同意的话,那就是了。