IBM®
Перейти к тексту
    в России и странах СНГ [изменить]    Условия использования
 
 
   
    Главная страница    Продукты    Услуги и решения    Поддержка и загрузка    Мой профиль    
Перейти к тексту

developerWorks Россия  >  Linux | Open source  >

Экзамен LPI 102: Ядро

Администрирование Linux для начинающих (LPIC-1) тема 105

developerWorks
На предыдущую страницуСтраница 2 из 6 На предыдущую страницу

Опции документа

Обсудить


Выскажите мнение об этом учебном пособии

Помогите нам улучшить содержание


Управление ядром в ходе работы системы

В этом разделе мы рассматриваем материал по теме 1.105.1 экзамена 102 Администрирование Linux для начинающих (LPIC-1). Рейтинг темы 4.

Из этого раздела вы узнаете, как:

  • С помощью утилит командной строки получать информацию о ядре и его модулях в ходе работы системы
  • Вручную загружать и удалять модули ядра
  • Определять, когда модули могут быть удалены
  • Конфигурировать систему для загрузки модулей, имена которых отличаются от названий соответствующих файлов

Формально Linux -- это ядро вашей системы. Ядро обеспечивает инфраструктуру для работы приложений и использования различных аппаратных средств. Это код низкого уровня, который взаимодействует с интерфейсами аппаратных средств, планирует и распределяет память и т.д. Выбор в пользу систем GNU/Linux часто обусловлен тем, что многие инструменты, создаваемые для большинства дистрибутивов, благодаря проекту GNU Фонда свободного программного обеспечения (Free Software Foundation) являются доступными. Однако, вы будете часто видеть вместо "GNU/Linux" только "Linux".

uname

Команда uname выдает информацию о вашей системе и ее ядре. В Листинге 1 показаны различные опции команды uname и получаемая с их помощью информация. Описание опций дается в Таблице 3.


Листинг 1. Команда uname
                    
ian@pinguino:~$ uname
Linux
ian@pinguino:~$ uname -s
Linux
ian@pinguino:~$ uname -n
pinguino
ian@pinguino:~$ uname -r
2.6.12-10-386
ian@pinguino:~$ uname -v
#1 Mon Jan 16 17:18:08 UTC 2006
ian@pinguino:~$ uname -m
i686
ian@pinguino:~$ uname -o
GNU/Linux
ian@pinguino:~$ uname -a
Linux pinguino 2.6.12-10-386 #1 Mon Jan 16 17:18:08 UTC 2006 i686 GNU/Linux

Таблица 3. Опции команды uname
ОпцияОписание
-sПоказать имя ядра. Эта информация выдается по умолчанию, если ни одна опция не указана.
-nПоказать имя узла сети или имя хоста.
-rПоказать номер выпуска ядра. Эта опция часто используется с командами управления модулями.
-vПоказать версию ядра.
-mПоказать имя аппаратной платформы (CPU).
-oПоказать имя операционной системы.
-aПоказать всю возможную информацию.

Листинг 1 получен на операционной системе Ubuntu, запущенной на процессоре Intel®. Команда uname доступна в большинстве систем UNIX® и UNIX-подобных систем, таких как Linux. Выдаваемая ею информация может быть различной в разных дистрибутивах и версиях Linux, а также на разных типах компьютеров. В Листинге 2 показаны выводы команды uname на системе Fedora Core 4, запущенной на машине AMD Athlon 64, и, для сравнения, на Apple PowerBook.


Листинг 2. Использование команды uname на других системах
                    
Linux attic4 2.6.14-1.1656_FC4 #1 Thu Jan 5 22:13:55 EST 2006 x86_64 
x86_64 x86_64 GNU/Linuxfilesystem

Darwin Ian-Shields-Computer.local 7.9.0 Darwin Kernel Version 7.9.0: 
Wed Mar 30 20:11:17 PST 2005; root:xnu/xnu-517.12.7.obj~1/RELEASE_PPC  
Power Macintosh powerpc



В начало


Модули ядра

Ядро управляет системой на низшем уровне, включая оборудование и интерфейсы. При большом разнообразии аппаратных средств и различных файловых систем ядро, способное поддерживать все их, будет слишком большим. К счастью, модули ядра позволяют при необходимости загрузить обеспечивающее поддержку программное обеспечение, такое как драйверы для аппаратных средств или файловые системы. Это позволяет запускать систему с небольшим ядром и затем подгружать модули по мере необходимости. Часто эта подгрузка происходит автоматически, например, при подключении устройств USB.

