ฉันจะแสดงรายการพารามิเตอร์พารามิเตอร์ Linux ที่โหลดได้อย่างไร


77

มีวิธีมาตรฐานในการแสดงรายการค่าพารามิเตอร์ของโมดูล Linux ที่โหลดหรือไม่? ฉันกำลังสำรวจความจริงสำหรับคำตอบอื่นสำหรับคำถามนี้พารามิเตอร์โมดูลเคอร์เนล Linuxเนื่องจากโมดูลที่ฉันสนใจไม่มี/sys/modules/<module_name>/parametersส่วนต่อประสาน


4
คำตอบทั้งหมดถึงตอนนี้สมควรได้รับการลงคะแนนเสียงเพราะพวกเขาไม่ได้อ่าน OP อย่างระมัดระวัง ( "โมดูลฉันสนใจไม่ได้มีอินเตอร์เฟซ ... / พารามิเตอร์")! :-(
Dirk

คำตอบ:


54

คุณสามารถทำได้โดยใช้คำสั่งทางเดียวแบบง่ายซึ่งใช้ระบบไฟล์เสมือน / proc / modules และ / 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

คุณจะได้ผลลัพธ์เช่นนี้

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

หวังว่านี่จะช่วยได้


ขอบคุณ! นั่นเป็นประโยชน์อย่างมากในการวินิจฉัยปัญหาทุกชนิดเกี่ยวกับฮาร์ดแวร์ที่มีปัญหา!
Oz123

น่าอัศจรรย์และถ้าคุณผ่านโมดูล $ เช่นพารามิเตอร์ฟังก์ชั่นแทนที่จะได้รับจาก / proc / โมดูลคุณจะได้รับพารามิเตอร์ทั้งหมดของโมดูลที่กำหนดได้อย่างง่ายดาย
igordcard

@RaSca - คำตอบเหล่านี้เหมาะกับคุณหรือไม่?
Dan Garthwaite

alias ls='ls -lah'ในครั้งแรกนี้ไม่ได้ทำงานให้ฉันเป็นฉันมี การลบนามแฝงหรือการเรียกใช้โซลูชันในขณะที่สคริปต์ทำงานได้ดี
David Farrell

รวมสิ่งนี้กับ grep ใน lsmod: lsmod | grep -i bluetooth> lsmodpattern.txt; cat lsmodpattern.txt | sed 's / | / /' | awk '{print $ 4}'> patternmodules.txt; cat patternmodules.txt | tr, '\ n' | ในขณะที่อ่านโมดูล ทำเสียงสะท้อน "โมดูล: $ โมดูล"; ถ้า [-d "/ sys / โมดูล / $ โมดูล / พารามิเตอร์"]; จากนั้น ls / sys / module / $ โมดูล / พารามิเตอร์ / | ในขณะที่อ่านพารามิเตอร์ ทำ echo -n "พารามิเตอร์: $ parameter ="; cat / sys / โมดูล / $ โมดูล / พารามิเตอร์ / $ พารามิเตอร์; ทำ; Fi; เสร็จแล้ว
Ferroao

38

systool -vm <Module name>คุณสามารถใช้คำสั่ง มันมาพร้อมกับsysfsutilsแพ็คเกจในระบบส่วนใหญ่

นี่คือลักษณะที่เอาต์พุตจะมีลักษณะ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
คำสั่งที่เป็นส่วนหนึ่งของแพคเกจsystool sysfsutilsและนี่คือคำตอบที่ฉันคิดว่า (แต่อาจมีตัวอย่างผลลัพธ์)
Volker Siegel

การใช้สิ่งนี้เพื่อสอบถามโมดูลจำนวนหนึ่งในระบบของฉันดูเหมือนว่าParameters:ส่วนนี้จะปรากฏในเอาต์พุตสำหรับโมดูลที่เปิดเผย/sys/modules/<module_name>/parametersอินเตอร์เฟสเท่านั้น ดังนั้นน่าเสียดายที่สิ่งนี้ไม่ตรงตามเงื่อนไขของคำถาม
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

คุณสามารถใช้คำสั่ง" modinfo (8) " เพื่อรับพารามิเตอร์เวลาโหลดที่มีอยู่สำหรับโมดูล ตัวอย่างเช่น

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

สำหรับการรับพารามิเตอร์ของโมดูลที่โหลดให้ลองรวมคำสั่ง modinfo กับ "lsmod | awk '{print $ 1}'" แบบง่าย

ในขณะที่:

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 สิ่งนี้แสดงเฉพาะบางสิ่งบางอย่างเช่น man page แต่ไม่ได้บอกว่าค่าคืออะไร
Aleksandr Levchuk

1

จะออกมาน่าเกลียดเป็นความเห็น แต่ฉันก็ตรวจสอบนี้ในระบบของฉัน ..

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

เพื่อตรวจสอบว่าโมดูลที่ไม่มีพารามิเตอร์ใน / sys แสดงว่ามีพารามิเตอร์ใน modinfo หรือไม่ แต่ฉันหาไม่พบ

ฉันไม่มีความเชี่ยวชาญ แต่ความแตกต่างตรงนี้คือ modinfo อ่านไฟล์โมดูลของตัวเองเพื่อหาพารามิเตอร์โดยดูในส่วนหัว. modinfo elf ในขณะที่ sys กำลังอ่านสิ่งเหล่านี้จากตัวแปรรันไทม์

มันอาจจะเป็นไปได้ที่จะมีพารามิเตอร์ที่คุณสามารถปรับเปลี่ยนที่รันไทม์ซึ่งไม่ปรากฏเป็นค่าพารามิเตอร์ modinfo แต่เนื่องจากรูปแบบโมดูลควรจะคงสวย I dont จินตนาการเป็นไปได้เพื่อให้คุณผ่านพารามิเตอร์ตัวเลือกให้โมดูลเมื่อโหลดโดยไม่ต้องมีการ โครงสร้าง. modinfo สำหรับลิงก์

ฉันอยากรู้อยากเห็นโมดูลของคุณแนะนำว่ามีพารามิเตอร์ที่สามารถผ่านได้ด้วย modinfo เมื่อคุณตรวจสอบในลักษณะนั้น แต่ไม่มีใน / sys หรือไม่ แน่นอนในระบบของฉันฉันไม่พบตัวอย่างใด ๆ ของสิ่งนี้โดยใช้คำสั่งที่ให้ไว้ข้างต้น


1

สำหรับ iwlwifi และโมดูลอื่น ๆ ฉันใช้สิ่งนี้:

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

และฉันได้ผลลัพธ์นี้:

 /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

ดังนั้นฉันคิดว่าคุณสามารถลองสิ่งที่ชอบ:

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

แจ้งให้เราทราบว่าสิ่งนี้เหมาะกับคุณหรือไม่


grep .อาจจะทำงานได้ดีเช่นกันโดยพิมพ์น้อยลง :)
dannysauer

