The kernel 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. 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.