20.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 for 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 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.