Доброго времени, уважаемые читатели www.k-max.name!
Сегодня постараюсь максимально понятно и сжато рассказать о управлении ядром Linux/UNIX. В теме постараюсь разобрать, как: с помощью шелла получать информацию о ядре и модулях ядра, загружать и удалять модули ядра в ходе работы, узнать, нужен ли вообще подключенный/отключенный модуль, настраивать операционную систему для загрузки необходимых модулей.
Общая информация
В своих статьях о этапах загрузки Linux и работе процессов в Linux я уже затрагивал вопросы работы ядра операционной системы Linux. Ядро Linux — это основа ядро вашей системы. Ядро обеспечивает инфраструктуру для работы приложений и использования различных аппаратных средств. Это код низкого уровня, который взаимодействует с интерфейсами аппаратных средств, планирует и распределяет память и т.д.
Исторически, ядро Linux выпускается под определенной версией. То есть имеет определенную маркировку нумерацию. Нумерация версии ядра Linux на текущий момент содержит четыре числа, следуя недавнему изменению в долго используемой до этого политике схемы версий, основанной на трёх числах. Для иллюстрации допустим, что номер версии составлен таким образом: A. B. C [ .D ] (например 2.2.1, 2.4.13 или 2.6.12.3).
LPIC 101.1 Работа с железом в Linux. Часть первая — sysfs, devfs, udev
- Число A обозначает версию ядра. Оно изменяется менее часто и только тогда, когда вносятся значительные изменения в код и концепцию ядра. Оно изменялось дважды в истории ядра: в 1994 (версия 1.0) и в 1996 (версия 2.0).
- Число B обозначает старшую версию ревизии ядра. Чётные числа обозначают стабильные ревизии, то есть те, которые предназначены для промышленного использования, такие как 1.2, 2.4 или 2.6. Нечётные числа обозначают ревизии для разработчиков, такие как 1.1 или 2.5. Они предназначены для тестирования новых улучшений и драйверов до тех пор, пока они не станут достаточно стабильными для того, чтобы быть включёнными в стабильный выпуск.
- Число C обозначает младшую версию ревизии ядра. В старой трёхчисловой схеме нумерации, оно изменялось тогда, когда в ядро включались заплатки связанные с безопасностью, исправления ошибок, новые улучшения или драйверы. С новой политикой нумерации, однако, оно изменяется только тогда, когда вносятся новые драйверы или улучшения; небольшие исправления поддерживаются числом D.
- Число D впервые появилось после случая, когда в коде ядра версии 2.6.8 была обнаружена грубая, требующая незамедлительного исправления ошибка, связанная с NFS. Однако, было недостаточно других изменений, для того чтобы это послужило причиной для выпуска новой младшей ревизии (которой должна была стать 2.6.9). Поэтому была выпущена версия 2.6.8.1 с единственным исправлением в виде исправления для этой ошибки. С ядра 2.6.11, эта нумерация была адаптирована в качестве новой официальной политики версий. Исправления ошибок и заплатки безопасности теперь обозначаются с помощью четвёртого числа, тогда как большие изменения выполняются в изменениях младшей версии ревизии ядра (число C).
Как я уже говорил, ядро — это код низкого уровня, который взаимодействует с интерфейсами аппаратных средств и управляет системой на низшем уровне. В настоящее время существует громаднейшее количество разновидностей аппаратного обеспечения, файловых систем и остальных компонентов, с которыми взаимодействует ядро системы.
Скрытые модули в ядре Linux
Если поддержку всех мыслимых и не мыслимых аппаратных средств включить в ядро, то размер ядра вырастет до неподъемных величин. Для того чтобы ядро не занимало большого количества оперативной памяти и при этом оставалось универсальным, придумали — модули ядра. Модули ядра позволяют при необходимости загрузить обеспечивающее поддержку программное обеспечение, такое как драйверы для аппаратных средств или файловые системы. Это позволяет запускать систему с небольшим ядром и затем подгружать модули по мере необходимости. Часто эта подгрузка происходит автоматически, например, при подключении устройств USB.
Команды для выполнения задач загрузки и удаления модулей ядра требуют полномочий суперпользователя root. Команды, выдающие информацию о модулях, обычно могут быть выполнены обычным пользователем. Однако, в случае, если они расположены в каталоге /sbin, они будут недоступны для обычного пользователя, так как этот каталог не включается в путь поиска PATH. Таким образом, если вы не root, вам, вероятно, надо будет использовать полное наименование пути.
Просмотр информации о ядре и управление параметрами ядра (команды управления)
Просмотр общей информации о ядре (версии, имени ОС, аппаратная платформа и т.п.) производится с помощью команды uname.
Просмотреть список подключенных модулей в данный момент возможно с помощью команды lsmod:
Print-server:/tmp/123# lsmod Module Size Used by ipv6 235396 10 loop 12748 0 parport_pc 22500 0 parport 31084 1 parport_pc snd_pcm 62660 0 snd_timer 17800 1 snd_pcm snd 45636 2 snd_pcm,snd_timer soundcore 6368 1 snd snd_page_alloc 7816 1 snd_pcm psmouse 32336 0 serio_raw 4740 0 pcspkr 2432 0 i2c_piix4 7216 0 i2c_core 19828 1 i2c_piix4 ac 4196 0 button 6096 0 evdev 8000 0 ext3 105576 5 jbd 39476 1 ext3 mbcache 7108 1 ext3 sd_mod 22200 7 ide_cd_mod 27684 0 cdrom 30176 1 ide_cd_mod ata_generic 4676 0 ahci 23596 6 libata 140448 2 ata_generic,ahci scsi_mod 129548 2 sd_mod,libata dock 8304 1 libata e1000 102656 0 piix 6568 0 [permanent] ide_pci_generic 3908 0 [permanent] ide_core 96168 3 ide_cd_mod,piix,ide_pci_generic thermal 15228 0 processor 32576 1 thermal fan 4196 0 thermal_sys 10856 3 thermal,processor,fan
В приведенном примере видно, что в системе загружено множество модулей. Большинство из них поставляются вместе с ядром и имеют свободную лицензию. Бывают так же модули и проприетарные (например драйвера видеоадаптеров NVIDIA). Соответственно, модульный подход позволяет включать в ядро несвободные компоненты, если проприетарная лицензия позволяет это, что избавляет от необходимости получать данные модули от производителя железа.
В примере также можно видеть, что соответствующими модулями осуществляется поддержка таких устройств как видео, SATA, SCSI, дискеты и звуковые карты, а также сетевые устройства, например, IPV6, поддержка файловых систем, такой как ext3, и Remote Procedure Call (RPC) компании Sun.
Помимо имени модуля, команда lsmod показывает также размер, число пользователей модуля и имена пользователей.
Команда modinfo выдает информацию об одном или нескольких модулях.
kernel-server:/tmp/123$ /sbin/modinfo ipv6 filename: /lib/modules/2.6.26-2-686/kernel/net/ipv6/ipv6.ko alias: net-pf-10 license: GPL description: IPv6 protocol stack for Linux author: Cast of dozens depends: vermagic: 2.6.26-2-686 SMP mod_unload modversions 686
В приведенном примере видно, что команда modinfo показывает информацию о модуле ipv6, которая включает такие параметры как имя файла и путь, лицензия, описание, автор модуля и др. Параметры модуля могут различаться в зависимости от модуля.
Отдельно хотелось бы затронуть параметр filename, содержащий путь к файлу модуля и имя файла. Имя файла модуля ipv6 оканчивается на .ko, это говорит нам, что данный модуль относится к версии ядра 2.6. В более ранней версии ядра — 2.4, имена модулей оканчивались на .o). Как видно, модуль расположен в подкаталогах каталога /lib/modules/2.6.26-2-686/, в данном пути, каталог 2.6.26-2-686 соответствует версии ядра (а так же выводу команды uname -r, что активно используется в написании скриптов). Структура подкаталогов указанного каталога отражает взаимосвязь модулей ядра и назначения модулей, думаю пример ниже это наглядно покажет:
kernel-server:/tmp/123# ls -l /lib/modules/2.6.26-2-686/kernel/ итого 12 drwxr-xr-x 3 root root 1024 Окт 1 15:40 arch drwxr-xr-x 3 root root 4096 Окт 1 18:02 crypto drwxr-xr-x 54 root root 1024 Окт 1 15:40 drivers drwxr-xr-x 51 root root 3072 Окт 1 18:02 fs drwxr-xr-x 6 root root 1024 Окт 1 18:02 lib drwxr-xr-x 37 root root 1024 Окт 1 15:40 net drwxr-xr-x 11 root root 1024 Окт 1 18:02 sound
В примере видно, что модули ядра расположены по подкаталогам: fs, что наводит на мысль, что тут расположены модули файловой системы, sound — модули звуковых карт и так далее.
Как же нам узнать, какие модули ядра нужны, а какие можно удалить?
А все просто: если счетчик Used By равен нулю, то модуль ядра никем и ничем не используется. Соответственно, его можно удалить.
Удаление модуля ядра происходит командой rmmod module_name.
Удаленный модуль может понадобиться в процессе работы, для загрузки модуля необходимо выполнить команду: insmod /path/to/module.ko
Интересный пример использования insmod в купе с другими командами:
[[email protected] test]# uname -r 2.6.27-ovz-smp-alt9 [[email protected] test]# insmod /lib/modules/`uname -r`/kernel/drivers/block/floppy.ko [[email protected] test]# rmmod floppy [[email protected] test]# modinfo -F filename floppy /lib/modules/2.6.27-ovz-smp-alt9/kernel/drivers/block/floppy.ko [[email protected] test]# insmod $(modinfo -F filename floppy) [[email protected] test]# lsmod | grep floppy floppy 58244 0
Существует так же и другая команда для управления модулями: modprobe. Особенность данной команды в том, что она удаляет/добавляет модули с учетом зависимостей между модулями (зависимости между модулями прописаны в файле /lib/modules/версия/modules.dep). Пример использования:
[[email protected] root]# modprobe -r vfat vfat: Device or resource busy [[email protected] root]# lsmod | grep fat vfat 13132 1 fat 38744 1 [vfat] [[email protected] root]# umount /windows/D [[email protected] root]# modprobe -r vfat [[email protected] 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 [[email protected] root]# lsmod | grep fat [[email protected] 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 [[email protected] root]# lsmod | grep fat vfat 13132 0 (unused) fat 38744 0 [vfat]
Как уже выше было сказано, модули ядра имеют зависимости друг от друга, которые прописаны в файле /lib/modules/версия/modules.dep. Данный файл формируется командой depmod , которая при выполнении просматривает структуру каталогов /lib/modules/текущая_версия_ядра/ и формирует информацию о зависимостях.
Так же хочу отметить, что в Linux существует конфигурационный файл /etc/modules.conf, к которому обращается и modprobe и debmod. Данный файл в большинстве своем используется для корректировки алиасов модулей. Некоторые ОС используют другие конфигурационные файлы, таки как /etc/modprobe.conf или каталог с конфигурационными файлами — /etc/modprobe.d/.
Еще отличным источником информации о действующем ядре Linux является файл конфигурации ядра, который расположен в /boot/config-2.6. Используя команду grep можно получить достаточно информации (например, поддерживает ли ядро файловую систему cifs):
samba-server:~# grep CONFIG_SMB_FS /boot/config-2.6.32-5-686 # CONFIG_SMB_FS is not set samba-server:~# grep CONFIG_CIFS /boot/config-2.6.32-5-686 CONFIG_CIFS=m # CONFIG_CIFS_STATS is not set CONFIG_CIFS_WEAK_PW_HASH=y CONFIG_CIFS_UPCALL=y CONFIG_CIFS_XATTR=y CONFIG_CIFS_POSIX=y # CONFIG_CIFS_DEBUG2 is not set CONFIG_CIFS_DFS_UPCALL=y CONFIG_CIFS_EXPERIMENTAL=y
На сегодня все. Как всегда — буду очень рад Вашим комментариям! В следующей статье, посвященной ядру Linux мы научимся собирать свое ядро.
Другие материалы в категории Linux
- Репликация Mysql (master-slave, master-master)
- Ошибка 0x80004005 0x80070035 на Windows 10 при доступе к сетевой папке
- Текстовый редактор VIM, основы работы
- Спринт Lingoda (ex Марафон Lingoda) + промокод.
- ddrescue или спасаем данные с HDD
- Бесплатный SLES для Vmware – ВСЁ…
- Резервное копирование файлов сайта по ssh
- SQUID настройка ACL и http_access
- squid, использование опции debug_options или диагностика компонентов squid
- Седьмой релиз Debian
Источник: www.k-max.name
Команда Rmmod в Linux
Основным компонентом каждой операционной системы Linux является ядро Linux. Он управляет ресурсами системы и действует как посредник между аппаратным и программным обеспечением компьютера.
Ядро Linux — это программное обеспечение, имеющее модульную конструкцию. Модуль ядра, или часто называемый драйвером, — это фрагмент кода, расширяющий функциональность ядра. Модули могут быть скомпилированы как загружаемые модули или встроены в ядро. Загружаемые модули могут динамически загружаться и выгружаться в работающем ядре по запросу без необходимости перезагрузки системы.
В этой статье мы поговорим о том, как использовать команду rmmod для удаления модулей из ядра Linux.
Команда rmmod
Общий синтаксис команды rmmod (удалить модуль) следующий:
rmmod [OPTIONS] MODULE_NAME.
В современных системах Linux rmmod является частью kmod , двоичного kmod , который реализует несколько программ, используемых для управления модулями ядра Linux.
Только пользователи с административными привилегиями могут удалять модули.
Вы можете распечатать список всех модулей, загруженных в вашу систему, с lsmod команды lsmod . Модули ядра хранятся в каталоге /lib/modules/ .
Удалить модуль с помощью команды rmmod довольно просто; просто вызовите команду, за которой следует имя модуля:
rmmod module_name
Команда выводит сообщение, только если что-то пойдет не так. Например, если другой модуль использует этот модуль, команда напечатает что-то вроде этого:
rmmod: ERROR: Module module_name is in use by: module_name_2
Чтобы отобразить информацию о том, что делает команда, используйте параметр -v ( —verbose ).
Если вы хотите удалить модуль, который используется или не предназначен для удаления, вызовите команду с параметром -f ( —verbose ). Использование этой опции чрезвычайно опасно, поскольку может вызвать сбой системы.
rmmod также принимает несколько модулей в качестве аргументов:
rmmod module_name1 module_name2
Предотвратить загрузку модуля ядра во время загрузки
Когда модуль удаляется с помощью команды rmmod , он остается незагруженным до перезагрузки системы. При следующей загрузке системы будет загружен удаленный модуль.
Чтобы навсегда отключить загрузку модуля ядра во время загрузки, создайте файл .conf с любым именем внутри /etc/modprobe.d . Синтаксис:
/etc/modprobe.d/blacklist.conf
blacklist module_name
Если вы хотите внести в черный список дополнительные модули, укажите модули в новой строке или создайте новый файл .conf .
Выводы
Команда rmmod используется для удаления модулей ядра Linux. Как правило, большинство пользователей Linux используют команду modprobe -r вместо rmmod .
Не стесняйтесь оставлять комментарии, если у вас есть вопросы.
Источник: routerus.com
Управление модулями ядра Linux
Я дро Linux — это ядро операционной системы Linux. Он содержит основные компоненты для работы с оборудованием и обеспечивает связь и взаимодействие между пользователем и оборудованием. Ядро Linux — это не монолитная система, но довольно гибкая, и ядро расширено так называемыми модулями ядра.
Что такое модуль ядра?
В общем, модуль ядра — это «фрагмент кода, который может быть загружен и выгружен в ядро по запросу. Они расширяют функциональные возможности ядра без перезагрузки системы». Это приводит к очень большой гибкости во время работы.
Кроме того, «модуль ядра может быть настроен как встроенный или загружаемый. Чтобы динамически загружать или удалять модуль, он должен быть настроен как загружаемый модуль в конфигурации ядра». Это делается в исходном файле ядра /usr/src/linux/.config. Встроенные модули отмечены буквой «y», а загружаемые модули — буквой «m». В качестве примера листинг 1 демонстрирует это для модуля SCSI:
Листинг 1: Объявление использования модуля SCSI
CONFIG_SCSI=y # встроенный модуль CONFIG_SCSI=m # загружаемый модуль # CONFIG_SCSI # переменная не установлена