uevents são gerados pelo próprio kernel (isto é, pelos drivers do kernel).
O udev os recebe em netlink (7) , usando a família NETLINK_KOBJECT_UEVENT, grupo 1. Em seguida, ele adiciona vários campos extras às regras & hwdb, e retransmite os uevents estendidos para o kobject-uevent group 2, onde a libudev finalmente os recebe.
É possível disparar os eventos manualmente (por exemplo, escrevendo "adicionar" ou "alterar" ao arquivo /sys/…/uevent
de um determinado dispositivo), mas isso geralmente não é feito, exceto ao usar "disparador do udevadm".