Jak wyświetlić listę załadowanych wartości parametrów modułu Linux?

76

Czy istnieje standardowy sposób wyświetlania wartości parametrów załadowanego modułu Linux? Zasadniczo szukam innej odpowiedzi na to pytanie dotyczące parametrów modułu jądra Linux , ponieważ moduł, który mnie interesuje, nie ma /sys/modules/<module_name>/parametersinterfejsu.

cdleary
źródło
4
Wszystkie odpowiedzi do tej pory zasługują na głosowanie w dół, ponieważ nie przeczytały dokładnie OP („moduł, który mnie interesuje, nie ma interfejsu ... / parametrów”)! :-(
Dirk

Odpowiedzi:

53

Możesz to zrobić za pomocą tego prostego polecenia jednokierunkowego, które korzysta z wirtualnych systemów plików / proc / modules i / 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

Otrzymasz takie wyjście:

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

Mam nadzieję że to pomoże.

RaSca
źródło
Dzięki! Jest to bardzo przydatne w diagnozowaniu wszelkiego rodzaju problemów z problematycznym sprzętem!
Oz123
Zadziwiające, a jeśli przekazujesz $ module jako np. Parametr funkcji zamiast pobierać go z / proc / modules, łatwo uzyskasz wszystkie parametry danego modułu.
igordcard
@RaSca - Czy którakolwiek z tych odpowiedzi działała dla Ciebie?
Dan Garthwaite
Na początku nie działało to tak jak ja alias ls='ls -lah'. Usunięcie aliasu lub uruchomienie rozwiązania jako skryptu działało jednak świetnie.
David Farrell,
Łącząc to z grepem w lsmod: lsmod | grep -i bluetooth> lsmodpattern.txt; cat lsmodpattern.txt | sed 's / | / /' | awk '{print $ 4}'> patternmodules.txt; cat patternmodules.txt | tr, '\ n' | podczas odczytu modułu; wykonaj echo „Moduł: $ moduł”; if [-d "/ sys / module / $ module / parameters"]; następnie ls / sys / module / $ module / parameters / | podczas odczytu parametru; wykonaj echo -n "Parametr: $ parameter ="; cat / sys / module / $ module / parameters / $ parameter; gotowy; fi; gotowe
Ferroao,
38

Możesz użyć polecenia systool -vm <Module name>. Jest dostarczany z sysfsutilspakietem w większości systemów.

Tak będzie wyglądać wyjście, jest sekcja 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
źródło
4
Polecenie systooljest częścią pakietu sysfsutils. I myślę, że to odpowiedź (ale może mieć przykładowy wynik)
Volker Siegel
Używając tego do odpytywania kilku modułów w moim systemie, wydaje się, że Parameters:sekcja jest obecna tylko w danych wyjściowych dla modułów, które ujawniają /sys/modules/<module_name>/parametersinterfejs. Niestety nie spełnia to założenia pytania.
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
Dan Garthwaite
źródło
7

Możesz użyć polecenia „ modinfo (8) ”, aby uzyskać dostępne parametry czasu ładowania modułu. Na przykład:

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

Aby uzyskać parametry załadowanych modułów, spróbuj połączyć komendę modinfo z prostym „lsmod | awk '{print $ 1}'”

Jak w:

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
źródło
14
-1 Pokazuje tylko coś w rodzaju strony podręcznika, ale nie mówi, jakie są wartości.
Aleksandr Levchuk
1

Wyszłoby brzydko jako komentarz, ale zrobiłem to sprawdzenie w moim systemie ..

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

Aby sprawdzić, czy moduły bez parametrów w / sys pokazują się jako posiadające parametry w modinfo, ale nie mogłem ich znaleźć.

Nie jestem ekspertem, ale różnica polega na tym, że modinfo odczytuje sam plik modułu dla parametrów, patrząc na nagłówki elfów .modinfo, podczas gdy sys odczytuje je ze swojego środowiska wykonawczego.

To może być możliwe, aby mieć parametry, które można modyfikować w czasie wykonywania których dont pojawiają się jako wartość parametru modinfo, ale ponieważ format moduł powinien być dość stałe dont wyobrazić sobie jego możliwe, aby przekazać parametr opcji do modułu podczas ładowania bez istnienia połączona w nim struktura .modinfo.

Jestem ciekawy, czy twój moduł sugeruje, że istnieją parametry, które można przekazać za pomocą modinfo, gdy sprawdzasz go w ten sposób, ale nie ma dla niego żadnych parametrów w / sys? Z pewnością w moim systemie nie mogłem znaleźć żadnych przykładów tego przy użyciu polecenia podanego powyżej.

Matthew Ife
źródło
1

W przypadku iwlwifi i innych modułów użyłem tego:

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

i otrzymuję ten wynik:

 /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

Myślę, że możesz spróbować czegoś takiego:

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

Daj mi znać, jeśli to Ci odpowiada.

Homero Esmeraldo
źródło
grep .prawdopodobnie równie dobrze działałby przy mniejszym pisaniu. :)
dannysauer
Tak, w tym przypadkugrep . /sys/module/<module_name>/parameters/*
Homero Esmeraldo
Coś, co właśnie zauważyłem - jeśli używasz symbolu wieloznacznego i jest tylko jeden parametr, to po prostu pokazuje zawartość pliku - bez nazwy pliku. Jeśli jednak użyjesz grep -Ri pozostawisz symbol wieloznaczny poza katalogiem parametrów, zawsze wyświetla nazwę pliku. Punkty bonusowe: dodaj również --colordo grep i uzyskaj nazwę pliku + wartość zróżnicowaną kolorystycznie. ;) Na przykładgrep -R --color '.' /sys/module/block/parameters/
dannysauer
(nieważne, że osoba
zadająca
0

Pracując z pracą Katriel, możesz uzyskać (co prawda brzydkie) jedno-liniowe połączenie ich dwóch w pętli bash:

for i in `lsmod | awk '{print $1}'`; do echo "$i: "; modinfo $i | grep parm; done
Scrivener
źródło
2
użycie awk do zwrócenia pierwszego argumentu za pomocą printjest dość obrzydliwe - while readzamiast tego użyj składni: lsmod | while read a b; do echo $a:; modinfo $a | grep parm | sed -e 's/parm://'; done- nie zmienia to faktu, że modinfo nie zwraca wartości parametrów, chociaż ...
the-wabbit
7
i myślę, że pierwotne pytanie dotyczyło użytych parametrów, a nie dostępnych parametrów .
asdmin