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

cdl*_*ary 100 linux kernel

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

小智 67

您可以使用这个简单的单向命令来实现,该命令使用 /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
Run Code Online (Sandbox Code Playgroud)

您将获得如下输出:

...
...
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
...
...
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。

  • 这个答案根本没有回答问题。OP_特别_要求为不*不*导出其参数的模块提供一种方法。 (6认同)
  • @Rolf 我目前遇到的问题是,模块加载了非默认值,但它不显示它们。 (2认同)

cda*_*uth 51

您可以使用该命令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"
Run Code Online (Sandbox Code Playgroud)

  • 命令`systool` 是包`sysfsutils` 的一部分。这就是我认为的答案,(但可以有一个示例输出) (4认同)
  • 使用它来查询我系统上的一些模块,似乎 `Parameters:` 部分只出现在公开 `/sys/modules/&lt;module_name&gt;/parameters` 接口的模块的输出中。因此,不幸的是,这并不能满足问题的前提。 (2认同)

Dan*_*ite 15

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
Run Code Online (Sandbox Code Playgroud)

  • OP 特别指出,有问题的模块*不*通过“/sys”呈现当前参数值。因此,这个答案对于其他情况来说是正确的,但根本没有回答原来的问题。 (4认同)

kat*_*iel 12

您可以使用“ 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)
Run Code Online (Sandbox Code Playgroud)

至于获取加载模块的参数,请尝试将 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
Run Code Online (Sandbox Code Playgroud)

  • -1 这仅显示类似于手册页的内容,但没有说明值是什么。 (21认同)