Come elenco i valori dei parametri del modulo Linux caricati?


77

Esiste un modo standard per elencare i valori dei parametri di un modulo Linux caricato? Sto essenzialmente cercando un'altra risposta a questa domanda sui parametri del modulo del kernel Linux , perché il modulo che mi interessa non ha /sys/modules/<module_name>/parametersun'interfaccia.


4
Tutte le risposte finora meritano un voto negativo, perché non hanno letto attentamente l'OP ("il modulo che mi interessa non ha un'interfaccia ... / parametri")! :-(
Dirk,

Risposte:


54

Puoi farlo usando questo semplice comando unidirezionale, che utilizza i filesystem virtuali / proc / modules e / 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

Otterrai un output come questo:

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

Spero che sia di aiuto.


Grazie! È molto utile diagnosticare ogni tipo di problema con hardware problematico!
Oz123,

Incredibile, e se passi $ module come parametro di funzione invece di ottenerlo da / proc / modules ottieni facilmente tutti i parametri di un dato modulo.
igordcard,

@RaSca - Qualcuno di queste risposte ha funzionato per te?
Dan Garthwaite,

All'inizio questo non ha funzionato per me come avevo fatto io alias ls='ls -lah'. Rimuovere l'alias o eseguire la soluzione come script ha funzionato alla grande però.
David Farrell,

Combinando questo con un grep in lsmod: lsmod | grep -i bluetooth> lsmodpattern.txt; cat lsmodpattern.txt | sed 's / | / /' | awk '{print $ 4}'> patternmodules.txt; cat patternmodules.txt | tr, '\ n' | mentre leggi il modulo; do echo "Modulo: $ module"; if [-d "/ sys / module / $ module / parametri"]; quindi ls / sys / module / $ module / parametri / | mentre leggi il parametro; do echo -n "Parametro: $ parameter ="; cat / sys / module / $ module / parametri / $ parametro; fatto; fi; fatto
Ferroao il

38

È possibile utilizzare il comando systool -vm <Module name>. Viene fornito con il sysfsutilspacchetto sulla maggior parte dei sistemi.

Ecco come apparirà l'output, c'è una sezione 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
Il comando systoolfa parte del pacchetto sysfsutils. E questa è la risposta che penso, (ma potrebbe avere un esempio di output)
Volker Siegel,

Usando questo per interrogare una manciata di moduli sul mio sistema, sembra che la Parameters:sezione sia presente solo nell'output per i moduli che espongono /sys/modules/<module_name>/parametersun'interfaccia. Quindi, sfortunatamente, questo non soddisfa la premessa della domanda.
BACON,

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

È possibile utilizzare il comando " modinfo (8) " per ottenere i parametri del tempo di caricamento disponibili per un modulo. Per esempio:

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

Per quanto riguarda ottenere i parametri dei moduli caricati, prova a combinare il comando modinfo con un semplice "lsmod | awk '{print $ 1}'"

Come 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

14
-1 Questo mostra solo qualcosa come una pagina man, ma non dice quali sono i valori.
Aleksandr Levchuk,

1

Sarebbe uscito brutto come commento, ma ho fatto questo controllo sul mio sistema ..

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

Per verificare se i moduli senza parametri in / sys si presentano come parametri in modinfo ma non sono riuscito a trovarne nessuno.

Non sono un esperto, ma la differenza qui è che modinfo legge il file del modulo stesso per i parametri guardando nelle intestazioni elf .modinfo, mentre sys sta leggendo questi dalla sua variante di runtime.

Potrebbe essere possibile avere parametri che è possibile modificare in fase di esecuzione che non compaiono come valore di parametro modinfo, ma poiché il formato del modulo dovrebbe essere piuttosto fisso non immagino che sia possibile passare un parametro di opzione a un modulo durante il caricamento senza che ci sia una struttura .modinfo per essa collegata.

Sono curioso, il tuo modulo suggerisce che ci sono parametri passabili con modinfo quando lo controlli in questo modo ma non ce ne sono in / sys per questo? Certamente sul mio sistema non sono stato in grado di trovare alcun esempio di ciò usando il comando fornito sopra.


1

Per iwlwifi e altri moduli ho usato questo:

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

e ottengo questo risultato:

 /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

Quindi immagino che potresti provare qualcosa del tipo:

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

Fammi sapere se questo funziona per te.


grep .probabilmente funzionerebbe altrettanto bene con meno battiture. :)
dannysauer,

Sì, in questo caso,grep . /sys/module/<module_name>/parameters/*
Homero Esmeraldo,

Qualcosa che ho appena notato - se usi un carattere jolly e c'è solo un parametro, mostra solo il contenuto del file - nessun nome di file. Tuttavia, se si utilizza grep -Re si lascia il carattere jolly fuori dalla directory dei parametri, mostra sempre il nome file. Punti bonus: aggiungi anche --coloral grep e ottieni il nome file + il valore differenziato per i colori. ;) Ad esempiogrep -R --color '.' /sys/module/block/parameters/
dannysauer,

(non importa se la persona che ha posto la domanda ha fatto specificamente domande sui moduli che non espongono l'API / parameter: D)
dannysauer,

0

Lavorando al di fuori del lavoro di Katriel, puoi ottenere un one-liner (certamente brutto) combinando i due in un loop bash:

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

2
usare awk per restituire il primo argomento tramite printè piuttosto grossolano - usa while readinvece la sintassi: lsmod | while read a b; do echo $a:; modinfo $a | grep parm | sed -e 's/parm://'; done- non cambia il fatto che modinfo non restituisce i valori dei parametri, sebbene ...
the-wabbit

7
e penso che la domanda originale riguardasse i parametri utilizzati , non quelli disponibili .
asdmin,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.