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

有一个标准的方式来列出一个加载的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软件包一起提供。

这就是输出的样子,有一个section 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 '' /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 

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

我很好奇,你的模块是否build议有通过modinfo的参数,当你检查它的方式,但没有/ sys的呢? 当然,在我的系统上,我无法使用上面提供的命令find任何这样的例子。

在katriel的工作中,你可以通过在一个bash循环中把它们中的两个结合起来,来得到一个(不可否认的)单线程:

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