Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

На главную -> MyLDP -> Электронные книги по ОС Linux
Цилюрик О.И. Модули ядра 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.


Предыдущий раздел: Оглавление Следующий раздел:
Интерфейсы модуля   Параметры загрузки модуля