В оставшейся части этого раздела мы рассмотрим, как и с помощью каких команд производится конфигурирование модулей ядра.

Команды для выполнения задач загрузки и удаления модулей ядра требуют полномочий суперпользователя root. Команды, выдающие информацию о модулях, обычно могут быть выполнены обычным пользователем. Однако, в случае, если они расположены в каталоге /sbin, они будут недоступны для обычного пользователя, так как этот каталог не включается в путь поиска PATH. Таким образом, если вы не root, вам, вероятно, надо будет использовать полное наименование пути.



В начало


lsmod

Воспользуйтесь командой lsmod, чтобы узнать, какие модули загружены на вашей системе в настоящее время (см. Листинг 3). Вероятно, у вас вывод этой команды будет другим, хотя некоторые записи должны совпадать.


Листинг 3. Просмотр модулей ядра с помощью команды lsmod
                    
[ian@attic4 ~]$ /sbin/lsmod
Module                  Size  Used by
nvnet                  74148  0
nvidia               4092336  12
forcedeth              24129  0
md5                     4161  1
ipv6                  268737  12
parport_pc             29189  1
lp                     13129  0
parport                40969  2 parport_pc,lp
autofs4                29637  1
sunrpc                168453  1
ipt_REJECT              5825  1
ipt_state               1985  3
ip_conntrack           42009  1 ipt_state
iptable_filter          3137  1
ip_tables              19521  3 ipt_REJECT,ipt_state,iptable_filter
dm_mod                 58613  0
video                  16069  0
button                  4161  0
battery                 9541  0
ac                      4933  0
ohci_hcd               26977  0
ehci_hcd               41165  0
i2c_nforce2             7105  0
i2c_core               21825  1 i2c_nforce2
shpchp                 94661  0
snd_intel8x0           34945  1
snd_ac97_codec         76217  1 snd_intel8x0
snd_seq_dummy           3781  0
snd_seq_oss            37569  0
snd_seq_midi_event      9409  1 snd_seq_oss
snd_seq                62801  5 snd_seq_dummy,snd_seq_oss,snd_seq_midi_event
snd_seq_device          9037  3 snd_seq_dummy,snd_seq_oss,snd_seq
snd_pcm_oss            51569  0
snd_mixer_oss          18113  1 snd_pcm_oss
snd_pcm               100553  3 snd_intel8x0,snd_ac97_codec,snd_pcm_oss
snd_timer              33733  2 snd_seq,snd_pcm
snd                    57669  11 snd_intel8x0,snd_ac97_codec,snd_seq_oss,snd_seq,
snd_seq_device,snd_pcm_oss,snd_mixer_oss,snd_pcm,snd_timer
soundcore              11169  1 snd
snd_page_alloc          9925  2 snd_intel8x0,snd_pcm
floppy                 65397  0
ext3                  132681  3
jbd                    86233  1 ext3
sata_nv                 9541  0
libata                 47301  1 sata_nv
sd_mod                 20545  0
scsi_mod              147977  2 libata,sd_mod
[ian@attic4 ~]$

Вы можете видеть, что в системе загружено множество модулей. Большинство из них поставляются вместе с ядром. Однако некоторые, такие как nvnet, nvidia и sata_nv от корпорации NVIDIA, содержат проприетарный код и не являются частью стандартного ядра. Таким образом, модульный подход позволяет подключать проприетарный код к ядру с открытым кодом. При условии, что лицензия производителя разрешает это, в дистрибутив Linux могут быть внесены проприетарные модули, что позволит не тратить силы на получение их непосредственно от производителя и даст гарантию, что вы сможете воспользоваться ими.

В Листинге 3 вы также можете видеть, что соответствующими модулями осуществляется поддержка таких устройств как видео, SATA, SCSI, дискеты и звуковые карты, а также сетевые устройства, например, IPV6, поддержка файловых систем, такой как ext3, и Remote Procedure Call (RPC) компании Sun.

