Linux включить модуль ядра

Загружаемые модули ядра Linux

Системное ядро Linux способно к модификации за счёт расширения функциональных возможностей. Это достигается несколькими способами, но самым оптимальным является подключение загружаемых модулей ядра. Этот способ позволяет вести разработку нужного функционала для ядра независимо от самого ядра. Процесс подключения модулей к ядру, как правило, никаких трудностей не вызывает (в отличие от конфигурирования и компиляции). Если конечно модули разработаны грамотно и должным образом протестированы. Системным администраторам стоит помнить, что если нужно «расширить» ядро под требуемый функционал, то в первую очередь следует воспользоваться вариантом в виде загружаемых модулей ядра.

Зачем нужны загружаемые модули ядра?

С помощью загружаемых модулей ядра довольно просто добавлять в систему драйверы, поддержку новых технологий и возможностей для архитектуры Linux. Это не требует затрагивания компонентов, уже включенных в ядро. Не нужно модифицировать исходный код ядра и возиться с его компиляцией. К тому же, это экономит память и дисковое пространство под само ядро. Ведь можно загружать только те модули, которые используются фактически.

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

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

Особенности работы с модулями ядра Linux

Как уже было отмечено, Linux способна предоставить системным администраторам довольно широкие возможности для работы с загружаемыми модулями ядра. Так например в Linux любой системный компонент возможно сделать загружаемым модулем за исключением двух системных объектов: драйвера устройства, используемого для работы корневой файловой системы (ФС) и драйвера мыши типа PS/2.

Все загружаемые модули хранятся (и устанавливаются) в каталог /lib/modules/версия_ядра. Здесь версия_ядра может определена командой:

Для то, чтобы получить список загруженных и используемых в данный момент модулей ядра, можно воспользоваться командой lsmod:

$ sudo lsmod Module Size Used by ipmi_devintf 13064 2 ipmi_si 36648 1 ipmi_msghandler 31848 2 ipmi_devintf,ipmi_si iptable_filter 6721 0 ip_tables 21441 1 iptable_filter

Как видно из данного вывода, в системе настроена поддержка брандмауэра iptables, а также используются модули для интеллектуального управления платформой IMPI – Intelligent Platform Management Interface. В колонке «Size» указывается размер в байтах, а в колонке «Used by» (кем используется) приводится количество связей на данный модуль от других компонентов, а также список самих этих компонентов.

Читайте также:  What is linux operating system with example

Даже если системное ядро было сконфигурировано и скомпилировано с настройками и комплектностью по-умолчанию, то при использовании команды lsmod, как правило будет выведен довольно длинный список модулей. Если известно точное или примерное имя модуля, который необходимо проверить (используется он или нет), то вместе с командой lsmod удобно использовать и команду grep:

$ sudo lsmod | grep amdgpu amdgpu 3166208 92 amdchash 16384 1 amdgpu amd_shed 24576 1 amdgpu i2c_algo_bit 16384 1 amdgpu amdttm 110592 1 amdgpu amdkcl 28672 4 amdkfd,amd_shed,amdttm,amdgpu drm_kms_helper 172032 1 amdgpu drm 401408 24 drm_kms_helper,amdkfd,amd_shed,amdttm,amdgpu,amdkcl

В данном выводе показаны результаты для используемых ядром модулях драйвера amdgpu.

Загрузка и подключение модулей ядра

Пусть имеется загружаемый модуль ядра для некоторого устройства. Например есть файл модуля somedevice.ko для устройства somedevice. Чтобы загрузить этот модуль для ядра прямо во время работы системы следует использовать команду insmod:

$ sudo insmod /путь/к/файлу/somrdevice.kо

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

$ sudo insmod /путь/куда/somedevice.kо io=0xXXX irq=X

Для удаления модуля нужно либо перезапустить систему или указать в явном запросе выгружаемый модуль с помощью команды rmmod:

Следует заметить, что несмотря на то, что команду rmmod хоть и можно использовать в любой момент времени, однако модуль может быть удалён только в случае, если с ним не связано ни одной действующей ссылки, которые указываются в столбце «Used by» вывода команды lsmod.

Чтобы каждый раз поле перезапуска системы не загружать требуемые модули, в Linux существует возможность подключать их автоматически с помощью файла /etc/modprobe.conf и соответствующей команды modprobe. Эта команда является «обёрткой» команды insmod. Она способна определять порядок загрузки и выгрузки модулей, их параметры, а также зависимости от других модулей и/или параметров. Всю эту информацию команда modprobe читает из файла /etc/modprobe.conf, который, кстати способна и сама генерировать.

Чтобы сгенерировать файл modprobe.conf в соответствии с текущим набором загруженных модулей (которые необходимо загрузить заранее), нужно использовать команду:

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

