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

developerWorks Россия  >  Linux  >

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

Администрирование, средний уровень (LPIC-2) тема 201

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

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

Обсудить


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

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


Настройка ядра

В этом разделе мы рассматриваем материал по теме 2.201.4 экзамена 201 Администрирование, средний уровень (LPIC-2). Рейтинг темы 1.

О настройке

Настройка ядра описана в разделе этого пособия, рассказывающем о сборке ядра (точнее, в опциях make [x|menu]config). Когда базовое ядро и его модули собраны, вы можете включить или отменить возможности ядра в порядке подключения дополнительных возможностей, запуска различных профилей и подключения памяти.

В этом разделе рассматриваются способы изменения поведения ядра в ходе работы системы.



В начало


Поиск информации о загруженном ядре

Linux (и другие UNIX-подобные операционные системы) использует специальные, как правило совместимые способы хранения информации о загруженном ядре (или других запущенных процессах). Специальный каталог /proc/ содержит псевдо-файлы и подкаталоги, содержащие массу информации о загруженной системе.

В ходе работы системы Linux каждый процесс создает подкаталог со своим номером, каждый из которых содержит несколько статусных файлов. Здесь хранятся сводные данные о командах пользовательских уровней и системных средствах, но основная часть данных расположена в каталоге файловой системы /proc/.

Специфические данные, касающиеся статуса самого ядра, находятся в каталоге /proc/sys/kernel.



В начало


Подробнее о текущих процессах

Хотя статус процессов, особенно пользовательских, не имеет отношения к ядру как таковому, важно иметь о них представление, если вы намерены заниматься отладкой основного ядра. Простейший способ получить сводку процессов -- выполнить команду ps (также существуют графические средства). Зная ID процесса, вы можете исследовать запущенный процесс. Например:


Листинг 5. Исследование запущенного процесса
                    
   % ps
     PID TTY          TIME CMD
   16961 pts/2    00:00:00 bash
   17239 pts/2    00:00:00 ps
   % ls /proc/16961
   binfmt   cwd@     exe@  maps  mounts  stat   status
   cmdline  environ  fd/   mem   root@   statm

В этом пособии не будет исследоваться вся информация, содержащаяся в псевдо-файлах процессов. Для примера приведен фрагмент файла status:


Листинг 6. Фрагмент псевдо-файла status
                    
   $ head -12 /proc/17268/status
   Name:   bash
   State:  S (sleeping)
   Tgid:   17268
   Pid:    17268
   PPid:   17266
   TracerPid:      0
   Uid:    0       0       0       0
   Gid:    0       0       0       0
   FDSize: 256
   Groups: 0
   VmSize:     2640 kB
   VmLck:         0 kB



В начало


Процессы ядра

Каталог /proc/ наряду с данными о пользовательских процессах содержит полезную информацию о загруженном ядре. Особенно важен каталог /proc/sys/kernel/:


Листинг 7. Каталог /proc/sys/kernel/
                    
   % ls /proc/sys/kernel/
   acct           domainname  msgmni       printk         shmall   threads-max
   cad_pid        hostname    osrelease    random/        shmmax   version
   cap-bound      hotplug     ostype       real-root-dev  shmmni
   core_pattern   modprobe    overflowgid  rtsig-max      swsusp
   core_uses_pid  msgmax      overflowuid  rtsig-nr       sysrq
   ctrl-alt-del   msgmnb      panic        sem            tainted

Содержимое этих псевдо-файлов отображает информацию о загруженном ядре. Например:


Листинг 8. Просмотр псевдо-файла ostype
                    
   % cat /proc/sys/kernel/ostype
   Linux
   % cat /proc/sys/kernel/threads-max
   4095



В начало


Уже загруженные модули ядра

Как и другая информация о запущенной системе Linux, данные о загруженном ядре хранятся в каталоге файловой системы /proc/, точнее в каталоге /proc/modules. Однако, как правило, доступ к этим данным можно получить при помощи утилиты lsmod (которая просто показывает заголовки необработанного содержимого файла /proc/modules); команда cat /proc/modules выведет такую же информацию. Рассмотрим пример:


Листинг 9. Содержимое файла /proc/modules
                    
   % lsmod
   Module                  Size  Used by    Not tainted
   lp                      8096   0
   parport_pc             25096   1
   parport                34176   1  [lp parport_pc]
   sg                     34636   0  (autoclean) (unused)
   st                     29488   0  (autoclean) (unused)
   sr_mod                 16920   0  (autoclean) (unused)
   sd_mod                 13100   0  (autoclean) (unused)
   scsi_mod              103284   4  (autoclean) [sg st sr_mod sd_mod]
   ide-cd                 33856   0  (autoclean)
   cdrom                  31648   0  (autoclean) [sr_mod ide-cd]
   nfsd                   74256   8  (autoclean)
   af_packet              14952   1  (autoclean)
   ip_vs                  83192   0  (autoclean)
   floppy                 55132   0
   8139too                17160   1  (autoclean)
   mii                     3832   0  (autoclean) [8139too]
   supermount             15296   2  (autoclean)
   usb-uhci               24652   0  (unused)
   usbcore                72992   1  [usb-uhci]
   rtc                     8060   0  (autoclean)
   ext3                   59916   2
   jbd                    38972   2  [ext3]



В начало


Загрузка дополнительных модулей ядра

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

