как (ядро Linux) загружаются сетевые модули без modprobe.conf У меня установлен дистрибутив Fedora, и я вижу, что модуль e1000e автоматически загружается в систему.
Есть ли конфигурация, которая указывает на автоматическую загрузку этого модуля ??
Я сослался на modprobe.conf, НО такой записи не существует. в этом отношении я использовал команду grep для всего каталога / etc /, чтобы проверить любую запись для загрузки этого модуля, но безрезультатно.
Пожалуйста, дайте мне знать 1. упоминается ли в каком-либо файле конфигурации о автоматически загружаемых определенных модулях во время загрузки? 2. Если нет конфигурационного файла, как модули подхватываются системой?
Спасибо!
Они загружаются на основе обнаружения оборудования. В случае вашего e1000e
модуль оборудование на вашем компьютере, независимо от того, находится ли оно на плате или в виде сменной карты, будет идентифицировать себя с помощью пары идентификатора поставщика PCI и идентификатора устройства, которые будут сопоставлены с доступными модулями, и любой модуль, идентифицирующий себя с этим идентификатором, будет загружен.
Вы можете увидеть идентификаторы, связанные с e1000e
модуль, запустив modinfo e1000e
который сообщит примерно следующее:
filename: /lib/modules/3.9.5-301.fc19.x86_64/kernel/drivers/net/ethernet/intel/e1000e/e1000e.ko
version: 2.2.14-k
license: GPL
description: Intel(R) PRO/1000 Network Driver
author: Intel Corporation, <linux.nics@intel.com>
srcversion: 28B371A0E50A24E26204016
alias: pci:v00008086d00001559sv*sd*bc*sc*i*
alias: pci:v00008086d0000155Asv*sd*bc*sc*i*
alias: pci:v00008086d0000153Bsv*sd*bc*sc*i*
alias: pci:v00008086d0000153Asv*sd*bc*sc*i*
...
Только с очень длинным списком alias
линии, каждая из которых идентифицирует конкретное устройство PCI, которое модуль может поддерживать.
По мере появления устройств ядро Linux объявляет о них в пользовательском пространстве с помощью uevents, а демон udev сопоставляет идентификаторы устройств с базой данных модулей и загружает правильные модули.
Первое, что вам нужно проверить, это ваш файл конфигурации ядра, если ваш модуль встроен в ваше ядро, например мой сервер redhat 5
grep -i e1000 /boot/config-$(uname -r) | grep -v ^#
CONFIG_E1000=m
CONFIG_E1000_NAPI=y
CONFIG_E1000E=m
когда вы вставляете сетевую карту e1000, ядро вызывает программу modprobe "kernel.modprobe = / sbin / modprobe" с использованием пользовательского режима ядра api
Если ваш модуль находится в стадии сборки, вы можете использовать modprobe.conf для изменения параметров модуля с помощью директивы options, если только ядро не загрузит модуль с параметрами модуля по умолчанию
Во время загрузки initrd
, загружается начальный RAM-диск, содержимое которого затем доступно для загрузки на втором этапе. См. / Boot.
Этот RAM-диск обычно содержит а.о. модули ядра, не скомпилированные в ядро статически и необходимые для загрузки системы, то есть модульные драйверы для файловой системы, RAID-контроллеров и сети.
man initrd
есть гораздо лучшее объяснение.