Wie liste ich geladene Linux-Modulparameterwerte auf?

77

Gibt es eine Standardmethode zum Auflisten der Parameterwerte eines geladenen Linux-Moduls? Ich suche im Wesentlichen nach einer anderen Antwort auf diese Frage zu den Parametern des Linux-Kernel-Moduls , da das Modul, an dem ich interessiert bin, keine /sys/modules/<module_name>/parametersSchnittstelle hat.

cdleary
quelle
4
Alle bisherigen Antworten verdienen eine Abwertung, da sie das OP nicht sorgfältig gelesen haben ("das Modul, an dem ich interessiert bin, hat keine ... / parameters-Schnittstelle")! :-(
Dirk

Antworten:

54

Sie können dies mit diesem einfachen Einwegbefehl tun, der die virtuellen Dateisysteme / proc / modules und / sys verwendet:

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

Sie erhalten eine Ausgabe wie diese:

...
...
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
...
...

Hoffe das hilft.

RaSca
quelle
Vielen Dank! Das ist sehr nützlich, um alle Arten von Problemen mit problematischer Hardware zu diagnostizieren!
Oz123
Erstaunlich, und wenn Sie $ module als Funktionsparameter übergeben, anstatt es aus / proc / modules abzurufen, erhalten Sie ganz einfach alle Parameter eines bestimmten Moduls.
igordcard
@RaSca - Hat eine dieser Antworten für Sie funktioniert?
Dan Garthwaite
Anfangs hat das bei mir nicht so geklappt wie damals alias ls='ls -lah'. Das Entfernen des Alias ​​oder das Ausführen der Lösung als Skript hat jedoch hervorragend funktioniert.
David Farrell
Kombiniere dies mit einem grep in lsmod: lsmod | grep -i bluetooth> lsmodpattern.txt; cat lsmodpattern.txt | sed 's / | / /' | awk '{print $ 4}'> patternmodules.txt; cat patternmodules.txt | tr, '\ n' | während des Lesens des Moduls; Echo "Modul: $ Modul"; if [-d "/ sys / module / $ module / parameters"]; dann ls / sys / module / $ module / parameters / | während gelesener Parameter; do echo -n "Parameter: $ parameter ="; cat / sys / module / $ module / parameters / $ parameter; getan; fi; erledigt
Ferroao
38

Sie können den Befehl verwenden systool -vm <Module name>. sysfsutilsAuf den meisten Systemen ist das Paket enthalten.

So sieht die Ausgabe aus, es gibt einen Abschnitt 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"
cdauth
quelle
4
Der Befehl systoolist Teil des Pakets sysfsutils. Und das ist die Antwort, denke ich (könnte aber eine Beispielausgabe haben)
Volker Siegel
Wenn Sie damit eine Handvoll Module auf meinem System abfragen, scheint der Parameters:Abschnitt nur in der Ausgabe für Module vorhanden zu sein, die eine /sys/modules/<module_name>/parametersSchnittstelle verfügbar machen . Dies entspricht also leider nicht der Prämisse der Frage.
Speck
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
Dan Garthwaite
quelle
7

Sie können den Befehl " modinfo (8) " verwenden, um verfügbare Ladezeitparameter für ein Modul abzurufen . Zum Beispiel:

# 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)

Um die Parameter geladener Module abzurufen, kombinieren Sie den Befehl modinfo mit einem einfachen Befehl "lsmod | awk '{print $ 1}'".

Wie in:

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
katriel
quelle
14
-1 Dies zeigt nur so etwas wie eine Manpage, sagt aber nicht, was die Werte sind.
Aleksandr Levchuk
1

Würde als Kommentar hässlich rauskommen, aber ich habe dies auf meinem System überprüft.

cat /proc/modules  | cut -d " " -f1 | while read mod; do
   test -d /sys/module/$mod/parameters || echo modinfo $mod | grep parm; 
done

Um zu überprüfen, ob Module ohne Parameter in / sys Parameter in modinfo enthalten, ich aber keine gefunden habe.

Ich bin kein Experte, aber der Unterschied besteht darin, dass modinfo die Moduldatei selbst nach den Parametern durchsucht, indem es in den .modinfo-Elf-Headern nachschaut, während sys diese aus seiner Laufzeitvariante liest.

Es kann sein, dass Sie zur Laufzeit Parameter ändern können, die nicht als Modinfo-Parameterwert angezeigt werden. Da das Modulformat jedoch ziemlich fest sein sollte, kann beim Laden möglicherweise kein Optionsparameter an ein Modul übergeben werden, ohne dass dies vorhanden ist eine .modinfo Struktur dafür verlinkt in.

Ich bin neugierig, schlägt Ihr Modul vor, dass es Parameter gibt, die mit modinfo passierbar sind, wenn Sie es auf diese Weise überprüfen, aber es gibt keine in / sys dafür? Auf meinem System konnte ich mit dem oben angegebenen Befehl keine Beispiele dafür finden.

Matthew Ife
quelle
1

Für iwlwifi und andere Module habe ich folgendes verwendet:

 grep [[:alnum:]] /sys/module/iwl*/parameters/*

und ich bekomme diese Ausgabe:

 /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

Also ich denke du könntest etwas ausprobieren wie:

 grep [[:alnum:]] /sys/module/<module_name>/parameters/*

Lassen Sie mich wissen, ob das für Sie funktioniert.

Homero Esmeraldo
quelle
grep .würde wohl auch genauso gut mit weniger tippen funktionieren. :)
dannysauer
Ja, in diesem Fallgrep . /sys/module/<module_name>/parameters/*
Homero Esmeraldo
Etwas, das mir gerade aufgefallen ist - wenn Sie einen Platzhalter verwenden und es nur einen Parameter gibt, wird nur der Inhalt der Datei angezeigt - kein Dateiname. Wenn Sie jedoch grep -Rden Platzhalter im Parameterverzeichnis verwenden und nicht verwenden, wird immer der Dateiname angezeigt. Bonuspunkte: Ergänzen Sie --colorauch das grep und erhalten Sie den nach Farben differenzierten Dateinamen + Wert. ;) Zum Beispielgrep -R --color '.' /sys/module/block/parameters/
dannysauer
(egal, dass die Person, die die Frage gestellt hat, speziell nach Modulen gefragt hat, die die / parameters-API nicht verfügbar machen: D)
dannysauer
0

Wenn Sie von Katriels Arbeit ausgehen, erhalten Sie einen (zugegebenermaßen hässlichen) Einzeiler, indem Sie die beiden in einer Bash-Schleife kombinieren:

for i in `lsmod | awk '{print $1}'`; do echo "$i: "; modinfo $i | grep parm; done
Schreiber
quelle
2
awk nur für die Rückgabe des ersten Arguments via zu verwenden, printist etwas grob - verwenden Sie while readstattdessen die Syntax: lsmod | while read a b; do echo $a:; modinfo $a | grep parm | sed -e 's/parm://'; done- Es ändert nichts an der Tatsache, dass modinfo die Parameterwerte nicht zurückgibt ...
the-wabbit
7
und ich denke, die ursprüngliche Frage betraf die verwendeten Parameter, nicht die verfügbaren .
Asdmin