Bagaimana cara daftar nilai parameter modul Linux dimuat?

77

Apakah ada cara standar untuk membuat daftar nilai parameter dari modul Linux yang dimuat? Saya pada dasarnya mencari jawaban lain untuk pertanyaan parameter modul kernel Linux ini , karena modul yang saya tertarik tidak memiliki /sys/modules/<module_name>/parametersantarmuka.

cdleary
sumber
4
Semua jawaban hingga saat ini layak mendapat suara turun, karena mereka tidak membaca OP dengan hati-hati ("modul yang saya minati tidak memiliki antarmuka ... / parameter")! :-(
Dirk

Jawaban:

54

Anda dapat melakukannya dengan menggunakan perintah satu arah yang sederhana ini, yang menggunakan sistem file / proc / modules dan / sys virtual:

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

Anda akan mendapatkan output seperti ini:

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

Semoga ini membantu.

RaSca
sumber
Terima kasih! Itu sangat berguna untuk mendiagnosis semua jenis masalah dengan perangkat keras yang bermasalah!
Oz123
Luar biasa, dan jika Anda melewatkan $ module sebagai parameter fungsi alih-alih mendapatkannya dari / proc / modules Anda dengan mudah mendapatkan semua params dari modul yang diberikan.
igordcard
@RaSca - Apakah ada dari jawaban ini yang cocok untuk Anda?
Dan Garthwaite
Awalnya ini tidak bekerja untuk saya seperti saya alias ls='ls -lah'. Menghapus alias atau menjalankan solusi sebagai skrip bekerja dengan sangat baik.
David Farrell
Menggabungkan ini dengan grep di lsmod: lsmod | grep -i bluetooth> lsmodpattern.txt; cat lsmodpattern.txt | sed 's / | / /' | awk '{print $ 4}'> patternmodules.txt; cat patternmodules.txt | tr, '\ n' | saat membaca modul; lakukan echo "Module: $ module"; jika [-d ​​"/ sys / module / $ module / parameter"]; kemudian ls / sys / module / $ module / parameter / | saat membaca parameter; do echo -n "Parameter: $ parameter ="; cat / sys / module / $ module / parameter / $ parameter; Selesai; fi; dilakukan
Ferroao
38

Anda bisa menggunakan perintah systool -vm <Module name>. Muncul dengan sysfsutilspaket pada kebanyakan sistem.

Seperti inilah hasilnya nanti, ada bagian 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
sumber
4
Perintah systooladalah bagian dari paket sysfsutils. Dan ini adalah jawaban yang saya pikir, (tetapi bisa memiliki contoh output)
Volker Siegel
Dengan menggunakan ini untuk menanyakan beberapa modul pada sistem saya, sepertinya Parameters:bagian tersebut hanya ada di output untuk modul yang mengekspos /sys/modules/<module_name>/parametersantarmuka. Jadi, sayangnya, ini tidak memuaskan premis dari pertanyaan itu.
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
sumber
7

Anda bisa menggunakan perintah " modinfo (8) " untuk mendapatkan parameter waktu buka modul. Misalnya:

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

Sedangkan untuk mendapatkan parameter dari modul yang dimuat, coba gabungkan perintah modinfo dengan "lsmod | awk '{print $ 1}'" yang sederhana

Seperti dalam:

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
sumber
14
-1 Ini hanya menunjukkan sesuatu seperti halaman manual tetapi tidak mengatakan apa nilainya.
Aleksandr Levchuk
1

Akan keluar jelek sebagai komentar, tapi saya melakukan pemeriksaan ini pada sistem saya ..

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

Untuk memeriksa apakah modul tanpa parameter di / sys terlihat memiliki parameter dalam modinfo tetapi saya tidak dapat menemukannya.

Saya bukan ahli, tetapi perbedaannya di sini adalah bahwa modinfo membaca file modul itu sendiri untuk parameter dengan melihat header .modinfo elf, sedangkan sys membaca ini dari varian runtime-nya.

Dimungkinkan untuk memiliki parameter yang Anda dapat memodifikasi pada saat runtime yang tidak muncul sebagai nilai parameter modinfo, tapi karena format modul harus cukup tetap saya tidak membayangkan kemungkinan bagi Anda untuk lulus parameter pilihan untuk modul ketika loading tanpa ada menjadi struktur .modinfo untuk tautannya.

Saya ingin tahu, apakah modul Anda menyarankan ada parameter lumayan dengan modinfo ketika Anda memeriksanya seperti itu tetapi tidak ada di / sys untuk itu? Tentu saja di sistem saya, saya tidak dapat menemukan contoh ini menggunakan perintah yang diberikan di atas.

Matthew Ife
sumber
1

Untuk iwlwifi dan modul lain saya menggunakan ini:

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

dan saya mendapatkan output ini:

 /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

Jadi saya kira Anda bisa mencoba sesuatu seperti:

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

Beri tahu saya jika ini cocok untuk Anda.

Homero Esmeraldo
sumber
grep .mungkin juga akan berfungsi dengan baik dengan kurang mengetik. :)
dannysauer
Ya, dalam hal ini,grep . /sys/module/<module_name>/parameters/*
Homero Esmeraldo
Sesuatu yang baru saya perhatikan - jika Anda menggunakan wildcard dan hanya ada satu parameter, itu hanya menunjukkan isi file - tidak ada nama file. Namun, jika Anda menggunakan grep -Rdan membiarkan wildcard dari direktori parameter, selalu menunjukkan nama file. Poin bonus: tambahkan juga --colorgrep dan dapatkan nama file + nilai yang dibedakan berdasarkan warna. ;) Misalnyagrep -R --color '.' /sys/module/block/parameters/
dannysauer
(tidak peduli bahwa orang yang mengajukan pertanyaan secara khusus bertanya tentang modul yang tidak mengekspos / parameter API: D)
dannysauer
0

Bekerja dari pekerjaan katriel, Anda bisa mendapatkan satu-liner (diakui jelek) dengan menggabungkan keduanya di bash loop:

for i in `lsmod | awk '{print $1}'`; do echo "$i: "; modinfo $i | grep parm; done
Ahli menulis
sumber
2
menggunakan awk hanya untuk mengembalikan argumen pertama via printagak kotor - gunakan while readsintaks sebagai gantinya: lsmod | while read a b; do echo $a:; modinfo $a | grep parm | sed -e 's/parm://'; done- itu tidak mengubah fakta bahwa modinfo tidak mengembalikan nilai parameter, meskipun ...
the-wabbit
7
dan saya pikir pertanyaan awal adalah tentang parameter yang digunakan , bukan yang tersedia .
asdmin