web-dev-qa-db-fra.com

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

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

80
cdleary

Vous pouvez le faire en utilisant cette commande simple à 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.

56
RaSca

Vous pouvez utiliser la commande systool -vm <Module name>. Il est fourni avec le package sysfsutils 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"
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

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)

Quant à 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
8
katriel

Serait laid en tant que 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'ai pas pu en trouver.

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

Il peut être possible d'avoir des paramètres que vous pouvez modifier au moment de l'exécution qui n'apparaissent pas comme une valeur de paramètre modinfo, mais comme le format du module doit être assez fixe, je ne pense pas qu'il soit possible pour vous de passer un paramètre d'option à un module lors du chargement sans il y a une structure .modinfo pour elle liée.

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 pas dans/sys? Certes, sur mon système, je n'ai pu trouver aucun exemple de cela en utilisant la commande fournie ci-dessus.

1
Matthew Ife

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

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

et j'obtiens 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.

0
Homero Esmeraldo

En travaillant avec le travail de katriel, vous pouvez obtenir un one-liner (certes laid) en combinant les deux dans une boucle bash:

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