русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2015-07-09; просмотров: 1517; Нарушение авторских прав


Современные ядра 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.


 



<== предыдущая лекция | следующая лекция ==>
Установка нового оборудования | Файлы устройств и udev


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.526 сек.