Я думаю, вы смешиваете две разные вещи: обнаружение оборудования и загрузку модуля по требованию.
В некоторых случаях ядро явно выполняет запрос модуля. Однако в большинстве случаев само ядро не выполняет никакой загрузки по требованию.
Но подождите, вы должны ошибаться, если я подключу свою новую блестящую веб-камеру, не так ли?
модуль автоматически загружается?
Да, но не ядром. Все, что делает ядро, - это вызывает программу пользовательского пространства с так называемым «событием горячего подключения» или «событием» в качестве аргументов. На ПК с Linux эта пользовательская программа обычно называется udev, но во встроенной системе вы можете использовать, например, mdev. Вы можете найти более подробное объяснение здесь и здесь
Что касается второй части вашего вопроса, ядро выполняет обнаружение аппаратного обеспечения только в том случае, если обнаруживается аппаратное обеспечение. Примером обнаруживаемого оборудования является USB и PCI. Примером не обнаруживаемых шин Harwdare является SPI или I2C.
В последних случаях присутствие определенного устройства на данной шине либо кодируется непосредственно в ядре, либо передается ему загрузчиком. Google для "дерева устройств" для примера последнего.
Подводя итог: обнаружение оборудования выполняется ядром, а загрузка модуля - пользовательским пространством с информацией, предоставляемой ядром.