Есть ли стандартный способ перечислить значения параметров загруженного модуля Linux? По сути, я ищу другой ответ на этот вопрос Вопрос о параметрах модуля ядра Linux, потому что интересующий меня модуль не имеет /sys/modules/<module_name>/parameters
интерфейс.
Вы можете сделать это с помощью этой простой односторонней команды, которая использует виртуальные файловые системы / proc / modules и / sys:
cat /proc/modules | cut -f 1 -d " " | while read module; do \
echo "Module: $module"; \
if [ -d "/sys/module/$module/parameters" ]; then \
ls /sys/module/$module/parameters/ | while read parameter; do \
echo -n "Parameter: $parameter --> "; \
cat /sys/module/$module/parameters/$parameter; \
done; \
fi; \
echo; \
done
Вы получите такой вывод:
...
...
Module: vboxnetadp
Module: vboxnetflt
Module: vboxdrv
Parameter: force_async_tsc --> 0
Module: binfmt_misc
Module: uinput
Module: fuse
Parameter: max_user_bgreq --> 2047
Parameter: max_user_congthresh --> 2047
Module: md_mod
Parameter: new_array --> cat: /sys/module/md_mod/parameters/new_array: Permission denied
Parameter: start_dirty_degraded --> 0
Parameter: start_ro --> 0
Module: loop
Parameter: max_loop --> 0
Parameter: max_part --> 0
Module: kvm_intel
Parameter: emulate_invalid_guest_state --> N
Parameter: ept --> Y
Parameter: fasteoi --> Y
Parameter: flexpriority --> Y
Parameter: nested --> N
Parameter: ple_gap --> 0
Parameter: ple_window --> 4096
Parameter: unrestricted_guest --> Y
Parameter: vmm_exclusive --> Y
Parameter: vpid --> Y
Parameter: yield_on_hlt --> Y
Module: kvm
Parameter: allow_unsafe_assigned_interrupts --> N
Parameter: ignore_msrs --> N
Parameter: min_timer_period_us --> 500
Module: tpm_infineon
Module: joydev
Module: snd_hda_codec_hdmi
Parameter: static_hdmi_pcm --> N
...
...
Надеюсь это поможет.
Вы можете использовать команду systool -vm <Module name>
. Он поставляется с sysfsutils
пакет на большинстве систем.
Вот как будет выглядеть вывод, есть раздел Parameters
:
linux ~ # systool -vm btusb
Module = "btusb"
Attributes:
coresize = "40960"
initsize = "0"
initstate = "live"
refcnt = "0"
srcversion = "D69A7EC073BC0145C2DE5C3"
taint = ""
uevent = <store method only>
version = "0.8"
Parameters:
disable_scofix = "N"
force_scofix = "N"
reset = "Y"
Sections:
.bss = "0xffffffffa090d800"
.data = "0xffffffffa090d000"
.exit.text = "0xffffffffa09096ff"
.gnu.linkonce.this_module= "0xffffffffa090d4c0"
.init.text = "0xffffffffa0910000"
.note.gnu.build-id = "0xffffffffa090a000"
.rodata = "0xffffffffa090b060"
.rodata.str1.1 = "0xffffffffa090a024"
.rodata.str1.8 = "0xffffffffa090a2b0"
.smp_locks = "0xffffffffa090af84"
.strtab = "0xffffffffa0912668"
.symtab = "0xffffffffa0911000"
.text = "0xffffffffa0905000"
__mcount_loc = "0xffffffffa090c3d8"
__param = "0xffffffffa090c360"
__verbose = "0xffffffffa090d0f8"
grep -H '' /sys/module/ath9k*/parameters/*
/sys/module/ath9k/parameters/blink:1
/sys/module/ath9k/parameters/bt_ant_diversity:0
/sys/module/ath9k/parameters/btcoex_enable:0
/sys/module/ath9k/parameters/nohwcrypt:1
/sys/module/ath9k/parameters/ps_enable:0
grep -H '' /sys/module/acpi_cpufreq/parameters/*
/sys/module/acpi_cpufreq/parameters/acpi_pstate_strict:0
Вы можете использовать "modinfo (8)"команда для получения доступных параметров времени загрузки для модуля. Например:
# modinfo e100 | grep parm
parm: debug:Debug level (0=none,...,16=all) (int)
parm: eeprom_bad_csum_allow:Allow bad eeprom checksums (int)
parm: use_io:Force use of i/o access mode (int)
Что касается получения параметров загруженных модулей, попробуйте объединить команду modinfo с простым "lsmod | awk '{print $ 1}'"
Как в:
lsmod | awk '{print $1 }'combi > myfile.txt
tail -n +2 myfile.txt > myfile.txt.tmp && mv myfile.txt.tmp myfile.txt
while read -r LINE; do echo "$LINE">>results.txt;modinfo "$LINE" | grep ^desc>>results.txt;modinfo "$LINE" | grep parm>> results.txt; done < myfile.txt
Вышел бы некрасиво в качестве комментария, но я проверил свою систему ...
cat /proc/modules | cut -d " " -f1 | while read mod; do
test -d /sys/module/$mod/parameters || echo modinfo $mod | grep parm;
done
Чтобы проверить, отображаются ли модули без параметров в / sys как имеющие параметры в modinfo, но я не смог их найти.
Я не эксперт, но разница здесь в том, что modinfo читает сам файл модуля для поиска параметров, просматривая заголовки .modinfo elf, тогда как sys читает их из своего варианта выполнения.
Возможно, можно будет иметь параметры, которые вы можете изменять во время выполнения, которые не отображаются как значение параметра modinfo, но поскольку формат модуля должен быть довольно фиксированным, я не думаю, что вы можете передать параметр параметра в модуль при загрузке без там есть структура .modinfo для него, связанная в.
Мне любопытно, предлагает ли ваш модуль, что есть параметры, которые можно передать с помощью modinfo, когда вы проверяете его таким образом, но для него их нет в / sys? Конечно, в моей системе я не смог найти никаких примеров этого, используя приведенную выше команду.
Отработав работу katriel, вы можете получить (по общему признанию уродливый) однострочник, объединив их два в цикле bash:
for i in `lsmod | awk '{print $1}'`; do echo "$i: "; modinfo $i | grep parm; done
Для iwlwifi и других модулей я использовал это:
grep [[:alnum:]] /sys/module/iwl*/parameters/*
и я получаю такой результат:
/sys/module/iwlmvm/parameters/init_dbg:N
/sys/module/iwlmvm/parameters/power_scheme:2
/sys/module/iwlmvm/parameters/tfd_q_hang_detect:Y
/sys/module/iwlwifi/parameters/11n_disable:0
/sys/module/iwlwifi/parameters/amsdu_size:0
/sys/module/iwlwifi/parameters/antenna_coupling:0
/sys/module/iwlwifi/parameters/bt_coex_active:Y
/sys/module/iwlwifi/parameters/d0i3_disable:Y
/sys/module/iwlwifi/parameters/d0i3_timeout:1000
/sys/module/iwlwifi/parameters/disable_11ac:N
/sys/module/iwlwifi/parameters/fw_monitor:N
/sys/module/iwlwifi/parameters/fw_restart:Y
/sys/module/iwlwifi/parameters/lar_disable:N
/sys/module/iwlwifi/parameters/led_mode:0
/sys/module/iwlwifi/parameters/nvm_file:(null)
/sys/module/iwlwifi/parameters/power_level:0
/sys/module/iwlwifi/parameters/power_save:N
/sys/module/iwlwifi/parameters/swcrypto:0
/sys/module/iwlwifi/parameters/uapsd_disable:3
Думаю, вы могли бы попробовать что-то вроде:
grep [[:alnum:]] /sys/module/<module_name>/parameters/*
Сообщите мне, работает ли это для вас.