#This file was generated by: modprobe -c path[pcmcia]=/lib/modules/preferred path[pcmcia]=/lib/modules/default path[pcmcia]=/lib/modules/2.6.6 path[misc]=/lib/modules/2.6.6 # Aliases alias block-major-1 rd alias block-major-2 floppy alias char-major-4 serial alias char-major-5 serial alias char-major-6 lp alias dos msdos alias plip0 plip alias ppp0 ppp options ne io=x0340 irq=9

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

Читайте также:  Пробел в пути linux

Значения для строк options администраторы должны задавать самостоятельно, поскольку эти инструкции командой modprobe автоматически не генерируются. Например, чтобы задать для модуля устройства somedevice адрес его ввода-вывода, а также вектор прерываний, можно это сделать таким образом:

options somedevice io=0xXXX irq=X

Стоит отметить также, что для команды modprobe доступны ключевые слова install и remove, при помощи которых можно указывать команды, которые будут выполняться во время загрузки и установки модулей ядра соответственно.

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Похожие записи:

Источник

How to load and unload kernel modules in Linux

itnixpro.com

In this tutorial, you will learn how to load and unload kernel modules in Linux. When you install a Linux-like operating system, the kernel automatically installs the majority of device driver modules. It also allows you to install additional device drivers as modules using the commands modprobe and insmod once the installation is complete.

How to load and unload kernel modules in Linux

Normally, kernel modules are loaded automatically, but you may need to manually install new modules on occasion.

From time to time, you may want to unload/uninstall some modules are well.

While the two commands are used to achieve the same thing, most users will want to use modprobe instead, which is more clever and can handle module dependencies.

Modprobe can also be used to unload/remove loaded kernel modules.

How to load kernel modules in Linux

Load Kernel Modules using INSMOD command

The insmod (insert module) command can be used to load a kernel module. The whole path of the module must be specified here.

Kernel module files usually have .ko extensions, for example you can use the command bellow to insert bluetooth.ko module.

insmod /lib/modules/4.4.0-21-generic/kernel/drivers/cpufreq/bluetooth.ko

Load Kernel Modules using MODPROBE command

Using the modprobe command and the module name, you can add the module to the Linux kernel.

List Loaded Kernel Modules

Using the lsmod command, you can see what kernel modules are currently loaded.

sudo lsmod | grep bluetooth

Except for the additional configuration file in /etc/modprobe.d/ , Linux maintains a kernel module directory and configuration files under /lib/modules/’uname -r’ /kernel/drivers/ .

Читайте также:  Linux проверка процессора команды

To list kernel drivers run the following command

ls /lib/modules/'uname -r'/kernel/drivers/

For my case when I run uname -r I get the following sample output;

Now I can run the full command with value of the command uname -r used;

ls /lib/modules/5.11.0-38-generic/kernel/drivers/
accessibility crypto hwmon md parport scsi vdpa acpi dax hwtracing media pci siox vfio android dca i2c memstick pcmcia slimbus vhost ata dma i3c message phy soc video atm edac iio mfd pinctrl soundwire virt auxdisplay extcon infiniband misc platform spi virtio base firewire input mmc power spmi visorbus bcma firmware iommu most powercap ssb vme block fpga ipack mtd pps staging w1 bluetooth gnss irqchip mux ptp target watchdog bus gpio isdn net pwm tee xen char gpu leds nfc rapidio thermal clk greybus lightnvm ntb regulator thunderbolt counter hid macintosh nvdimm reset tty cpufreq hsi mailbox nvme rpmsg uio cpuidle hv mcb nvmem rtc usb

You may encounter problems loading modules at times, or modules that are not loaded properly.

You can aggressively install or load modules to avoid these issues by using the ‘–force’ option (-f) in the modprobe command.

If you continue to have issues or difficulties while loading the modules, you will need to debug this time.

You can determine the exact error or issue before or after installing the modules by activating debugging. To put it another way, debugging is the same as a dry-run of loading modules.

This form of debugging is enabled by the ‘-n’ option in the modprobe command. This option forces the modprobe command to complete all module loading steps except the last.

The ‘ —show-depends ‘ option in the modprobe command can also be used to display the module’s dependencies.

An example is shown below.

modprobe --show-depends e1000
insmod /lib/modules/5.11.0-38-generic/kernel/drivers/net/ethernet/intel/e1000/e1000.ko

How to unload kernel modules in Linux

Just like insmod does not a module with its dependencies, rmmod does not remove a module with its dependencies. You may want to use modprobe with -r option instead.

Unload kernel modules using rmmod command

The rmmod (remove module) command is used to unload a kernel module. The bluetooth.ko module will be unloaded or removed using the following example.

Источник

Оцените статью
Adblock
detector