Comment répertorier les valeurs des paramètres de module Linux chargés?

77

Existe-t-il une méthode standard pour répertorier les valeurs de paramètre d'un module Linux chargé? Je cherche essentiellement une autre réponse à cette question des paramètres du module du noyau Linux , car le module qui m'intéresse n'a pas d' /sys/modules/<module_name>/parametersinterface.

Cdleary
la source
4
Jusqu'à présent, toutes les réponses méritent un vote négatif, car elles n'ont pas lu attentivement le PO ("le module qui m'intéresse n'a pas d' interface ... / paramètres")! :-(
Dirk

Réponses:

54

Vous pouvez le faire en utilisant cette simple commande à sens unique, qui utilise les systèmes de fichiers virtuels / proc / modules et / 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

Vous obtiendrez une sortie comme celle-ci:

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

J'espère que cela t'aides.

RaSca
la source
Merci! C'est très utile pour diagnostiquer toutes sortes de problèmes avec du matériel problématique!
Oz123
Incroyable, et si vous passez $ module comme paramètre de fonction au lieu de l’obtenir de / proc / modules, vous obtiendrez facilement tous les paramètres d’un module donné.
igordcard
@RaSca - Ces réponses ont-elles fonctionné pour vous?
Dan Garthwaite, le
Au début, cela n'a pas fonctionné pour moi comme je l'avais fait alias ls='ls -lah'. La suppression de l’alias ou l’exécution de la solution en tant que script fonctionnait toutefois très bien.
David Farrell
Combinant cela avec un grep dans lsmod: lsmod | grep -i bluetooth> lsmodpattern.txt; cat lsmodpattern.txt | sed 's / | / /' | awk '{print $ 4}'> patternmodules.txt; cat patternmodules.txt | tr, '\ n' | pendant la lecture du module; do echo "Module: $ module"; if [-d "/ sys / module / $ module / parameters"]; puis ls / sys / module / $ module / parameters / | pendant la lecture du paramètre; do echo -n "Paramètre: $ paramètre ="; cat / sys / module / $ module / parameters / $ paramètre; terminé; Fi; fait
Ferroao
38

Vous pouvez utiliser la commande systool -vm <Module name>. Il vient avec le sysfsutilspaquet sur la plupart des systèmes.

Voici à quoi ressemblera la sortie, il y a une section 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
la source
4
La commande systoolfait partie du package sysfsutils. Et c'est la réponse que je pense, (mais pourrait avoir un exemple de sortie)
Volker Siegel
En utilisant ceci pour interroger une poignée de modules sur mon système, il semble que la Parameters:section ne soit présente que dans la sortie pour les modules qui exposent une /sys/modules/<module_name>/parametersinterface. Donc, malheureusement, cela ne satisfait pas la prémisse de la question.
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
la source
7

Vous pouvez utiliser la commande " modinfo (8) " pour obtenir les paramètres de temps de chargement disponibles pour un module. Par exemple:

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

Pour obtenir les paramètres des modules chargés, essayez de combiner la commande modinfo avec un simple "lsmod | awk '{print $ 1}'"

Un péché:

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
la source
14
-1 Cela montre seulement quelque chose comme une page de manuel mais ne dit pas quelles sont les valeurs.
Aleksandr Levchuk
1

Sortirait moche comme commentaire, mais j'ai fait cette vérification sur mon système ..

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

Pour vérifier si les modules sans paramètres dans / sys apparaissent comme ayant des paramètres dans modinfo mais je n’en ai trouvé aucun.

Je ne suis pas un expert, mais la différence est que modinfo lit le fichier de module lui-même pour les paramètres en cherchant dans les en-têtes .modinfo elf, alors que sys les lit depuis sa variante d'exécution.

Il se peut que vous ayez des paramètres modifiables au moment de l'exécution qui n'apparaissent pas comme une valeur de paramètre modinfo, mais puisque le format du module doit être assez fixe, je ne vois pas comment il est possible de passer un paramètre d'option à un module lors du chargement sans qu'il y ait de modification. une structure .modinfo pour ce lien dans.

Je suis curieux. Votre module suggère-t-il qu'il existe des paramètres passables avec modinfo lorsque vous le vérifiez de cette façon, mais il n'y en a aucun dans / sys pour cela? Certes, sur mon système, je n’ai trouvé aucun exemple utilisant la commande fournie ci-dessus.

Matthew Ife
la source
1

Pour iwlwifi et d'autres modules, j'ai utilisé ceci:

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

et je reçois cette sortie:

 /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

Donc je suppose que vous pourriez essayer quelque chose comme:

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

Faites-moi savoir si cela fonctionne pour vous.

Homero Esmeraldo
la source
grep .fonctionnerait probablement aussi bien avec moins de dactylographie. :)
dannysauer
Oui, dans ce cas,grep . /sys/module/<module_name>/parameters/*
Homero Esmeraldo
Quelque chose que je viens de remarquer - si vous utilisez un caractère générique et qu'il n'y a qu'un paramètre, il affiche simplement le contenu du fichier - pas de nom de fichier. Toutefois, si vous utilisez grep -Rle caractère générique et le laissez hors du répertoire des paramètres, le nom du fichier apparaît toujours. Points bonus: ajoutez-vous également --colorau grep et obtenez le nom de fichier + la valeur différenciée par des couleurs. ;) Par exemplegrep -R --color '.' /sys/module/block/parameters/
dannysauer
(peu importe que la personne qui pose la question pose spécifiquement des questions sur les modules qui n'exposent pas l'API / parameters: D)
dannysauer
0

En travaillant à partir du travail de katriel, vous pouvez obtenir un one-line (en apparence moche) en combinant les deux dans une boucle bash:

for i in `lsmod | awk '{print $1}'`; do echo "$i: "; modinfo $i | grep parm; done
Scribe
la source
2
utiliser awk pour renvoyer le premier argument via printest un peu grossier - utilisez while readplutôt la syntaxe: lsmod | while read a b; do echo $a:; modinfo $a | grep parm | sed -e 's/parm://'; done- cela ne change pas le fait que modinfo ne renvoie pas les valeurs des paramètres, bien que ...
the-wabbit du
7
et je pense que la question initiale concernait les paramètres utilisés , pas ceux disponibles .
asdmin