- Модули ядра Linux
- Модули ядра Linux
- Все модули
- Что загружено?
- Запуск модулей ядра
- Удаление модулей ядра
- Блокирование загрузки модулей
- Автозагрузка модулей
- Установка модулей ядра Linux
- Выводы
- How To Use The Modprobe Command In Linux
- modprobe Command Syntax Explained
- Options for modprobe Command
- Management Options
- Query Options
- General Options
- Examples of modprobe Command
- Adding Kernel Modules With modprobe Command
- Removing Kernel Modules With modprobe Command
Модули ядра Linux
Как вы знаете из статьи что такое ядро Linux, ядро является монолитным. Это значит, что весь исполняемый код сосредоточен в одном файле. Такая архитектура имеет некоторые недостатки, например, невозможность установки новых драйверов без пересборки ядра. Но разработчики нашли решение и этой проблеме, добавив систему модулей.
Ядро Linux позволяет драйверам оборудования, файловых систем, и некоторым другим компонентам быть скомпилированными отдельно — как модули, а не как часть самого ядра. Таким образом, вы можете обновлять драйвера не пересобирая ядро, а также динамически расширять его функциональность. А еще это значит, что вы можете включить в ядре только самое необходимое, а все остальное подключать с помощью модулей. Это очень просто.
Модули ядра Linux
В этой статье мы рассмотрим модули ядра Linux, основы работы с ними, просмотр уже загруженных модулей, загрузку, установку и отключение модулей. А также полное отключение, добавление в черный список и добавление новых модулей ядра.
Модули ядра Linux собираются только под определенную версию ядра, есть способ запуска модуля независимо от версии ядра, если они совместимы с помощью dkms, но об этом мы поговорим позже.
Находятся все модули в папке /lib/modules/. Учитывая, что модули рассчитаны только для определенной версии ядра, то в этой папке создается отдельная подпапка, для каждой установленной в системе версии ядра. В этой папке находятся сами модули и дополнительные конфигурационные файлы, модули отсортированы по категориям, в зависимости от назначения например:
Перед тем как переходить к практике, давайте коротко рассмотрим основные команды для управления модулями.
- lsmod — посмотреть загруженные модули
- modinfo — информация о модуле
- insmod — загрузить модуль
- rmmod — удалить модуль
Работа с модулями ядра Linux выполняется, в основном, с помощью этих команд, но могут использовать и другие.
Все модули
Такая задача возникает нечасто, но если вы хотите посмотреть все установленные модули ядра Linux в системе, делается очень просто. Все модули расположены в папке /lib/modules, а поэтому очень просто вычислить их все одной командой, или даже просто зайти в папку файловым менеджером и посмотреть.
В Ubuntu команда будет выглядеть вот так:
dpkg -S *.ko | grep /lib/modules
Можно смастерить такую конструкцию с помощью find:
Можем искать только для текущего ядра:
find /lib/modules/$(uname -r) -name *.ko
Также, все модули записаны в конфигурационном файле /lib/modules/modules.aliases, поэтому мы можем просто посмотреть его содержимое:
Если хотим проверить установлен ли определенный модуль ядра Linux, отфильтруем вывод любой из команд с помощью grep:
find /lib/modules -name *.ko | grep vbox
Что загружено?
Все информация о загруженных модулях хранится в файле /proc/modules, мы можем ее вывести командой:
Но для этого дела есть более цивилизованные методы. Это утилита lsmod и modinfo. Чтобы посмотреть загруженные модули ядра linux выполните:
Удобно проверять загружен ли модуль с помощью grep:
А более подробную информацию о каждом модуле можно получить с помощью утилиты modinfo:
Здесь вы можете увидеть файл модуля, его лицензию, автора и зависимости. Зависимости — это те модули, которые должны быть загружены для его нормальной работы. К сожалению, не для всех модулей доступно нормальное описание, но вы можете попробовать посмотреть описание зависимостей модуля.
Запуск модулей ядра
Загрузить модуль ядра Linux можно с помощью команд modprobe или insmod. Например, загрузим модуль vboxdrv
Чтобы загрузить модуль ядра linux с помощью insmod необходимо передать адрес файла модуля:
sudo insmod /lib/modules/4.1.20-11-default/weak-updates/misc/vboxdrv.ko
Напоминаю, что его можно узнать с помощью команды modinfo. Запуск модуля ядра Linux предпочтительно выполнять с помощью modprobe, поскольку эта команда не только находит файл модуля в файловой системе, но и загружает все его зависимости.
Удаление модулей ядра
Здесь аналогично две команды — modprobe, позволяет удалить модуль если ей передать опцию -r, а также есть команда rmmod. Начнем с modprobe:
Другая команда в этом случае выглядит немного проще:
Если вы получили ошибку во время выгрузки модуля, например: rmmod: ERROR: Module vboxdrv is in use by: vboxnetadp vboxnetflt, значит он еще используется другими модулями, и сначала нужно выгрузить их. В данном случае это vboxnetadp и vboxnetflt. Правильно отработавшая команда не должна ничего возвращать.
rmmod vboxnetadp vboxnetflt
Блокирование загрузки модулей
Иногда, во время загрузки системы для используемых нами устройств, загружаются не те модули ядра Linux, они либо не поддерживают нужную функциональность либо конфликтуют с другими модулями. Ярким примером можно назвать загрузку драйвера b43 вместо brcmsmac для беспроводных адаптеров Broadcom. Чтобы решить эту проблему вы можете добавлять модули в черный список. Для этого достаточно добавить одну строчку в файл /etc/modprobe.d/blacklist.conf:
sudo vi /etc/modprobe.d/blacklist.conf
Этот код добавит в черный список модуль b43.
Автозагрузка модулей
Кроме чёрного списка существует отдельный каталог, в котором можно настроить автоматическую загрузку модулей при старте системы. Это /etc/modules.load.d/. Этот каталог тоже содержит конфигурационные файлы с расширением *.conf, в которых перечислены все модули, которые надо загружать при старте системы. Для добавления своего модуля можно воспользоваться файлом /etc/modules.load.d/modules.conf. Например, добавим brcmsmac:
sudo vi /etc/modules.load.d/modules.conf
Установка модулей ядра Linux
Собранные для этой версии ядра модули вы можете просто скопировать в нужную папку, собственно, мы так и поступаем, когда собираем ядро из исходников. Но с проприетарными драйверами и другими внешними драйверами, не поставляемыми в комплекте с ядром дело обстоит иначе. Эти модули поддерживают несколько версий ядра, но для их установки используется специальная технология — DKMS (Dynamic Kernel Module Support). Причем модуль, установленный таким образом один раз, будет пересобираться для каждой новой версии ядра автоматически. Обычно такие модули поставляются в виде пакетов, которые устанавливаются как и все другие приложения пакетным менеджером. Ручная установка модулей с помощью dkms выходит за рамки данной статьи.
Выводы
Скорее всего, вам редко придется возиться с этими модулями. Но работа с модулями ядра будет необходима, если ваш дистрибутив не поддерживает аппаратное обеспечение вашего устройства из коробки, а также когда вы работаете со сторонним программным обеспечением, таким как VirtualBox, Vmware и т д. Но очень полезно знать как обращаться с модулями, когда вам нужно добавить или удалить их. Даже если у вас нет необходимости в этом сейчас, вы можете протестировать, как все работает, чтобы быть вооруженным потом.
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.
How To Use The Modprobe Command In Linux
The Linux kernel has a modular design. Functionality is extendible with modules or drivers. Use the modprobe command to add or remove modules on Linux. The command works intelligently and adds any dependent modules automatically.
The kernel uses modprobe to request modules. The modprobe command searches through the standard installed module directories to find the necessary drivers.
This article explains how to use modprobe to add or remove kernel modules.
- A system running Linux
- Access to the terminal/command line
- A user account with sudo or root privileges
modprobe Command Syntax Explained
All modprobe commands require sudo privileges. The general syntax for using modprobe is:
By default, the modprobe command adds a module.
For multiple modules, expand with the option -a or -all :
Options for modprobe Command
The available modprobe command options are divided into categories based on their use-case.
Management Options
Management options enable different module handling situations when inserting or removing modules with the modprobe command.
—all -a | Enables multiple modules to be inserted or removed at the same time. |
—remove -r | Remove a module. Applies —remove-dependencies as well. Useful for removing broken modules. |
—remove-dependencies | Removes dependency modules. |
—resolve-alias -R | Look up and print all module names matching an alias. Useful for debugging alias problems. |
—first-time | Prints an error for already inserted or removed modules. |
—ignore-install —ignore-remove -i | Ignore install/remove commands written in the module when inserting/removing a module. |
—use-blacklist -b | Blacklist resolved alias. Blacklisted modules are not automatically loaded. |
—force -f | Force module insertion or removal when version errors appear. Applies both —force-modversion and —force-vermagic . Use with caution. |
—force-modversion | Ignore module version on insertion or removal. Use with caution. |
—force-vermagic | Ignore module version magic on insertion or removal. Use with caution. |
Query Options
Query options for modprobe show information about configuration and dependencies.
—show-depends -D | Lists the module with the dependency files if there are any. The dependencies that install with the module have the “install” prefix. |
—showconfig —show-config -c | Prints current configuration and exists. |
—show-modversions —dump-modversions | Dumps module version dependencies. |
General Options
General options configure modprobe output options, module locations, and versions.
—dry-run —show -n | Do not execute insert/remove but print the output. Used for debugging purposes. |
—config= -C | Overrides the default configuration dependency (/etc/modprobe.d) with . |
—dirname= -d | Use as filesystem root for /lib/modules. |
—set-version= -S | Use specified kernel instead of using uname . |
—syslog -s | Prints the error messages through syslog instead of standard error (stderr). When stderr is unavailable, errors get printed to syslog automatically. |
—quiet -q | Disables display of error messages. |
—verbose -v | Enables more messages to show, if available. modprobe only prints messages if something goes wrong. |
—version -V | Shows the modprobe version. |
—help -h | Shows the help message with all the commands listed. |
Examples of modprobe Command
All kernel modules are listed in the /lib/modules directory system in .ko (kernel object) files by default.
Find all the available modules for the current kernel version with:
find /lib/modules/$(uname -r) -type f -name '*.ko*' | more
Note: Consider removing old kernel versions. Check out our guide on how to remove old kernels on Ubuntu.
Adding Kernel Modules With modprobe Command
1. Add a module using the modprobe command:
2. Confirm the module loaded with:
The output prints an error because the module is already in the kernel.
Alternatively, find the module in the active module loaded list with lmod :
Removing Kernel Modules With modprobe Command
1. Remove a module using the modprobe -r command:
2. Confirm the module is removed by running:
sudo modprobe -r --first-time
An error message appears saying that the module is not in the kernel:
Alternatively, check the active module loaded list:
The removed module is not on the module loaded list.
The Linux kernel is created to be modular and easily extendible. Make sure to research the modules you want to add or remove to avoid problems with the kernel.
For further reading, follow our guide on how to build a Linux kernel from scratch.
Milica Dancuk is a technical writer at phoenixNAP who is passionate about programming. Her background in Electrical Engineering and Computing combined with her teaching experience give her the ability to easily explain complex technical concepts through her content.
All Linux distributions come with a predefined kernel. However, they are usually outdated. Follow this.
Linux released its latest LTS kernel version, the Linux kernel 5.7. Take a look at all the new features and.
There are several methods to remove old or unused kernels. It’s also considered good system hygiene practice.
The Linux kernel is much like the central brain of the operating system. Although it is open-source — meaning.