ใช่ในกรณีนี้grep . /sys/module/<module_name>/parameters/*
Homero Esmeraldo

สิ่งที่ฉันเพิ่งสังเกตุ - ถ้าคุณใช้ไวด์การ์ดและมีเพียงพารามิเตอร์เดียวมันแค่แสดงเนื้อหาของไฟล์ - ไม่มีชื่อไฟล์ อย่างไรก็ตามหากคุณใช้grep -Rและไม่ใช้สัญลักษณ์แทนออกจากไดเรกทอรีพารามิเตอร์มันจะแสดงชื่อไฟล์เสมอ คะแนนโบนัส: เพิ่ม--colorไปยัง grep และรับชื่อไฟล์ + ค่าแตกต่างกันตามสี ;) ตัวอย่างเช่นgrep -R --color '.' /sys/module/block/parameters/
dannysauer

(ไม่ต้องสนใจเลยว่าบุคคลที่ถามคำถามนั้นถามเฉพาะเกี่ยวกับโมดูลที่ไม่เปิดเผย / พารามิเตอร์ API: D) โดยเฉพาะ
dannysauer

0

จากการทำงานของ katriel คุณสามารถรับหนึ่งซับ (น่าเกลียด) เข้าด้วยกันโดยรวมทั้งสองเข้าด้วยกันใน bash loop:

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

2
การใช้ awk สำหรับการส่งคืนอาร์กิวเมนต์แรกผ่านprintค่อนข้างแย่ - ใช้while readไวยากรณ์แทน: lsmod | while read a b; do echo $a:; modinfo $a | grep parm | sed -e 's/parm://'; done- มันไม่เปลี่ยนความจริงที่ modinfo ไม่ส่งคืนค่าพารามิเตอร์แม้ว่า ...
the-wabbit

7
และผมคิดว่าคำถามเดิมเกี่ยวกับที่ใช้พารามิเตอร์ไม่สามารถใช้ได้คน
asdmin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.