如何列出已加载的Linux模块参数值?


76

有没有列出列出已加载的Linux模块的参数值的标准方法?我本质上是在寻找这个Linux内核模块参数问题的另一个答案,因为我感兴趣的模块没有/sys/modules/<module_name>/parameters接口。


4
到目前为止,所有答案都应该被否决,因为他们没有仔细阅读OP(“我感兴趣的模块没有 ... / parameters接口”)!:-(
德克

Answers:


53

您可以使用以下简单的单向命令来执行此操作,该命令使用/ 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
...
...

希望这可以帮助。


谢谢!这对于诊断有问题的硬件的各种问题非常有用!
Oz123

令人惊讶的是,如果将$ module作为函数参数传递,而不是从/ proc / modules获取,则可以轻松获取给定模块的所有参数。
igordcard

@RaSca-这些答案对您有用吗?
Dan Garthwaite

起初这对我没用alias ls='ls -lah'。不过,删除别名或将解决方案作为脚本运行效果很好。
David Farrell

将其与lsmod中的grep结合使用:grep -i蓝牙> lsmodpattern.txt; cat lsmodpattern.txt | sed's / | / /'| awk'{print $ 4}'> patternmodules.txt; cat patternmodules.txt | tr,'\ n'| 边读模块;做echo“ Module:$ module”; 如果[-d“ / sys / module / $ module / parameters”]; 然后ls / sys / module / $ module / parameters / | 读取参数时 做echo -n“参数:$ parameter =”; cat / sys / module / $ module / parameters / $ parameter; 完成 fi; 完成
Ferroao

38

您可以使用命令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"

4
该命令systool是软件包的一部分sysfsutils。我想这就是答案(但可能会有示例输出)
Volker Siegel 2014年

使用此查询我系统上的少数模块,似乎该Parameters:部分仅出现在公开/sys/modules/<module_name>/parameters接口的模块的输出中。因此,不幸的是,这不能满足问题的前提。
培根

14
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

7

您可以使用“ 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

14
-1这仅显示类似手册页的内容,但没有说明值是什么。
亚历山大·列夫丘克

1

作为评论会很丑陋,但是我在系统上进行了检查。

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中没有参数?当然,在我的系统上,我无法使用上面提供的命令找到任何此类示例。


1

对于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/*

让我知道这是否适合您。


grep .更少的打字也可能同样有效。:)
dannysauer

是的,在这种情况下,grep . /sys/module/<module_name>/parameters/*
Homero Esmeraldo

我刚刚注意到的一件事-如果您使用通配符,并且只有一个参数,它将仅显示文件内容-没有文件名。但是,如果使用grep -R通配符并将其保留在parameters目录之外,则它始终显示文件名。奖励积分:还添加--color到grep中,并获得文件名+值(按颜色区分)。;)例如grep -R --color '.' /sys/module/block/parameters/
dannysauer

(没关系,问这个问题的人专门询问了不公开/ parameters API:D的模块)
dannysauer

0

从katriel的工作出发,您可以通过在bash循环中将两者结合在一起来获得(公认的丑陋)单线:

for i in `lsmod | awk '{print $1}'`; do echo "$i: "; modinfo $i | grep parm; done

2
使用awk仅通过print来返回第一个参数有点麻烦-使用while read语法代替:lsmod | while read a b; do echo $a:; modinfo $a | grep parm | sed -e 's/parm://'; done-尽管它不会改变modinfo不返回参数值的事实,但是
the-wabbit 2011年

7
我认为最初的问题是关于使用的参数,而不是可用的参数。
asdmin 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.