Например, предположим, вы хотите загрузить в ядро возможность поддержки Reiser file system (надеюсь, она еще не встроена в ядро). Вы можете использовать опцию modprobe -nv, чтобы просто посмотреть, что сделала бы команда, но на самом деле ничего не загружать:


Листинг 10. Проверка зависимостей при помощи modprobe
                    
   %  modprobe -nv reiserfs
   /sbin/insmod /lib/modules/2.4.21-0.13mdk/kernel/fs/reiserfs/reiserfs.o.gz

В нашем случае зависимостей нет. В других случаях они могут быть (и их придется урегулировать вручную, если использовать команду modprobe без опции -n). Пример:


Листинг 11. Еще один вывод команды modprobe
                    
   % modprobe -nv snd-emux-synth
   /sbin/insmod /lib/modules/2.4.21-0.13mdk/kernel/drivers/sound/
      soundcore.o.gz
   /sbin/insmod /lib/modules/2.4.21-0.13mdk/kernel/sound/core/
      snd.o.gz
   /sbin/insmod /lib/modules/2.4.21-0.13mdk/kernel/sound/synth/
      snd-util-mem.o.gz
   /sbin/insmod /lib/modules/2.4.21-0.13mdk/kernel/sound/core/seq/
      snd-seq-device.o.gz
   /sbin/insmod /lib/modules/2.4.21-0.13mdk/kernel/sound/core/
      snd-timer.o.gz
   /sbin/insmod /lib/modules/2.4.21-0.13mdk/kernel/sound/core/seq/
      snd-seq.o.gz
   /sbin/insmod /lib/modules/2.4.21-0.13mdk/kernel/sound/core/seq/
      snd-seq-midi-event.o.gz
   /sbin/insmod /lib/modules/2.4.21-0.13mdk/kernel/sound/core/
      snd-rawmidi.o.gz
   /sbin/insmod /lib/modules/2.4.21-0.13mdk/kernel/sound/core/seq/
      snd-seq-virmidi.o.gz
   /sbin/insmod /lib/modules/2.4.21-0.13mdk/kernel/sound/core/seq/
      snd-seq-midi-emul.o.gz
   /sbin/insmod /lib/modules/2.4.21-0.13mdk/kernel/sound/synth/emux/
      snd-emux-synth.o.gz

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

На основании вышеизложенного вы могли сделать предположение, что надо запустить, например, insmod snd-emux-synth. Но если сделать это без предварительной загрузки зависимостей, вы получите сообщение о "неразрешенных символах" ("unresolved symbols"). Давайте попробуем вместо этого использовать Reiser file system:


Листинг 12. Загрузка модуля ядра
                    
   % insmod reiserfs
   Using /lib/modules/2.4.21-0.13mdk/kernel/fs/reiserfs/reiserfs.o.gz

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



В начало


Удаление загруженных модулей ядра

Выгрузка модулей, как и их загрузка, может быть выполнена при помощи высокоуровневой команды modprobe или низкоуровневой rmmod. Инструмент высокого уровня осуществляет выгрузку в обратном порядке. Команда rmmod просто удаляет отдельный модуль ядра, но может не справиться с этой задачей, если модуль используется (обычно из-за зависимостей). Например:


Листинг 13. Попытка выгрузки модулей, имеющих зависимости
                    
   % modprobe snd-emux-synth
   % rmmod soundcore
   soundcore: Device or resource busy
   % modprobe -rv snd-emux-synth
   # delete snd-emux-synth
   # delete snd-seq-midi-emul
   # delete snd-seq-virmidi
   # delete snd-rawmidi
   # delete snd-seq-midi-event
   # delete snd-seq
   # delete snd-timer
   # delete snd-seq-device
   # delete snd-util-mem
   # delete snd
   # delete soundcore

Однако, если ничто не препятствует удалению модуля, команда rmmod выгрузит его из памяти. Например:


Листинг 14. Выгрузка модулей, не имеющих зависимостей
                    
   % rmmod -v reiserfs
   Checking reiserfs for persistent data



В начало


Автоматическая загрузка модулей ядра

При желании вы можете заставить модули ядра загружаться автоматически, воспользовавшись загрузчиком модулей ядра, входящим в последние версии Linux, или демоном kerneld в более старых версиях. Если вы используете эти приемы, в случае, если ядро обнаружит, что к нему обращаются через неподдерживаемые специфические системные вызовы, оно попытается загрузить соответствующий модуль ядра.

Однако, за исключением систем с недостаточным количеством памяти, обычно нет причин отказываться от загрузки необходимых модулей ядра в процессе загрузки системы (подробнее об этом рассказывается в следующем учебном пособии). Загрузчик модулей ядра включен в некоторые дистрибутивы.



В начало


Автоматическая выгрузка модулей ядра

Наряду с автоматической загрузкой возможна и автоматическая выгрузка модулей, в основном в системах с недостаточным количеством памяти, например, встроенных системах Linux. Однако, следует знать, что модули ядра могут быть загружены с опцией insmod --autoclean, которая помечает их как незагруженные, если они не используются в данное время.

Раньше демон kerneld периодически вызывал команду rmmod --all для удаления неиспользуемых модулей ядра. В особых случаях (если не используется демон kerneld, не входящий в свежие системы Linux), можно добавить в crontab команду rmmod --all, запускаемую примерно раз в минуту. Но обычно это бывает лишним, поскольку модули ядра как правило используют намного меньше памяти, чем типичные пользовательские процессы.



В начало



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