Перейти к тексту

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

При первом входе в developerWorks для Вас будет создан профиль. Выберите информацию отображаемую в Вашем профиле — скрыть или отобразить поля можно в любой момент.

Вся введенная информация защищена.

  • Закрыть [x]

При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

Вся введенная информация защищена.

  • Закрыть [x]

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

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

Дэвид Мерц, автор, Gnosis Software, Inc.
Дэвид Мерц (David Mertz) - большой знаток в области открытых стандартов и только умеренно пугает многословием. С Дэвидом можно связаться по mertz@gnosis.cx его жизнь описывается более подробно на http://gnosis.cx/dW/. Предложения и комментарии по этой, предыдущей или будущей статьям приветствуются. Также вы можете посмотреть книгу Дэвида Text Processing in Python.

Описание:  В этом учебном пособии Дэвид Мерц начинает готовить вас к сдаче экзамена 201 Linux Professional Institute® Администрирование, средний уровень (LPIC-2). Из этого первого из восьми пособий вы узнаете, как разбираться в текстах ядра Linux™, научитесь компилировать и настраивать ядро.

Больше статей из этой серии

Дата:  20.09.2005 (Опубликовано: 29.08.2005)
Уровень сложности:  средний

Активность:  8275 просмотров
Комментарии:  

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

В этом разделе мы рассматриваем материал по теме 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 из 7 | предыдущая | следующая

Комментарии



static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Linux
ArticleID=176246
TutorialTitle=Экзамен LPI 201: Ядро Linux
publish-date=09202005
author1-email=mailto:mertz@gnosis.cx?subject=Program with SVG&cc=dwxed@us.ibm.com
author1-email-cc=

Теги

Help
Используйте форму поиска, чтобы найти любой контент с данным тегом в My developerWorks. Используйте ползунок, чтобы отразить больше или меньше тегов.

КнопкаПопулярные теги отображает самые распространенные теги для данной области контента (например: Java, Linux, WebSphere).

Кнопка Мои теги отображает Ваши теги для данной области контента (например: Java, Linux, WebSphere).

Используйте форму поиска, чтобы найти любой контент с данным тегом в My developerWorks. Кнопка Популярные теги отображает самые распространенные теги для данной области контента (например: Java, Linux, WebSphere). Кнопка Мои теги отображает Ваши теги для данной области контента (например: Java, Linux, WebSphere).