Помимо имени модуля, команда lsmod показывает также размер и число пользователей модуля. Если модуль используется более чем одним пользователем, будет представлен список этих пользователей. Так, например модуль soundcore используется модулем snd, который в свою очередь используется несколькими другими звуковыми модулями.



В начало


modinfo

Команда modinfo выдает информацию об одном или нескольких модулях. Как показано в Листинге 4, эта информация содержит полный путь до файла, имя автора, лицензию, другие параметры, которые можно передать модулю, версию, зависимости и другую информацию.


Листинг 4. Основная информация о модуле
                    
[ian@attic4 ~]$ /sbin/modinfo floppy
filename:       /lib/modules/2.6.12-1.1456_FC4/kernel/drivers/block/floppy.ko
author:         Alain L. Knaff
license:        GPL
alias:          block-major-2-*
vermagic:       2.6.12-1.1456_FC4 686 REGPARM 4KSTACKS gcc-4.0
depends:
srcversion:     2633BC999A0747D8D215F1F
parm:           FLOPPY_DMA:int
parm:           FLOPPY_IRQ:int
parm:           floppy:charp
[ian@attic4 ~]$ /sbin/modinfo sata_nv
filename:       /lib/modules/2.6.12-1.1456_FC4/kernel/drivers/scsi/sata_nv.ko
author:         NVIDIA
description:    low-level driver for NVIDIA nForce SATA controller
license:        GPL
version:        0.6
vermagic:       2.6.12-1.1456_FC4 686 REGPARM 4KSTACKS gcc-4.0
depends:        libata
alias:          pci:v000010DEd0000008Esv*sd*bc*sc*i*
alias:          pci:v000010DEd000000E3sv*sd*bc*sc*i*
alias:          pci:v000010DEd000000EEsv*sd*bc*sc*i*
alias:          pci:v000010DEd00000054sv*sd*bc*sc*i*
alias:          pci:v000010DEd00000055sv*sd*bc*sc*i*
alias:          pci:v000010DEd00000036sv*sd*bc*sc*i*
alias:          pci:v000010DEd0000003Esv*sd*bc*sc*i*
alias:          pci:v000010DEd*sv*sd*bc01sc01i*
srcversion:     3094AD48C1B869BCC301E9F

В Листинге 4 обратите внимание на строки, содержащие имена файлов модулей. Эти имена оканчиваются суффиксом .ko, что является характерным отличием модулей для ядра 2.6 от других объектных файлов и от модулей для ядра 2.4 и более ранних версий, в которых и для них и для других объектных файлов использовался один и тот же суффикс .o.

Вы можете также заметить, что путь включает в себя версию ядра. Например, частью пути /lib/modules/2.6.12-1.1456_FC4/kernel/drivers/block/floppy.ko является 2.6.12-1.1456_FC4. Это запись совпадает с выводом команды uname -r. Модули являются характерными для данного ядра, и эта структура каталогов отражает их взаимозависимость.

В системах с ядром версии 2.6 с помощью команды modinfo можно ограничить количество запросов определенной информации о модуле. Чтобы извлечь информацию одного типа, например, parm, description, license, filename или alias, воспользуйтесь опцией -F. Если вам необходимо получить информацию различных типов, используйте команду несколько раз с различными опциями. В ядрах версии 2.4 информацию о параметрах можно получить с помощью опции -p. Текущая версия команды modinfo поддерживает также параметры предыдущих версий. В Листинге 5 показаны несколько примеров.


Листинг 5. Определенная информация о модуле
                    
[ian@attic4 ~]$ /sbin/modinfo -F parm snd
cards_limit:Count of auto-loadable soundcards.
major:Major # for sound driver.
[ian@attic4 ~]$ /sbin/modinfo -F license nvidia floppy
NVIDIA
GPL
[ian@attic4 ~]$ /sbin/modinfo -p snd
major:Major # for sound driver.
cards_limit:Count of auto-loadable soundcards.

Используйте ваши навыки работы в Linux

Вы можете использовать некоторые приемы, описанные в учебном пособии "Экзамен LPI 101 (тема 103): Команды GNU и UNIX" для получения информации, например, о количестве параметров, которые можно передать модулю. В Листинге 6 показан пример.


Листинг 6. Количество параметров модуля
                    
