Yüklenen Linux modül parametre değerlerini nasıl listeleyebilirim?


77

Yüklenmiş bir Linux modülünün parametre değerlerini listelemek için standart bir yol var mı? Esasen bu Linux çekirdeği modülü parametreleri sorusuna başka bir cevap arayacağım , çünkü ilgilendiğim modülün bir /sys/modules/<module_name>/parametersarayüzü yok.


4
Dikkatle OP okumadım çünkü kadar tüm cevaplar şimdi, bir aşağı-oyu hak ( "Ben ilgilendiğim modül yok değil a ... / parametreler arayüzü var")! :-(
Dirk

Yanıtlar:


54

/ Proc / module ve / sys sanal dosya sistemlerini kullanan bu basit tek yönlü komutu kullanarak yapabilirsiniz:

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

Bunun gibi bir çıktı elde edersiniz:

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

Bu yardımcı olur umarım.


Teşekkürler! Sorunlu donanım ile her türlü sorunu teşhis etmek çok faydalıdır!
Oz123

Şaşırtıcı ve eğer / modül / işlevlerden almak yerine $ işlevini örneğin işlev parametresi olarak geçirirseniz, belirli bir modülün tüm paragraflarını kolayca elde edersiniz.
igordcard

@RaSca - Bu cevaplardan herhangi biri sizin için işe yaradı mı?
Dan Garthwaite

İlk başta bu benim için işe yaramadı alias ls='ls -lah'. Takma adı kaldırmak veya çözümü bir komut dosyası olarak çalıştırmak yine de işe yaradı.
David Farrell

Bunu lsmod'da bir grep ile birleştirmek: lsmod | grep -i bluetooth> lsmodpattern.txt; cat lsmodpattern.txt | sed 's / | / /' | awk '{print $ 4}'> patternmodules.txt; cat patternmodules.txt | tr, '\ n' | modülü okurken; echo "Modül: $ modülü"; eğer [-d "/ sys / module / $ module / parametreler"]; sonra ls / sys / module / $ modülü / parametreler / | parametre okurken; echo -n "Parametre: $ parametresi ="; cat / sys / module / $ module / parameters / $ parametresi; yapılan; fi; bitmiş
Ferroao

38

Komutu kullanabilirsiniz systool -vm <Module name>. sysfsutilsÇoğu sistemde paket ile geliyor .

Çıktının neye benzeyeceği, işte bir bölüm var 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
Komut systoolpaketin bir parçasıdır sysfsutils. Ve bence cevap budur, (ancak örnek bir çıktıya sahip olabilir)
Volker Siegel

Bunu, sistemimdeki bir avuç modülleri sorgulamak için kullanmak, Parameters:bölümün sadece bir /sys/modules/<module_name>/parametersarayüzü ortaya çıkaran modüller için çıktıda mevcut olduğu görülüyor . Yani, ne yazık ki, bu sorunun öncülünü tatmin etmiyor.
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

Bir modül için kullanılabilir yükleme süresi parametrelerini almak için " modinfo (8) " komutunu kullanabilirsiniz. Örneğin:

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

Yüklenen modüllerin parametrelerine gelince, modinfo komutunu basit bir "lsmod | awk '{print $ 1}'" ile birleştirmeyi deneyin

De olduğu gibi:

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 Bu sadece bir man sayfası gibi bir şey gösterir, ancak değerlerin ne olduğunu söylemez.
Aleksandr Levchuk,

1

Bir yorum olarak çirkin çıkacaktı, ama bu kontrolü sistemimde yaptım ..

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

/ Sys parametresiz modülleri modinfo parametresine sahip olarak gösterip göstermediğini kontrol etmek için herhangi bir bulamadım.

Uzman değilim, ama buradaki fark modinfo'nun .modinfo elf başlıklarına bakarak modüller için parametre dosyasını kendisi okurken, sys bunları çalışma zamanı değişkeninden okuyor.

Yüklerken bir modüle bir seçenek parametre geçirmek için Size bir modinfo parametre değeri olarak görünür yok zamanında değiştirebilir parametreleri olması mümkün olabilir, ancak modül biçimi oldukça sabit olmalıdır çünkü olası hayal yok olmadan orada olmak bağlantılı bir .modinfo yapısı.

Merak ediyorum, modülünüz bu şekilde kontrol ettiğinizde modinfo ile geçirilebilecek parametreler olduğunu ancak bunun için hiçbir sys / sys olmadığını mı gösteriyor? Kesinlikle benim sistemimde yukarıda verilen komutu kullanarak bunun hiçbir örneğini bulamadım.


1

İwlwifi ve diğer modüller için bunu kullandım:

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

ve bu çıktıyı alıyorum:

 /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

Sanırım şöyle bir şeyi deneyebilirsin:

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

Bu sizin için işe yararsa bana bildirin.


grep .Muhtemelen daha az daktilo ile de çalışırdı. :)
dannysauer

Evet, bu durumda,grep . /sys/module/<module_name>/parameters/*
Homero Esmeraldo

Az önce fark ettiğim bir şey - bir joker karakter kullanıyorsanız ve yalnızca bir parametre varsa, yalnızca dosya içeriğini gösterir - dosya adı yok. Bununla birlikte, grep -Rjoker karakterini parametreler dizininin dışında bırakır ve bırakırsanız, her zaman dosya adını gösterir. Bonus puanları: ayrıca --colorgrep'e ekleyin ve dosya adı + değerini renklerle ayırt edin. ;) Örneğingrep -R --color '.' /sys/module/block/parameters/
dannysauer

(Soruyu soran kişinin özel olarak / parametrelerini göstermeyen modüller sorduğunu unutmayın: D)
dannysauer

0

Katriel'in çalışmalarını yaparak, ikisini bir bash döngüsünde birleştirerek (kuşkusuz çirkin) bir astar alabilirsiniz:

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

2
Sadece aracılığıyla ilk argüman döndürmek için awk kullanarak printbiraz Brüt - kullanmak while readyerine sözdizimi: lsmod | while read a b; do echo $a:; modinfo $a | grep parm | sed -e 's/parm://'; done- bu modinfo ... gerçi, parametre değerleri dönmez gerçeğini değiştirmez
-tavşansın

7
ve asıl sorunun mevcut parametrelerle değil kullanılan parametrelerle ilgili olduğunu düşünüyorum .
asdmin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.