Библиотека сайта rus-linux.net
Цилюрик О.И. Модули ядра Linux | ||
Назад | Архитектура и вокруг... | Вперед |
Загрузка модулей
Утилита
insmod
получает имя файла модуля, и пытается загрузить его без
проверок взаимосвязей, как это описано ниже. Утилита
modprobe
сложнее: ей передаётся передается или универсальный
идентификатор, или непосредственно имя модуля.
Если modprobe
получает универсальный идентификатор, то она сначала пытается найти
соответствующее имя модуля в
файле /etc/modprobe.conf
(устаревшее), или в файлах *.conf
каталога /etc/
modprobe.d,
где каждому универсальному идентификатору поставлено в соответствие
имя модуля (в строке
alias ...
, смотри
modprobe.conf
(5)).
Далее, по имени модуля утилита modprobe, по содержимому файла :
$ ls -l /lib/modules/`uname -r`/*.dep
-rw-r--r-- 1 root root 206131 Мар 6 13:14 /lib/modules/2.6.32.9-70.fc12.i686.PAE/modules.dep
- пытается установить зависимости запрошенного модуля: модули, от которых зависит запрошенный, будут загружаться утилитой прежде него. Файл зависимостей modules.dep формируется командой :
# depmod -a
Той же командой (время от времени)
мы обновляем и большинство других файлов modules.*
этого каталога:
$ ls /lib/modules/`uname -r`
build modules.block modules.inputmap modules.pcimap updates extra modules.ccwmap modules.isapnpmap modules.seriomap vdso kernel modules.dep modules.modesetting modules.symbols weak-updates misc modules.dep.bin modules.networking modules.symbols.bin modules.alias modules.drm modules.ofmap modules.usbmap modules.alias.bin modules.ieee1394map modules.order source
Интересующий нас файл содержит строки вида:
$ cat /lib/modules/`uname -r`/modules.dep
... kernel/fs/ubifs/ubifs.ko: kernel/drivers/mtd/ubi/ubi.ko kernel/drivers/mtd/mtd.ko ...
Каждая такая строка содержит: а). модули, от которых зависит данный (например, модуль ubifs зависим от 2-х модулей ubi и mtd), и б). полные пути к файлам всех модулей. После этого загрузить модули не представляет труда, и непосредственно для этой работы включается (по каждому модулю последовательно) утилита insmod.
Примечание: если загрузка модуля производится непосредственно утилитой insmod, указанием ей имени файла модуля, то утилита никакие зависимости не проверяет, и, если обнаруживает неразрешённое имя — завершает загрузку аварийно.
Утилита rmmod выгружает ранее загруженный модуль, в качестве параметра утилита должна получать имя модуля (не имя файла модуля). Если в системе есть модули, зависимые от выгружаемого (счётчик ссылок использования модуля больше нуля), то выгрузка модуля не произойдёт, и утилита rmmod завершится аварийно.
Совершенно естественно, что все утилиты insmod, modprobe, depmod, rmmod слишком кардинально влияют на поведение системы, и для своего выполнения, естественно, требуют права root.
Предыдущий раздел: | Оглавление | Следующий раздел: |
Интерфейсы модуля | Параметры загрузки модуля |