sviluppo-web-qa.it

Come elenco i valori dei parametri del modulo Linux caricati?

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 un /sys/modules/<module_name>/parameters interfaccia.

80
cdleary

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.

56
RaSca

Puoi usare il comando systool -vm <Module name>. Viene fornito con il pacchetto sysfsutils 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"
40
cdauth
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
13
Dan Garthwaite

È 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
8
katriel

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 con 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 esiste una struttura .modinfo per cui è 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
Matthew Ife

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.

0
Homero Esmeraldo

Lavorando fuori dal 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
0
Scrivener