Команда modinfo позволяет использовать утилиту с соответствующим именем для получения информации об указанном модуле ядра Linux. Ядро Linux является монолитным, но поддерживает модули, в рамках которых содержится код для реализации ряда его функций и драйверов устройств.
В процессе компиляции ядра определенный машинный код может либо включаться в состав самого ядра, либо включаться в состав модулей, которые подгружаются ядром при необходимости без перезагрузки системы. Пользователь также может получить список всех загруженных модулей с помощью команды lsmod и загрузить любой модуль с помощью команды insmod или modprobe. Сами файлы модулей обычно расположены в директории /lib/modules/. Модули поддерживают дополнительные параметры, список которых является наиболее ценной информацией, выводящейся рассматриваемой утилитой. Кроме того, утилита позволяет получить путь к файлу модуля, информацию о его лицензии, имя его автора, список требуемых для его корректной работы модулей, а также список идентификаторов совместимого с ним оборудования и другую информацию.
Разработка модулей ядра Linux — Обзор символьных устройств (cdev) [Kernel]
Базовый синтаксис команды выглядит следующим образом:
$ modinfo [параметры] имя-модуля-или-путь-к-файлу
Утилита поддерживает ряд параметров, наиболее важными из которых являются параметр -F, позволяющий указать имя интересующего поля, -k, позволяющий работать с произвольной версией ядра Linux, а также параметры -a, -d, -l, -p и -n, позволяющие вывести лишь имя автора модуля (поле author), описание его назначения (поле description), информацию о его лицензии (поле license), список его параметров (список полей parm) и имя его файла (поле file name) соответственно.
Примеры использования
Вывод информации о модуле ядра
Для вывода информации о модуле ядра достаточно использовать утилиту modinfo, указав имя интересующего модуля. Сам модуль не обязан быть загружен ядром:
$ modinfo dvb_core filename: /lib/modules/5.19.0-32-generic/kernel/drivers/media/dvb-core/dvb-core.ko license: GPL author: Marcus Metzler, Ralph Metzler, Holger Waechtler description: DVB Core Driver srcversion: CF8DCFB8B0F072DBB4E0EA9 depends: mc retpoline: Y intree: Y name: dvb_core vermagic: 5.19.0-32-generic SMP preempt mod_unload modversions sig_id: PKCS#7 signer: Build time autogenerated kernel key sig_key: 03:C5:B1:04:49:5B:AB:31:68:50:F6:CB:27:16:60:B6:2F:36:0E:38 sig_hashalgo: sha512 signature: 21:5B:AE:74:A9:F7:6F:2F:CD:03:5D:2A:51:76:01:50:AF:CE:4E:EE: 55:73:99:DD:BB:38:B3:57:20:F7:5F:99:89:20:20:FB:67:F5:2C:9B: 28:BF:CA:8F:55:8C:DC:65:C1:94:C9:AF:C3:5F:4E:B4:1E:89:BC:37: B1:80:78:3B:07:89:58:38:AC:3C:36:52:BC:9A:BB:56:11:37:FA:DD: 10:95:48:E4:14:57:A2:AE:47:F0:97:AE:29:C8:19:6E:63:D3:97:C9: D1:86:EB:12:78:AE:5E:16:BC:6D:78:EF:07:E8:44:A8:C4:E1:59:8A: DD:CB:5C:C6:C3:0D:6E:52:C4:78:90:EB:66:F2:8E:E6:CC:18:B2:1A: 5A:53:A2:03:91:9D:7E:2F:3B:B3:26:FA:EF:38:B3:A3:54:A8:5F:5E: 42:28:F5:04:07:2D:F8:A9:59:49:03:66:99:6E:63:09:0B:5B:00:9D: 15:59:47:D8:E9:DB:16:56:40:E3:38:F4:FE:A5:59:F9:F6:6C:70:88: A2:68:25:A2:BD:0A:41:E6:CB:63:46:78:8C:25:EB:C0:98:F8:E0:17: 44:A9:B2:27:B1:E0:43:19:BA:F0:DC:90:E2:CE:1D:1A:99:2F:6C:F5: 78:1F:D0:F9:5D:BD:2D:E2:95:F1:85:7B:1F:8D:2A:23:34:41:09:AA: AB:BD:30:08:EF:CE:79:A3:D5:D6:5B:F5:44:45:06:71:4C:28:C5:D2: CC:43:35:DE:46:9C:EA:CD:DA:CD:06:3E:79:D1:34:E1:2C:1F:C1:72: 8F:A8:FE:F1:90:09:48:3D:C9:DF:12:47:F9:E4:1A:EC:C0:16:BE:95: 6F:E9:94:8C:FD:29:3D:72:1E:F3:9C:37:99:6E:5C:5A:B8:9E:1A:27: FA:5F:D2:C7:9A:45:01:0F:9B:99:BF:D4:A2:D4:E4:DF:B0:BA:77:F7: 4B:79:D1:2D:48:CE:C7:98:EC:7C:A3:53:9C:7A:67:BD:67:C7:B7:71: 64:61:63:FF:51:4E:1D:57:D2:AF:6F:92:A4:FC:49:E3:08:E0:44:AF: 9B:F9:08:CD:C3:C3:2D:59:35:44:3A:8A:C0:82:CA:7A:63:5F:A9:5F: 77:72:76:3A:2E:12:61:0D:B2:64:A2:17:59:68:FE:BA:F7:5A:5C:EE: B7:BF:A6:21:65:65:F0:CE:B5:80:63:34:1D:6B:8B:F2:9B:9C:5E:15: 45:C5:D4:3F:21:49:E6:8C:BF:57:DB:D0:8C:9A:F7:36:A9:C0:2F:0C: DA:83:FD:CC:0D:32:1F:7C:55:98:E3:44:B6:2D:D8:D4:59:4A:39:BC: 6D:75:63:DA:3B:BC:41:9B:07:75:4F:D2 parm: frontend_debug:Turn on/off frontend core debugging (default:off). (int) parm: dvb_shutdown_timeout:wait shutdown_timeout seconds after close() before suspending hardware (int) parm: dvb_force_auto_inversion:0: normal (default), 1: INVERSION_AUTO forced always (int) parm: dvb_override_tune_delay:0: normal (default), >0 => delay in milliseconds to wait for lock after a tune attempt (int) parm: dvb_powerdown_on_sleep:0: do not power down, 1: turn LNB voltage off on sleep (default) (int) parm: dvb_mfe_wait_time:Wait up to mfe_wait_time seconds on open() for multi-frontend to become available (default:5 seconds) (int) parm: cam_debug:enable verbose debug messages (int) parm: dvb_demux_tscheck:enable transport stream continuity and TEI check (int) parm: dvb_demux_speedcheck:enable transport stream speed check (int) parm: dvb_demux_feed_err_pkts:when set to 0, drop packets with the TEI bit set (1 by default) (int) parm: debug:Turn on/off debugging (default:off). (int) parm: dvbdev_debug:Turn on/off device debugging (default:off). (int)
Это информация о модуле dvb_core.
Псевдо-вирус на python
Из вывода видно, что модуль является драйвером для DVB-устройств, зависит от модуля mc и поддерживает такие параметры, как frontend_debug, dvb_shutdown_timeout, dvb_force_auto_inversion, dvb_override_tune_delay, dvb_powerdown_on_sleep, dvb_mfe_wait_time, cam_debug, dvb_demux_tscheck, dvb_demux_speedcheck, dvb_demux_feed_err_pkts, debug и dvbdev_debug. Типы значений этих параметров приводятся в скобках и в нашем случае это int. Вообще, значения параметров могут иметь такие типы, как byte (байт), short (короткое целочисленное значение, 2 байта), ushort (короткое беззнаковое целочисленное значение, 2 байта), int (целочисленное значение, 4 байта), uint (беззнаковое целочисленное значение, 4 байта), long (длинное целочисленное значение, 8 байт), ulong (длинное беззнаковое целочисленное значение, 8 байт), charp (массив символов, строка), bool (логическое значение) и invbool (инвертированное целочисленное значение). Если необходимо передавать несколько значений, будет использован префикс array of, например, array of charp (массив строк).
Вывод информации о модуле из произвольной версии ядра
Если вас интересует модуль из состава той версии ядра, которая не используется в данный момент, вы можете воспользоваться параметром -k:
$ modinfo -k 5.15.0-60-generic dvb_core filename: /lib/modules/5.15.0-60-generic/kernel/drivers/media/dvb-core/dvb-core.ko license: GPL author: Marcus Metzler, Ralph Metzler, Holger Waechtler description: DVB Core Driver srcversion: 0695B2A0E9C2A20F55E408E depends: mc retpoline: Y intree: Y name: dvb_core vermagic: 5.15.0-60-generic SMP mod_unload modversions …
Очевидно, в данном случае выведена информация о модуле из состава ядра Linux версии 5.15.0-60-generic, а не 5.19.0-32-generic, как это было ранее.
Источник: linux-faq.ru
Переводы страниц руководства
modinfo извлекает информацию из модулей ядра Linux , заданных в командной строке. Если имя модуля не является именем файла, то будет выполнен поиск в каталоге /lib/modules/версия, как это делает modprobe(8).
По умолчанию modinfo выводит каждый атрибут модуля для наглядности в виде имя_поля:значение. Имя файла выводится таким же образом (хотя на самом деле это не атрибут).
Эта версия modinfo умеет понимать модули ядра Linux любой архитектуры.
ОПЦИИ
-V —version Вывести версию modinfo. Замечания о нижеследующем разделе ОБРАТНАЯ СОВМЕСТИМОСТЬ: можно вывести версию modinfo.old. -F —field Вывести только значение этого поля, по одному в строке. Чаще всего эта возможность используется в сценариях. Общеупотребительными полями (могут отсутствовать в некоторых модулях) являются author (автор), description (описание), license (лицензия), param (параметры), depends (зависимости) и alias (псевдонимы). Полей param, alias и depends может быть несколько. В специальном поле filename выводится имя файла модуля. -k kernel Предоставить информацию о другом ядре, а не о используемом в настоящее время. Эта возможность может потребоваться для извлечения информации из недавно установленного набора модулей (которые пока не используются). Например, может понадобиться найти файлы прошивок, необходимых модулям ядра, которые вы собираетесь добавить в образ initrd перед загрузкой. -0 —null Использовать для разделения значений полей вместо символа новой строки ASCII-символ с нулевым кодом. Эта возможность полезна в сценариях, поскольку символ новой строки теоретически может встретиться внутри поля. -a -d -l -p -n Это сокращения для полей author, desription, license, param и filename соответственно, добавленные для легкости перехода с утилиты modinfo из старого пакета modutils.
ОБРАТНАЯ СОВМЕСТИМОСТЬ
Эта версия modinfo предназначена для ядер версий 2.5.48 и выше. Если обнаружено ядро, поддерживающее модули в старом стиле, программа попытается запустить modinfo.old, что приводит к полной прозрачности поведения программы для пользователя.
Отметим, что версия выводимая modinfo более предсказуема, чем в более старых версиях: сценарии, пытающиеся воспользоваться выводом по умолчанию могут неправильно обработать сложные поля.
Вы можете установить переменную окружения NEW_MODINFO, чтобы всегда принудительно использовать новую утилиту modinfo.
АВТОРСКОЕ ПРАВО
Эта страница руководства: Copyright 2003, Расти Рассел (Rusty Russell), корпорация IBM.
Источник: manpages.ylsoftware.com
Вывод информации о загруженных модулях ядра
lsmod – это инструмент командной строки, используемый для отображения модулей ядра, которые загружены в данный момент.
Модули ядра – это части кода, которые могут быть загружены и выгружены в ядро по запросу.
Они расширяют функциональность ядра во время его выполнения.
Наиболее распространенные функциональные возможности модулей ядра – это приводы устройств для поддержки нового оборудования, поддержка файловой системы, системные вызовы и многое другое.
Модули ядра загружаются либо автоматически (с помощью udev), либо вручную. Вы можете загрузить модули вручную с помощью команды modprobe. Модули, явно перечисленные в /etc/modules-load.d/.conf для загрузки при загрузке.
Пакет kmod предоставляет инструменты для ручной работы с модулями ядра.
Модули ядра хранятся в каталоге /lib/modules/.
Для поиска версии ядра используйте команду uname -r.
Команда lsmod
Команда lsmod выводит содержимое папки /proc/modules.
Чтобы перечислить загруженные в данный момент модули ядра, введите:
$ lsmod
Module Size Used by vboxvideo 49152 0 rfkill 28672 3 intel_rapl_msr 20480 0 intel_rapl_common 28672 1 intel_rapl_msr intel_pmc_core_pltdrv 16384 0 intel_pmc_core 45056 0 intel_powerclamp 20480 0 ghash_clmulni_intel 16384 0 joydev 28672 0 hid_generic 16384 0 snd_intel8x0 49152 2 snd_ac97_codec 180224 1 snd_intel8x0 aesni_intel 368640 0 ac97_bus 16384 1 snd_ac97_codec usbhid 65536 0 hid 147456 2 usbhid,hid_generic libaes 16384 1 aesni_intel crypto_simd 16384 1 aesni_intel snd_pcm 135168 2 snd_intel8x0,snd_ac97_codec snd_timer 49152 1 snd_pcm cryptd 24576 2 crypto_simd,ghash_clmulni_intel
Вывод показывает три колонки: Module, Size и Used by.
- 1-й столбец – имена загруженных в данный момент модулей.
- 2-й столбец – объем памяти для каждого модуля в килобайтах.
- 3-я колонка – показывает общее количество использованной памяти, а также имена модулей.
Для поиска конкретных модулей в выводе lsmod используйте команду grep для фильтрации.
$ lsmod | grep e1000
e1000 155648 0
Используйте команду modinfo для получения дополнительной информации о модулях ядра, такой как абсолютный путь к объектному файлу ядра .ko, зависимость, автор, описание и лицензия.
$ sudo modinfo e1000
В этом руководстве мы изучили команду lsmod, которая выводит список загруженных в данный момент модулей ядра в Linux.
Источник: itisgood.ru