[ian@attic4 ~]$ for n in `/sbin/lsmod | tail +2 | cut -d " " -f1`;
> do echo "$n $(/sbin/modinfo -p $n |wc -l )" | grep -v " 0$"; done
nvnet 12
forcedeth 1
parport_pc 5
dm_mod 1
ohci_hcd 2
ehci_hcd 2
shpchp 3
snd_intel8x0 7
snd_ac97_codec 1
snd_seq_dummy 2
snd_seq_oss 2
snd_seq 7
snd_pcm_oss 3
snd_pcm 2
snd_timer 1
snd 2
snd_page_alloc 1
scsi_mod 6



В начало


rmmod

Если "use count" модуля равен 0, вы можете без опасений удалить его. Например, вы можете сделать это при подготовке к загрузке обновленной версии. Это позволит не перезагружать компьютер только из-за того, что необходимо обновить поддержку какого-то отдельного устройства. Для удаления введите команду rmmod имя модуля, как показано в Листинге 7.


Листинг 7. Удаление модуля из работающей системы
                    
[root@attic4 ~]# rmmod floppy

Чтобы узнать о других опциях команды rmmod, обратитесь к ее странице man.



В начало


insmod и modprobe

Удаленный вами модуль может понадобиться вновь. Чтобы загрузить модуль, введите команду insmod, полный путь для модуля, который необходимо загрузить, и все необходимые опции. При использовании этой команды вы, вероятно, захотите использовать режим подстановки вывода команды (command substitution), чтобы сгенерировать имя файла. В Листинге 8 показаны два способа загрузки модуля.


Листинг 8. Загрузка модуля с использованием команды insmod
                    
[root@attic4 ~]# insmod /lib/modules/`uname -r`/kernel/drivers/block/floppy.ko
[root@attic4 ~]# rmmod floppy
[root@attic4 ~]# insmod $(modinfo -F filename floppy)

При использовании второго варианта нет необходимости помнить, в каком подкаталоге (в данном случае drivers/block) расположен модуль. Но существует и более удобный способ загрузки модуля. Команда modprobe предоставляет высокоуровневый интерфейс, оперирующий именами модулей, а не именами путей файлов. Она также управляет загрузкой дополнительных модулей, от которых зависит загружаемый модуль, и позволяет не только загружать, но и удалять модули.

В Листинге 9 показано, как использовать команду modprobe для удаления модуля vfat вместе с используемым им модулем fat. Затем показано, как будет вести себя система, если модуль будет загружен вновь, и в завершение показан результат загрузки модуля. Обратите внимание на опцию -v, которая позволяет получать подробный вывод. Если не использовать эту опцию, команда modprobe (а также команда insmod) выведет только сообщения об ошибках модуля. Между каждым действием используется команда lsmod, пропущенная через grep, чтобы проверить, загружены или нет модули vfat и fat.


Листинг 9. Загрузка модуля с помощью команды modprobe
                    
[root@lyrebird root]# modprobe -r vfat
vfat: Device or resource busy
[root@lyrebird root]# lsmod | grep fat
vfat                   13132   1
fat                    38744   1  [vfat]
[root@lyrebird root]# umount /windows/D
[root@lyrebird root]# modprobe -r vfat
[root@lyrebird root]# modprobe -v --show  vfat
/sbin/insmod /lib/modules/2.4.21-37.0.1.EL/kernel/fs/fat/fat.o
/sbin/insmod /lib/modules/2.4.21-37.0.1.EL/kernel/fs/vfat/vfat.o
[root@lyrebird root]# lsmod | grep fat
[root@lyrebird root]# modprobe -v  vfat
/sbin/insmod /lib/modules/2.4.21-37.0.1.EL/kernel/fs/fat/fat.o
Using /lib/modules/2.4.21-37.0.1.EL/kernel/fs/fat/fat.o
Symbol version prefix ''
/sbin/insmod /lib/modules/2.4.21-37.0.1.EL/kernel/fs/vfat/vfat.o
Using /lib/modules/2.4.21-37.0.1.EL/kernel/fs/vfat/vfat.o
[root@lyrebird root]# lsmod | grep fat
vfat                   13132   0  (unused)
fat                    38744   0  [vfat]



В начало


depmod

