2.9.3.1 Модули ядра
Скачать документ Общая информация
Загрузка/выгрузка модулей ядра
Автозагрузка модулей
Черный список
Модули ядра – это фрагменты кода, которые могут быть загружены и выгружены в ядро по требованию. Они расширяют функциональность ядра без необходимости перезагрузки системы. Модуль может быть настроен, как встроенный в ядро или как загружаемый во время работы операционной системы.
Примеры модулей ядра – это драйверы различных устройств.
Общая информация
Все модули хранятся в папке /lib/modules/. Т.к. модули рассчитаны только на определенную версию ядра, для каждой установленной версии создается свой подкаталог.
Чтобы просмотреть список установленных версий ядра, выполните следующую команду:
ls /lib/modules/
Если у вас только одна версия ядра, терминал выведет примерно следующее:
5.10.29-1.el7.x86_64
Если версий ядра несколько, все они будут указаны.
Может возникнуть необходимость просмотреть все установленные модули для текущего ядра в системе, для этого следует выполнить команду:
find /lib/modules/$(uname -r) -name *.ko /lib/modules/5.10.29-1.el7.x86_64/kernel/lib/crc4.ko /lib/modules/5.10.29-1.el7.x86_64/kernel/lib/crc8.ko /lib/modules/5.10.29-1.el7.x86_64/kernel/lib/lz4/lz4_compress.ko /lib/modules/5.10.29-1.el7.x86_64/kernel/lib/lz4/lz4hc_compress.ko /lib/modules/5.10.29-1.el7.x86_64/kernel/lib/reed_solomon/reed_solomon.ko /lib/modules/5.10.29-1.el7.x86_64/kernel/lib/objagg.ko /lib/modules/5.10.29-1.el7.x86_64/kernel/lib/lru_cache.ko /lib/modules/5.10.29-1.el7.x86_64/kernel/lib/ts_bm.ko /lib/modules/5.10.29-1.el7.x86_64/kernel/lib/crc-itu-t.ko /lib/modules/5.10.29-1.el7.x86_64/kernel/lib/ts_fsm.ko /lib/modules/5.10.29-1.el7.x86_64/kernel/lib/math/cordic.ko /lib/modules/5.10.29-1.el7.x86_64/kernel/lib/crc7.ko /lib/modules/5.10.29-1.el7.x86_64/kernel/lib/crc64.ko /lib/modules/5.10.29-1.el7.x86_64/kernel/lib/ts_kmp.ko /lib/modules/5.10.29-1.el7.x86_64/kernel/lib/parman.ko
Иногда возникает необходимость уточнить, установлен ли какой-либо конкретный модуль ядра, для этого можно отфильтровать вывод поиска с помощью grep. Рассмотрим команду на примере модуля ip_tables:
find /lib/modules -name *.ko | grep ip_tables /lib/modules/5.10.29-1.el7.x86_64/kernel/net/ipv4/netfilter/ip_tables.ko
Для просмотра драйверов и модулей, загруженных в данный момент в системе, используется команда:
lsmod Module Size Used by nls_utf8 16384 1 isofs 53248 1 snd_hrtimer 16384 1 rfkill 28672 2 vsock_loopback 16384 0 vmw_vsock_virtio_transport_common 36864 1 vsock_loopback vmw_vsock_vmci_transport 32768 2 vsock 49152 7 vmw_vsock_virtio_transport_common, vsock_loopback, vmw_vsock_vmci_transport sunrpc 651264 1 snd_ens1371 36864 4
Вывод представляет собой таблицу, в которой три столбца:
- Module — название модуля;
- Size — размер модуля (в байтах);
- Used by — количество экземпляров модуля, используемое в настоящее время. Нулевое значение говорит о том, что модуль не используется. Разделенный запятыми список после количества показывает, какие зависимости есть у модуля.
Если список загруженных в данный момент модулей большой, а интересует узнать, загружен ли какой-либо конкретный модуль, следует отфильтровать вывод командой grep:
lsmod | grep ip_tables
Если модуль загружен, lsmod его выведет. В противном случае — ответа на команду не будет.
В нашем случае модуль загружен и команда его показывает следующим образом:
ip_tables 28672 0
Для отображения подробной информации о модуле используется команда:
modinfo <имя_модуля>.
Выполним ее на примере модуля fuse:
modinfo fuse filename: /lib/modules/5.10.29-1.el7.x86_64/kernel/fs/fuse/fuse.ko alias: devname:fuse alias: char-major-10-229 alias: fs-fuseblk alias: fs-fuse license: GPL description: Filesystem in Userspace author: Miklos Szeredi <miklos@szeredi.hu> alias: fs-fusectl depends: retpoline: Y intree: Y name: fuse vermagic: 5.10.29-1.el7.x86_64 SMP mod_unload sig_id: PKCS#7 signer: Red Soft Kernel Signing key sig_key: 1B:2C:9A:D2:F1:D0:C7:8D:82:8F:62:82:B1:3E:F9:0D:7E:66:FF:01 sig_hashalgo: sha256 signature: 6E:62:46:91:B3:AE:74:0A:BA:67:28:61:A8:A4:FD:CC:A2:2E:DF:85: E5:C2:38:56:8C:EB:C3:82:24:4F:8A:EA:5B:12:E0:E1:E9:78:D5:00: FF:EA:53:C2:3A:4D:6B:35:43:CC:6A:41:F4:8B:E0:D5:57:23:F9:F2: D9:ED:10:4B:8A:83:0A:34:CF:4E:BF:B6:EC:CD:E5:7F:C1:30:BA:2D: B4:84:1A:F1:69:C7:BA:C3:39:0B:9C:56:BD:6C:1B:F8:CC:14:8A:32: 42:C5:82:37:78:43:C2:6B:1C:E8:99:EE:85:27:48:79:C1:68:07:AE: 3E:02:B8:64:8E:4F:06:C2:E3:5C:55:D2:96:1B:0E:56:49:A6:97:C2: D6:5C:0A:DA:75:A4:48:C0:F3:1F:D0:A2:4F:92:5A:F7:9F:AB:B4:9D: 19:C4:5F:2C:E4:CB:33:20:41:4D:3A:64:02:2B:47:A1:C1:5E:89:35: 76:54:CD:06:D7:77:C5:44:C5:BB:FA:F4:77:62:C7:D8:7B:93:E9:F4: CB:20:81:B5:33:52:7D:8B:B7:49:C4:54:56:34:89:B2:79:5C:29:8D: BF:1B:64:19:8E:0E:4D:51:9D:B3:CC:38:5F:3C:4D:CB:EC:27:D5:B5: EE:9C:59:AA:56:D4:AA:A7:25:5C:0D:64:BA:8E:C7:15:CE:7F:FB:D2: 9D:FB:F0:DA:E1:09:AD:8F:50:12:A3:6A:F9:B0:C9:52:FE:7E:67:B6: FD:F3:3A:76:5C:14:63:D5:B5:4C:99:06:A4:32:B8:03:3F:6B:DC:DC: 07:12:90:08:2F:9A:11:ED:B8:DD:63:A3:AC:15:B7:20:7B:8E:C3:30: 60:B7:73:E7:6D:AF:5C:3B:AE:56:43:6F:F1:80:A4:29:3F:C8:01:EE: C2:8E:78:30:2E:5E:22:38:7D:37:AE:61:C6:F7:35:3B:D5:A7:1E:C8: 7B:07:E9:27:B5:13:AC:7C:E7:86:40:98:9B:D1:23:52:35:3E:FA:A6: 10:EE:0B:9E:23:17:D4:1D:0A:C9:0C:7B:D2:7F:F9:BB:54:83:B8:17: 9B:BD:D5:CC:E8:65:0F:C7:14:33:42:78:27:78:AF:7E:9D:5D:A4:D1: 4C:87:E8:0A:DE:CD:45:DE:18:09:CD:77:AD:55:10:4F:3C:8C:25:09: 11:5F:29:EF:69:26:57:0B:23:90:FC:4A:8C:38:EF:FA:26:47:94:22: 21:C8:12:A3:B2:76:F5:91:9C:FF:7B:8D:C6:03:40:A8:5E:6F:A5:0B: 07:4F:84:48:0D:1F:66:6E:37:59:0C:4D:11:9D:C5:F0:2C:26:78:62: 29:97:C6:D5:D0:2A:D5:BB:8F:14:10:67 parm: max_user_bgreq:Global limit for the maximum number of backgrounded requests an unprivileged user can set (uint) parm: max_user_congthresh:Global limit for the maximum congestion threshold an unprivileged user can set (uint)
Есть возможность просмотреть список опций, установленных для загруженного модуля. Просмотр осуществляется командой systool:
systool [<опция> [имя_модуля]] -a Show attributes -b <bus_name> Show a specific bus -c <class_name> Show a specific class -d Show only devices -h Show usage -m <module_name> Show a specific module -p Show path to device/driver -v Show all attributes with values -A <attribute_name> Show attribute value -D Show only drivers -P Show device's parent
Команда systool без переданных параметров выводит список всех модулей, разделенный на секции: bus, class, devices, modules. Это сделано для того, чтобы можно было корректно передавать команде опции и получать правильный вывод.
Чтобы отобразить конфигурацию определенного модуля, например ip_tables, выполним команду:
modprobe –c | grep ip_tables alias ipt_icmp ip_tables alias symbol:ipt_alloc_initial_table ip_tables alias symbol:ipt_do_table ip_tables alias symbol:ipt_register_table ip_tables alias symbol:ipt_unregister_table ip_tables alias symbol:ipt_unregister_table_exit ip_tables alias symbol:ipt_unregister_table_pre_exit ip_tables
Получить список зависимостей модуля (или псевдонима), включая сам модуль, с созданием (возможно пустого) набора имён файлов модулей, по одному в строке, каждое из которых начинается с «insmod», можно с помощью команды:
modprobe –-show-depends fuse insmod /lib/modules/5.10.29-1.el7.x86_64/kernel/fs/fuse/fuse.ko
Загрузка/выгрузка модулей ядра
Загрузка модулей ядра осуществляется командами modprobe и insmod. Принцип их действия один и тот же, но отличаются передаваемые параметры. Команде modprobe передается только название модуля modprobe <имя_модуля>.
Например:
modprobe fuse
Для команды insmod необходимо передать адрес файла модуля (его можно узнать командой modinfo):
modinfo fuse | grep filename filename: /lib/modules/5.10.29-1.el7.x86_64/kernel/fs/fuse/fuse.ko insmod /lib/modules/5.10.29-1.el7.x86_64/kernel/fs/fuse/fuse.ko
Для выгрузки (выключения) модуля из ядра также можно использовать одну из двух команд - modprobe или rmmode. Команде modprobe обязательно требуется передать опцию –r:
modprobe –r fuse
Альтернативная команда выглядит несколько проще:
rmmode fuse
Если после выполнения команды выгрузки возникает ошибка типа:
modprobe: FATAL: Module fuse is in use.
это значит, что в данный момент модуль выгружен быть не может, т.к. он используется. Бывает, что в ошибке явно указывается, какими модулями используется необходимый к выгрузке, и тогда сперва требуется выгрузить их.
Автозагрузка модулей
Для того чтобы каждый раз не производить ручную загрузку тех или иных модулей, работать с которыми требуется регулярно, в РЕД ОС существует отдельный каталог, в котором можно настроить автоматическую загрузку модулей при старте системы - /etc/modules-load.d/. В каталоге хранятся конфигурационные файлы *.conf, содержащие наименования необходимых модулей.
Кроме указанной выше директории также считываются файлы конфигурации из /run/modules-load.d/*.conf и /usr/lib/modules-load.d/*.conf. Если директории пустые, то можно создать файл и поместить нужные модули для автозагрузки. Каждый файл конфигурации имеет имя вида:
*/modules-load.d/<program>.conf
Файлы конфигурации содержат список имён модулей ядра для загрузки, разделённых символами новой строки. Пустые строки и строки, чей первый не пробельный символ - # (решётка) или ; (точка с запятой) игнорируются.
Например, можно создать файл autorun.conf в каталоге /etc/modules-load.d/:
nano /etc/modules-load.d/autorun.conf
В данный файл построчно добавляются все необходимые модули, например:
video e1000 serio_raw
При следующей загрузке системы указанные в файле модули будут автоматически загружены.
Черный список
Чёрный список в контексте модулей ядра – это механизм, предотвращающий загрузку того или иного модуля. Это может быть полезно, если связанное оборудование не требуется или загрузка этого модуля вызывает проблемы. Например, могут быть два модуля ядра, которые пытаются управлять одним и тем же компонентом оборудования, и загрузка их вместе приведёт к конфликту.
Для запрета загрузки определенного модуля ядра создайте конфигурационный файл block_modules.conf в каталоге /etc/modprobe.d/ и добавьте в нем строку для каждого модуля, который вы хотите добавить в чёрный список, используя ключевое слово «blacklist».
Например, если вы хотите запретить загрузку модуля pcspkr, создайте файл /etc/modprobe.d/block_modules.conf и добавьте в него строку:
blacklist pcspkr /bin/true
* где /bin/true устанавливает запрет на загрузку модулей, зависящих от занесенного в черный список.
Некоторые модули загружаются как часть initramfs. То есть можно выделить модули, которые загружаются:
- из файлов .ko;
- как часть initramfs (initial ramdisk).
Для запрета загрузки модулей первого типа (загружаемых из файлов .ko) достаточно внести запись об этом модуле в файл /etc/modprobe.d/*.conf с директивой blacklist.
Для запрета загрузки модулей второго типа, кроме создания конфигурационного файла, необходимо также пересоздать initramfs. Пересоздание initramfs осуществляется следующей командой:
dracut --force /boot/initramfs-5.10.29-1.el7.x86_64.img 5.10.29-1.el7.x86_64 -v
* где 5.10.29-1.el7.x86_64 - это текущая версия ядра.
Дата последнего изменения: 03.09.2024
Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.