17.4 Booting and Initial Device Setup
All device events happening during the boot process before the udev
daemon is running are lost, because the infrastructure to handle these
events lives on the root file system and is not available at that time.
To cover that loss, the kernel provides a uevent
file located in the device directory of every device in the sysfs file
system. By writing add to that file, the kernel
resends the same event as the one lost during boot. A simple loop over
all uevent files in /sys
triggers all events again to create the device nodes and perform device
setup.
As an example, a USB mouse present during boot may not be initialized by
the early boot logic, because the driver is not available at that time.
The event for the device discovery was lost and failed to find a kernel
module for the device. Instead of manually searching for possibly
connected devices, udev just requests all device events from the kernel
after the root file system is available, so the event for the USB mouse
device just runs again. Now it finds the kernel module on the mounted
root file system and the USB mouse can be initialized.
From userspace, there is no visible difference between a device coldplug
sequence and a device discovery during runtime. In both cases, the same
rules are used to match and the same configured programs are run.