17.3 Drivers, Kernel Modules, and Devices
The kernel bus drivers probe for devices. For every detected device, the
kernel creates an internal device structure and the driver core sends a
uevent to the udev daemon. Bus devices identify themselves by a
specially-formatted ID, which tells what kind of device it is. Usually
these IDs consist of vendor and product ID and other subsystem-specific
values. Every bus has its own scheme for these IDs, called
MODALIAS. The kernel takes the device information,
composes a MODALIAS ID string from it, and sends that
string along with the event. For a USB mouse, it looks like this:
MODALIAS=usb:v046DpC03Ed2000dc00dsc00dp00ic03isc01ip02
Every device driver carries a list of known aliases for devices it can
handle. The list is contained in the kernel module file itself. The
program depmod reads the ID lists and creates the file
modules.alias in the kernel's
/lib/modules directory for all currently available
modules. With this infrastructure, module loading is as easy as calling
modprobe for every event that carries a
MODALIAS key. If modprobe $MODALIAS
is called, it matches the device alias composed for the device with the
aliases provided by the modules. If a matching entry is found, that
module is loaded. All this is triggered by udev and happens
automatically.