Как вы только что видели, в случае, если один модуль зависит от другого, при помощи команды modprobe можно управлять автоматической загрузкой нескольких модулей. Зависимости прописаны в файле modules.dep, хранящемся в подкаталоге /lib/modules соответствующего ядра (имя ядра определяется при помощи команды uname -r). Этот файл вместе с несколькими map-файлами генерируется при помощи команды depmod. Опция -a (от all) теперь необязательна.

Команда depmod просматривает модули в подкаталоге /lib/modules текущего ядра и обновляет информацию о зависимостях. В Листинге 10 показан пример выполнения команды depmod и полученных в результате файлов.


Листинг 10. Использование команды depmod для создания файла modules.dep
                    
[root@lyrebird root]# date
Thu Mar 16 10:41:05 EST 2006
[root@lyrebird root]# depmod
[root@lyrebird root]# cd /lib/modules/`uname -r`
[root@lyrebird 2.4.21-37.0.1.EL]# ls -l mod*
-rw-rw-r--    1 root     root        54194 Mar 16 10:41 modules.dep
-rw-rw-r--    1 root     root           31 Mar 16 10:41 modules.generic_string
-rw-rw-r--    1 root     root           73 Mar 16 10:41 modules.ieee1394map
-rw-rw-r--    1 root     root         1614 Mar 16 10:41 modules.isapnpmap
-rw-rw-r--    1 root     root           29 Mar 16 10:41 modules.parportmap
-rw-rw-r--    1 root     root        65171 Mar 16 10:41 modules.pcimap
-rw-rw-r--    1 root     root           24 Mar 16 10:41 modules.pnpbiosmap
-rw-rw-r--    1 root     root       122953 Mar 16 10:41 modules.usbmap
[root@lyrebird 2.4.21-37.0.1.EL]# cd -
/root

Вы можете изменить поведение команд modprobe и depmod, скорректировав файл /etc/modules.conf. Обычно это делается для создания псевдонимов (alias) для имен модулей и определения команд, которые должны быть запущены после загрузки модуля или перед его отключением. Однако, могут быть произведены и другие настройки. В Листинге 11 показан пример файла /etc/modules.conf. Более подробную информацию можно найти в странице man для modules.conf.


Листинг 11. Пример файла /etc/modules
                    
[root@lyrebird root]# cat /etc/modules.conf
alias eth0 e100
alias usb-controller usb-uhci
alias usb-controller1 ehci-hcd
alias sound-slot-0 i810_audio
post-install sound-slot-0 /bin/aumix-minimal -f /etc/.aumixrc -L >/dev/null 2>&1 || :
pre-remove sound-slot-0 /bin/aumix-minimal -f /etc/.aumixrc -S >/dev/null 2>&1 || :

Вы должны также знать, что некоторые системы используют другой конфигурационный файл, modprobe.conf, и есть системы, которые хранят информацию о конфигурации модулей в каталоге /etc/modules.d. В некоторых системах вы можете встретить файлы с названием /etc/modules. Эти файлы содержат имена модулей ядра, которые должны быть загружены в ходе загрузки системы.



В начало


Модули USB

Когда вы подключаете к работающей системе Linux устройство USB, ядро должно определить, какие модули необходимо загрузить для управления устройством. Обычно это делается при помощи hot-plug скрипта, использующего команду usbmodules для поиска соответствующего модуля. Вы можете также запустить команду usbmodules (от имени root). В Листинге 12 показан пример.


Листинг 12. Модули USB
                    
root@pinguino:~# lsusb
Bus 005 Device 004: ID 1058:0401 Western Digital Technologies, Inc.
Bus 005 Device 003: ID 054c:0220 Sony Corp.
Bus 005 Device 001: ID 0000:0000
Bus 004 Device 001: ID 0000:0000
Bus 003 Device 001: ID 0000:0000
Bus 002 Device 001: ID 0000:0000
Bus 001 Device 003: ID 04b3:310b IBM Corp. Red Wheel Mouse
Bus 001 Device 001: ID 0000:0000
root@pinguino:~# usbmodules --device /proc/bus/usb/005/003
usb-storage
root@pinguino:~# usbmodules --device /proc/bus/usb/001/003
usbmouse
usbhid

В следующем разделе показано, как собрать и настроить собственное ядро.



В начало



На предыдущую страницуСтраница 2 из 6 На предыдущую страницу
    IBM в России Конфиденциальность Контакты