Насколько я понимаю еще до загрузки драйвера ядро должно определить наличие устройства...
Прежде всего это зависит от стандарта, под которое это устройство сделано. Напр. не-pnp isa устройства находятся только сканированием по предпологаемым ресурсам, или прямым указанием этих ресурсов (io,mem,irq,dma). В то же время pci устройства более легко и безопасно находятся сканированием шин.
Mayor, расскажу что знаю:
1) драйвер != модуль.
Модуль - подгружаемый исполняемый файл и может содержать любое число драйверов, равно как и 0.
Драйвер может быть собран как включенный в ядро, так и вынесенный в модуль. Некоторый драйвера могут быть только в модуле, или только в ядре.
lsmod выдает список загруженных модулей.
В /proc/devices можно посмотреть, для каких устройств драйвера уже загружены.
2) /dev и драйвера устройств.
Драйвера регистрятся на majon number и тип (char,block) устройств. Драйвер может зарегистрить несколько major number-ов. Первичен драйвер и зарегистрированные им major, а файлы устройст вторичны - они лишь имена (кстати, эти файлы не привязаны к /dev и тем именам, что традиционно им даются).
Есть специальный драйвер, занимающий major 10 и предоставляющий возможность другим драйверам регистрить у него minor number.
Драйвера сетевых устройств к char/block устройствам отношения не имеют - у них другой механизм.
3) pci и pnp
Обнаруженные pci устройства можно просмотреть в /proc/pci .
Под pnp понимается "isa pnp". Для работы с ней есть пакет isapnptools с утилитами pnpdump и isapnp.
С usb устройствами в Linux-е почтине работал - в чем то могу ошибаться.
Должно быть загружено: поддержка usb, драйвер usb-портов, демон поиска usb-устройств. При подключении девайса он автоматом находится и, если есть драйвер для него, то он загружается.
Обрати внимание на утилиту kudzu - она умеет что-то находить и прописывать в конфигах.