Модули ядра — это фрагменты кода, которые могут загружаться и выгружаться в ядро по требованию. Они расширяют функциональность ядра без необходимости перезагрузки системы.
Для создания модулей ядра можно ознакомиться с The Linux Kernel Module Programming Guide (Руководство по программированию модулей ядра Linux).
Модуль может быть настроен как встроенный (built-in) или загружаемый (loadable). Для того чтобы загружать или удалять модуль динамически, его нужно настроить как загружаемый модуль в конфигурации ядра.
Чтобы модуль ядра автоматически пересобирался при установке нового ядра, следует использовать Dynamic Kernel Module Support (DKMS) (Поддержка динамических модулей ядра).
Обычно модули зависят от версии ядра и хранятся в каталоге.
/usr/lib/modules/kernel_release/
Для получения списка текущих загруженных модулей ядра следует открыть терминал и ввести:
lsmod
Для получения информации о модулей ядра следует открыть терминал и ввести:
modinfo имя_модуля
Пример:
modinfo zram
Примерный вывод:
filename: /lib/modules/6.1.92-1-ublinux/kernel/drivers/block/zram/zram.ko.zst
description: Compressed RAM Block Device
author: Nitin Gupta <ngupta@vflare.org>
license: Dual BSD/GPL
srcversion: 9AD502F4D95170F812F4D95
depends:
retpoline: Y
intree: Y
name: zram
vermagic: 6.1.92-1-ublinux SMP preempt mod_unload
sig_id: PKCS#7
signer: Build time autogenerated kernel key
sig_key: 2D:A1:C6:D7:CD:A6:D9:DA:04:CC:69:65:7E:B7:E8:13:67:F5:D9:65
sig_hashalgo: sha512
signature: 30:65:02:31:00:FD:03:0C:57:FC:5D:13:A7:D9:17:6D:C6:D9:6C:48:
8B:B9:04:DB:09:7E:18:96:F4:16:51:18:FB:80:50:98:6A:8E:C5:88:
DD:FD:1C:4A:DF:18:D0:9E:60:DD:7E:44:3C:02:30:03:8D:18:33:64:
93:D9:32:B4:90:46:4A:2D:EC:4B:25:B7:A0:99:82:44:18:14:56:BA:
D6:C5:A4:B5:89:ED:0E:18:73:7E:E6:E8:8B:AF:6B:DA:D9:1B:B2:F6:
48:BC:65
parm: num_devices:Number of pre-created zram devices (uint)
Для просмотра списка параметров, установленных для загруженного модуля следует открыть терминал и ввести:
systool -v -m имя_модуля
Пример:
systool -v -m zram
Примерный вывод:
Module = "zram"
Attributes:
coresize = "45056"
initsize = "0"
initstate = "live"
refcnt = "3"
srcversion = "9AD507A9A9E170F812F4D95"
taint = ""
uevent = <store method only>
Sections:
Для вывода конфигурации модуля ядра следует открыть терминал и ввести:
modprobe -c | grep имя_модуля
Пример:
modprobe -c | grep loop
Примерный вывод:
softdep dsa_loop pre: dsa_loop_bdinfo
alias block_major_7_* loop
alias char_major_10_237 loop
alias char_major_10_255 v4l2loopback
alias devname:loop_control loop
alias net_pf_40 vsock_loopback
alias nvmet_transport_254 nvme_loop
alias of:N*T*Clinux,spi_loopback_test spi_loopback_test
alias of:N*T*Clinux,spi_loopback_testC* spi_loopback_test
alias platform:iio_trig_loop iio_trig_loop
alias symbol:bgx_lmac_internal_loopback thunder_bgx
alias symbol:genphy_c45_loopback libphy
alias symbol:genphy_loopback libphy
alias symbol:loop_backing_file loop
alias symbol:mlx5_eswitch_reg_c1_loopback_enabled mlx5_core
alias symbol:nci_nfcc_loopback nci
alias symbol:pcmcia_loop_config pcmcia
alias symbol:pcmcia_loop_tuple pcmcia
alias symbol:phy_loopback libphy
alias symbol:rvt_ruc_loopback rdmavt
alias symbol:spi_test_execute_msg spi_loopback_test
alias symbol:spi_test_run_test spi_loopback_test
alias symbol:spi_test_run_tests spi_loopback_test
alias symbol:st21nfca_hci_loopback_event_received st21nfca_hci
Для вывода зависимостей модуля ядра следует открыть терминал и ввести:
modprobe --show-depends имя_модуля
Пример:
modprobe --show-depends loop
Примерный вывод:
insmod /lib/modules/6.1.92-1-ublinux/kernel/drivers/block/loop.ko.zst