12.3. 驱动程序、内核模块和设备

设备的内核总线驱动程序探测。内核为每个检测到的设备创建内部设备结构,驱动程序内核将 uevent 发送到 udev 守护程序。总线设备通过特殊格式的 ID 来标识自己,这可以识别设备的类型。通常,这些 ID 由供应商和产品 ID 以及其它特定于子系统的值组成。每个总线都有自己对于这些 ID 的方案,称为 MODALIAS。内核获取设备信息,由此组成一个 MODALIAS ID 字符串,并将该字符串与事件一起发送。对于 USB 鼠标,如下所示:

MODALIAS=usb:v046DpC03Ed2000dc00dsc00dp00ic03isc01ip02

每个设备驱动程序都带有它可以处理的设备的已知别名列表。这个列表包含在内核模块文件中。程序 depmod 读取 ID 列表并在内核的 /lib/modules 目录中为所有当前可用的模块创建文件 modules.alias。使用这种基础结构,模块的装载就如为每个带有 MODALIAS 关键字的事件调用 modprobe 一样简单。如果调用 modprobe $MODALIAS,它将组成该设备的设备别名与模块提供的别名相匹配。如果找到匹配的项,则装载该模块。这个通过 udev 触发并且自动发生。