我一直在研究输入GNU / Linux驱动程序,例如usb mouse driver,我想我知道它们是如何交互的,但是我不明白内核如何识别一种设备来为它加载这个驱动程序。我通过对角线查看了Linux Device Drivers,但没有发现任何关于此事的内容。
关于我应该阅读什么来理解这个过程的任何建议?
答案 0 :(得分:2)
背景:内核使用kobject_uevent_env函数发送所谓的uevents。这个uevents由来自netlink socket的udev守护进程读取(早期版本使用hotplug)。在开始之前,udev从/etc/udev/rules.d/
预加载规则,这个规则包含有关需要做什么的信息,作为对来自内核的适当的uevent的反应(f.e.insmod a module)。
现在谈谈你的要求。通常,uevent消息附带的内容是MODALIAS,它可能如下所示:
MODALIAS = usb:v046DpC03Ed2000dc00dsc00dp00ic03isc01ip02
USB设备存储供应商ID和设备ID,在构建MODALIAS时也使用它们。可以动态加载的内核设备驱动程序(.ko文件)也存储设备标识符,此驱动程序可以使用。驱动程序可以使用MODULE_DEVICE_TABLE宏宣布它使用适当的设备/供应商ID。这就是如何建立设备与动态模块之间的关系。