Команда modinfo

Команда modinfo позволяет использовать утилиту с соответствующим именем для получения информации об указанном модуле ядра Linux. Ядро Linux является монолитным, но поддерживает модули, в рамках которых содержится код для реализации ряда его функций и драйверов устройств. В процессе компиляции ядра определенный машинный код может либо включаться в состав самого ядра, либо включаться в состав модулей, которые подгружаются ядром при необходимости без перезагрузки системы. Пользователь также может получить список всех загруженных модулей с помощью команды lsmod и загрузить любой модуль с помощью команды insmod или modprobe. Сами файлы модулей обычно расположены в директории /lib/modules/. Модули поддерживают дополнительные параметры, список которых является наиболее ценной информацией, выводящейся рассматриваемой утилитой. Кроме того, утилита позволяет получить путь к файлу модуля, информацию о его лицензии, имя его автора, список требуемых для его корректной работы модулей, а также список идентификаторов совместимого с ним оборудования и другую информацию.

Базовый синтаксис команды выглядит следующим образом:

$ 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. Из вывода видно, что модуль является драйвером для 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, как это было ранее.