Работа с модулями ядра

Современные ядра Linux построены в соответствии с модульной архитекту- рой. Ядра Linux поддерживают включение модулей ядра без необходимости пересборки ядра и перезагрузки системы. Это позволяет изменять функцио- нальность ядра в работающей системе, а также включать в ядро и удалять драйверы устройств "на лету".

Модули ядра представляют собой объектные файлы с кодом, который можно подключать к работающему ядру Linux. Модуля ядра компилируются при сборке ядра. Процедура сборки ядра будет рассмотрена далее в этой главе. Модули располагаются в каталоге /lib/modules/<имя ядра>. Имена подката- логов /lib/modules всегда точно соответствуют именам ядер, имеющихся в системе. Имя работающего сейчас ядра можно узнать, выполнив команду uname –r (пример 19.1).

 

Пример 19.1. Каталог /lib/modules

 

$ ls /lib/modules

2.6.31.8-0.1-desktop 2.6.31.8-0.1-xen

 

$ uname -r


 

2.6.31.8-0.1-desktop

 

$ ls /lib/modules/`uname -r`

build misc modules.alias.bin modules.builtin.bin modules.dep.bin modules.symbols source vdso kernel modules.alias modules.builtin modules.dep modules.order modules.symbols.bin systemtap weak-updates

 

Обратите внимание, что в каталоге /lib/modules имеется подкаталог (или под- каталоги) с именем ядра. Основная часть модулей ядра содержится в подка- талоге kernel/.

В ядрах серии 2.6 в kernel/ обычно имеются следующие подкаталоги:

r arch — модули ядра, зависящие от архитектуры;

r crypto — криптографические модули ядра;

r drivers — драйверы для различных устройств;

r fs — модули поддержки файловых систем;

r kernel — служебный модуль;

r lib — библиотеки, используемые ядром;

r net — поддержка сетевой инфраструктуры;

r sound — поддержка звуковой инфраструктуры.

Для получения списка модулей, установленных в настоящее время в ядро, следует выполнить команду /sbin/lsmod, которая выводит в форматирован- ном виде информацию из файла /proc/modules (пример 19.2).

 

Пример 19.2. Фрагмент списка загруженных модулей ядра

 

# lsmod  
Module Size Used by
vboxnetadp
vboxnetflt
vboxdrv 2 vboxnetadp,vboxnetflt
nls_iso8859_1
nls_cp437
vfat
fat 1 vfat
nfs
lockd

 

Информацию о модуле выводит команда /sbin/modinfo (пример 19.3).

 

Пример 19.3. Вывод информации о модуле ядра

 

# modinfo vboxdrv

filename: /lib/modules/2.6.31.8-0.1-desktop/misc/vboxdrv.ko version: 3.1.2 (0x00100001)

license: GPL

description: VirtualBox Support Driver author: Sun Microsystems, Inc. srcversion: F03437979AB40995D202F18

depends:

vermagic: 2.6.31.8-0.1-desktop preempt mod_unload modversions 686 parm: force_async_tsc:force the asynchronous TSC mode (int)

 

Информация о модулях включается в сами модули, хотя она при необходи- мости может быть скрыта.

Новые модули могут быть загружены в работающее ядро Linux с помощью команды/sbin/insmod (пример 19.4). Установить модуль в ядро может толь- ко суперпользователь. В качестве аргумента для команды insmod указывают имя файла модуля.

 

Пример 19.4. Установка модуля командой insmod

 

# insmod \

> /lib/modules/2.6.31.8-0.1-desktop/kernel/drivers/scsi/scsi_debug.ko

# lsmod | grep scsi

scsi_debug 62688 0

 

В примере 19.4 был установлен модуль scsi_debug.ko. Команда lsmod отобра- зила в списке модулей установленный модуль.

Удалить модуль из ядра можно с помощью команды /sbin/rmmod (пример 19.5).

 

Пример 19.5. Удаление модуля командой rmmod

 

# rmmod scsi_debug

# lsmod | grep scsi

 

Команда rmmod в примере 19.5 удалила модуль scsi_debug.ko.


 

