Введение
В этой лабораторной работе вы освоите основные методы управления модулями ядра в среде Linux. Вы изучите, как просматривать список текущих загруженных модулей для анализа активных компонентов системы, а также научитесь проверять отдельные модули, чтобы понять их назначение, зависимости и другие параметры.
Опираясь на эти навыки, вы попрактикуетесь в динамической выгрузке и загрузке модулей в работающее ядро. Наконец, вы узнаете, как настроить систему на автоматическую загрузку определенного модуля ядра при включении компьютера, что гарантирует наличие необходимых функций без ручного вмешательства после перезагрузки.
Просмотр и проверка модулей ядра с помощью lsmod и modinfo
На этом этапе вы научитесь выводить список загруженных в данный момент модулей ядра и изучать информацию о них. Ядро Linux является модульным, что означает возможность загрузки или выгрузки частей его функциональности по требованию. Эти динамически загружаемые части называются модулями ядра; часто они представляют собой драйверы устройств, драйверы файловых систем или системные вызовы.
Для начала давайте посмотрим состояние всех модулей ядра, загруженных в данный момент. Команда lsmod предоставляет чистый и читаемый список. Поскольку список может быть довольно длинным, мы перенаправим его вывод в утилиту less для удобной навигации.
Выполните следующую команду в терминале:
lsmod | less
Вы увидите список модулей. Вывод организован в три колонки: Module, Size и Used by.
- Module: Имя модуля ядра.
- Size: Размер модуля в байтах.
- Used by: Количество других модулей или процессов, использующих данный модуль в данный момент, а также список зависимых модулей.
Ваш вывод будет выглядеть примерно так:
Module Size Used by
nls_iso8859_1 16384 1
nls_cp437 20480 1
vfat 20480 1
fat 69632 1 vfat
...
Вы можете прокручивать список с помощью клавиш со стрелками. Нажмите q, чтобы выйти из режима просмотра less и вернуться к командной строке.
Теперь, когда вы знаете, как просматривать список модулей, давайте получим подробную информацию о конкретном модуле. Команда modinfo отображает различные сведения о модуле ядра, такие как имя файла, лицензия, описание, автор и зависимости.
Давайте проверим модуль parport, который связан с параллельным портом.
modinfo parport
Команда отобразит подробную информацию о модуле parport.
filename: /lib/modules/x.x.x-xx-generic/kernel/drivers/parport/parport.ko
license: GPL
description: Parallel port driver
author: Philip Blundell, Tim Waugh, Grant Grundler
srcversion: <some_version_string>
depends:
retpoline: Y
intree: Y
vermagic: x.x.x-xx-generic SMP mod_unload
sig_id: ...
signer: ...
sig_key: ...
sig_hashalgo: ...
signature: ...
Этот вывод показывает точное расположение файла модуля (файл .ko), его лицензию, краткое описание и многое другое. Обратите внимание, что поле depends пустое — это означает, что у данного модуля нет зависимостей.
Модули часто полагаются на другие модули. Команда depmod создает список зависимостей модулей, анализируя файлы в директории /lib/modules/$(uname -r). Это позволяет системе автоматически загружать необходимые модули. Давайте сгенерируем этот файл зависимостей. Эта команда требует прав суперпользователя, поэтому мы будем использовать sudo.
sudo depmod
Обычно эта команда не выводит ничего при успешном завершении. Она создает или обновляет файл с именем modules.dep в директории модулей ядра. Часть пути $(uname -r) — это подстановка команды, которая вставляет версию вашего текущего ядра.
Теперь давайте посмотрим на файл зависимостей, который вы только что создали.
less /lib/modules/$(uname -r)/modules.dep
Этот файл содержит список модулей и их зависимостей, который используется инструментами для автоматического управления модулями. Нажмите q, чтобы выйти из less.
Выгрузка модуля ядра с помощью rmmod
На этом этапе вы научитесь выгружать модуль из работающего ядра с помощью команды rmmod. Выгрузка модулей может быть полезна для устранения неполадок с оборудованием, освобождения системной памяти или в случаях, когда модуль больше не нужен. Важно отметить, что вы можете выгружать только те модули, которые в данный момент не используются системой или другими модулями.
Продолжим работу с модулем joydev, который обеспечивает поддержку джойстиков. Сначала проверим, загружен ли этот модуль. Мы можем использовать lsmod в сочетании с grep для фильтрации вывода.
lsmod | grep joydev
Если модуль загружен, вы увидите вывод, похожий на этот. Точный размер может отличаться.
joydev 24576 0
Цифра 0 в колонке Used by указывает на то, что модуль загружен, но в данный момент не используется ни одним процессом или другим модулем. Это делает его безопасным кандидатом для удаления. Если бы это число было больше нуля, команда rmmod, скорее всего, завершилась бы ошибкой, предотвращая выгрузку модуля, от которого зависит работа системы.
Теперь удалим модуль joydev. Поскольку это действие изменяет работающее ядро, требуются права суперпользователя, которые мы получим через sudo.
sudo rmmod joydev
Команда rmmod обычно не выводит никаких сообщений в случае успеха. Чтобы подтвердить, что модуль был успешно выгружен, снова выполните команду lsmod | grep joydev.
lsmod | grep joydev
На этот раз команда не должна ничего вывести. Отсутствие вывода является подтверждением того, что модуль joydev больше не загружен в ядре.
Загрузка модуля ядра с помощью insmod
На этом этапе вы научитесь вручную загружать модуль в работающее ядро с помощью команды insmod. Это действие, противоположное rmmod. Хотя современные системы часто используют более продвинутый инструмент modprobe, который автоматически обрабатывает зависимости, понимание работы insmod фундаментально для изучения механизмов ядра.
На предыдущем этапе вы выгрузили модуль joydev. Теперь мы загрузим его обратно. Команда insmod требует указания полного пути к объектному файлу модуля, который имеет расширение .ko (Kernel Object).
Стандартная директория для модулей ядра — /lib/modules/$(uname -r)/kernel/, где $(uname -r) заменяется на версию вашего текущего ядра. Модуль joydev обычно находится в поддиректории drivers/input/.
Загрузим модуль joydev, указав полный путь. Эта операция требует прав суперпользователя.
sudo insmod /lib/modules/$(uname -r)/kernel/drivers/input/joydev.ko
Как и rmmod, команда insmod не выводит ничего при успешном выполнении.
Чтобы убедиться, что модуль загружен, снова воспользуйтесь командой lsmod | grep joydev.
lsmod | grep joydev
После выполнения команды вы должны увидеть модуль joydev в списке, что подтверждает его успешную загрузку обратно в ядро.
joydev 24576 0
Настройка автоматической загрузки модуля ядра при загрузке системы
На этом этапе вы узнаете, как сделать так, чтобы модуль ядра загружался автоматически при каждом запуске системы. Ручная загрузка модулей с помощью insmod является временной и не сохраняется после перезагрузки. Чтобы изменения стали постоянными, необходимо настроить систему на загрузку модуля в процессе загрузки ОС.
В современных системах Linux, использующих systemd, стандартным способом автоматической загрузки модулей является добавление конфигурационного файла в директорию /etc/modules-load.d/. Любой файл в этой директории с расширением .conf будет прочитан, и система попытается загрузить каждый модуль, указанный внутри (по одному на строку).
Давайте настроим модуль joydev на автоматическую загрузку. Мы создадим файл с именем joydev.conf внутри /etc/modules-load.d/ и добавим в него слово joydev. Это можно сделать одной командой, используя echo и tee с sudo.
echo joydev | sudo tee /etc/modules-load.d/joydev.conf
Эта команда работает следующим образом:
echo joydevвыводит текст 'joydev'.- Символ конвейера
|передает этот текст на вход следующей команде. sudo tee /etc/modules-load.d/joydev.confпринимает текст. Командаteeзаписывает полученные данные в указанный файл (/etc/modules-load.d/joydev.conf), а также отображает их на экране. Мы используемsudo, так как эта директория защищена и требует прав суперпользователя для записи.
Вы увидите следующий вывод, который представляет собой содержимое, записываемое в файл:
joydev
Чтобы убедиться, что файл был создан правильно, можно вывести его содержимое с помощью команды cat:
cat /etc/modules-load.d/joydev.conf
Выводом должно быть имя модуля, который вы только что добавили:
joydev
Теперь при каждой загрузке системы модуль joydev будет загружаться автоматически. Вы успешно настроили постоянную загрузку модуля.
Резюме
В этой лабораторной работе вы изучили основные операции по управлению модулями ядра в среде Linux. Вы попрактиковались в выводе списка всех загруженных модулей с помощью команды lsmod и изучении подробной информации о конкретном модуле, такой как имя файла и описание, с помощью команды modinfo.
Вы также получили практический опыт динамического изменения ядра путем выгрузки модуля с помощью rmmod и его загрузки с помощью insmod. Наконец, вы научились настраивать автоматическую загрузку модуля при старте системы, гарантируя, что необходимые драйверы или функции будут доступны после перезагрузки. Эти навыки имеют решающее значение для эффективного управления драйверами устройств и возможностями ядра.