Часто модули ядра для работоспособности требуют наличия других модулей ядра. В каталоге, содержащем модули ядра (/lib/modules/`uname -r`), на- ходится текстовый файл modules.dep с зависимостями модулей друг от друга. Файл modules.dep генерируется с помощью утилиты /sbin/depmod.

Вместо команд insmod и rmmod предпочтительнее вызывать команду modprobe, обеспечивающую более интеллектуальное поведение (пример 19.6). Эта команда использует файл modules.dep для автоматического учета зави- симостей модулей, что позволяет загружать модули ядра, не задумываясь об их зависимостях. Они будут учтены, и требуемые модули будут загружены.

 

Пример 19.6. Установка модуля командой modprobe

 

# modinfo ext4

filename: /lib/modules/2.6.31.8-0.1-desktop/kernel/fs/ext4/ext4.ko

...

depends: jbd2,crc16

...

# modprobe -v ext4

insmod /lib/modules/2.6.31.8-0.1-desktop/kernel/lib/crc16.ko insmod /lib/modules/2.6.31.8-0.1-desktop/kernel/fs/jbd2/jbd2.ko insmod /lib/modules/2.6.31.8-0.1-desktop/kernel/fs/ext4/ext4.ko

 

Обратите внимание на то, что команда modprobe -v, выполненная в приме- ре 19.6, загрузила сразу три модуля в силу того, что модуль для файловой системы ext4 зависит от crc16.ko и jbd2.ko. Опция -v была использована для вывода информации о загрузке модулей. Вывод команды modinfo в при- мере был сокращен.

По умолчанию команда modprobe устанавливает модуль в ядро, при вызове с опцией -r она способна удалять модули (пример 19.7).

 

Пример 19.7. Удаление модулей командой modprobe

 

# modprobe -v -r ext4

rmmod /lib/modules/2.6.31.8-0.1-desktop/kernel/fs/ext4/ext4.ko rmmod /lib/modules/2.6.31.8-0.1-desktop/kernel/fs/jbd2/jbd2.ko rmmod /lib/modules/2.6.31.8-0.1-desktop/kernel/lib/crc16.ko

 

При необходимости выгрузить все модули ядра, не использующиеся в на- стоящий момент, можно использовать команду modprobe -r без аргументов.


 

Одно из полезных свойств команды modprobe — способность находить фай- лы модулей, имена которых соответствуют заданному шаблону (при- мер 19.8). Для этого следует использовать опцию -l. В именах модулей в та- ком случае допускается использовать шаблоны, аналогичные шаблонам для имен файлов в оболочке.

 

Пример 19.8. Поиск модулей по шаблону командой modprobe

 

# modprobe -l 'e100*' kernel/drivers/net/e1000/e1000.ko kernel/drivers/net/e1000e/e1000e.ko kernel/drivers/net/e100.ko

 

Использование опции -a команды modprobe позволяет установить сразу несколько модулей, имена которых соответствуют заданному в качестве ар- гумента шаблону.

Если модуль требует передачи ядру некоторой информации, то ее можно ука- зывать в качестве аргументов команды modprobe (пример 19.9).

 

Пример 19.9. Передача параметров модулю

 

# modprobe e1000 speed=100

 

Команда modprobe имеет конфигурационный файл /etc/modprobe.conf. Этот файл позволяет указывать параметры, передаваемые модулям. Помимо этого в данном файле можно задавать команды, которые надо выполнить до или после загрузки или удаления модулей. Также в этом файле могут задаваться псевдонимы для модулей, делающие работу с ними более удобной. Фрагмент файла /etc/modprobe.conf приведен в примере 19.10.

 

Пример 19.10. Файл /etc/modprobe.conf

 

alias eth0 e1000 options e1000 Speed=100

 

В файле /etc/modprobe.conf, приведенном в примере 19.10, указано, что драй- вером для Ethernet-адаптера eth0 является e1000. Это модуль драйвера Intel Gigabit Ethernet, настроенный на скорость 100 Мбит/с, что установлено ди- рективой options.


 








Дата добавления: 2015-06-12; просмотров: 1033;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.025 сек.