Làm cách nào để liệt kê các giá trị tham số mô-đun Linux được tải?


77

Có cách nào chuẩn để liệt kê các giá trị tham số của mô-đun Linux đã tải không? Về cơ bản, tôi đang tìm kiếm một câu trả lời khác cho câu hỏi về tham số mô-đun hạt nhân Linux này , bởi vì mô-đun tôi quan tâm không có /sys/modules/<module_name>/parametersgiao diện.


4
Tất cả các câu trả lời cho đến nay đều xứng đáng được bình chọn, vì họ không đọc kỹ OP ("mô-đun tôi quan tâm không có giao diện ... / tham số")! :-(
Dirk

Câu trả lời:


54

Bạn có thể làm điều đó bằng cách sử dụng lệnh một chiều đơn giản này, sử dụng / Proc / mô-đun và / sys hệ thống tệp ảo:

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

Bạn sẽ có được một đầu ra như thế này:

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

Hi vọng điêu nay co ich.


Cảm ơn! Điều đó rất hữu ích để chẩn đoán tất cả các loại vấn đề với phần cứng có vấn đề!
Oz123

Thật tuyệt vời, và nếu bạn vượt qua mô-đun $ như tham số hàm thay vì lấy nó từ / Proc / mô-đun, bạn dễ dàng nhận được tất cả các thông số của mô-đun đã cho.
igordcard

@RaSca - Có câu trả lời nào trong số này có hiệu quả với bạn không?
Dan Garthwaite 2/2/2015

Lúc đầu, điều này không làm việc cho tôi như tôi đã có alias ls='ls -lah'. Loại bỏ bí danh hoặc chạy giải pháp như một kịch bản làm việc tuyệt vời mặc dù.
David Farrell

Kết hợp điều này với một grep trong lsmod: lsmod | grep -i bluetooth> lsmodpotype.txt; cat lsmodpotype.txt | sed 's / | / /' | awk '{print $ 4}'> patternmodules.txt; cat patternmodules.txt | tr, '\ n' | trong khi đọc mô-đun; làm tiếng vang "Module: $ module"; if [-d "/ sys / module / $ module / tham số"]; sau đó ls / sys / module / $ module / tham số / | trong khi đọc tham số; làm echo -n "Tham số: $ tham số ="; cat / sys / module / $ module / tham số / $ tham số; làm xong; fi; xong
Ferroao

38

Bạn có thể sử dụng lệnh systool -vm <Module name>. Nó đi kèm với sysfsutilsgói trên hầu hết các hệ thống.

Đây là những gì đầu ra sẽ như thế nào, có một phần 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
Lệnh systoolnày là một phần của gói sysfsutils. Và đây là câu trả lời tôi nghĩ, (nhưng có thể có đầu ra ví dụ)
Volker Siegel

Sử dụng điều này để truy vấn một số ít các mô-đun trên hệ thống của tôi, có vẻ như Parameters:phần này chỉ xuất hiện trong đầu ra cho các mô-đun hiển thị /sys/modules/<module_name>/parametersgiao diện. Vì vậy, thật không may, điều này không thỏa mãn tiền đề của câu hỏi.
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

Bạn có thể sử dụng lệnh " modinfo (8) " để nhận các tham số thời gian tải có sẵn cho một mô-đun. Ví dụ:

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

Để nhận được các tham số của các mô-đun được tải, hãy thử kết hợp lệnh modinfo với một "lsmod | awk '{print $ 1}'" đơn giản

Như trong:

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 Điều này chỉ hiển thị một cái gì đó giống như một trang người đàn ông nhưng không nói giá trị là gì.
Alexanderr Levchuk

1

Sẽ trở nên xấu xí như một bình luận, nhưng tôi đã kiểm tra hệ thống này ..

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

Để kiểm tra xem các mô-đun không có tham số trong / sys có hiển thị là có tham số trong modinfo không nhưng tôi không thể tìm thấy bất kỳ.

Tôi không phải là chuyên gia, nhưng sự khác biệt ở đây là modinfo đọc chính tệp mô-đun cho các tham số bằng cách tìm trong các tiêu đề elf .modinfo, trong khi sys đang đọc chúng từ biến thể thời gian chạy của nó.

Có thể có các tham số bạn có thể sửa đổi trong thời gian chạy không xuất hiện dưới dạng giá trị tham số modinfo, nhưng vì định dạng mô-đun nên khá cố định. Tôi không thể tưởng tượng được bạn có thể chuyển tham số tùy chọn cho mô-đun khi tải mà không có một cấu trúc .modinfo cho nó được liên kết trong.

Tôi tò mò, mô-đun của bạn có gợi ý rằng có các tham số có thể vượt qua với modinfo khi bạn kiểm tra theo cách đó nhưng không có trong / sys cho nó không? Chắc chắn trên hệ thống của tôi, tôi không thể tìm thấy bất kỳ ví dụ nào về điều này bằng cách sử dụng lệnh được cung cấp ở trên.


1

Đối với iwlwifi và các mô-đun khác, tôi đã sử dụng điều này:

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

và tôi nhận được kết quả này:

 /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

Vì vậy, tôi đoán bạn có thể thử một cái gì đó như:

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

Hãy cho tôi biết, nếu việc này giúp ích cho bạn.


grep .có lẽ cũng sẽ làm việc tốt với ít gõ. :)
dannysauer

Vâng, trong trường hợp này,grep . /sys/module/<module_name>/parameters/*
Homero Esmeraldo

Một cái gì đó tôi chỉ nhận thấy - nếu bạn sử dụng ký tự đại diện và chỉ có một tham số, nó chỉ hiển thị nội dung tệp - không có tên tệp. Tuy nhiên, nếu bạn sử dụng grep -Rvà bỏ ký tự đại diện khỏi thư mục tham số, nó luôn hiển thị tên tệp. Điểm thưởng: cũng thêm --colorvào grep và lấy tên tệp + giá trị được phân biệt bằng màu sắc. ;) Ví dụgrep -R --color '.' /sys/module/block/parameters/
dannysauer

(đừng bận tâm rằng người hỏi câu hỏi đã hỏi cụ thể về các mô-đun không hiển thị API / tham số: D)
dannysauer

0

Làm việc với công việc của katriel, bạn có thể có được một lớp lót (được thừa nhận là xấu xí) bằng cách kết hợp hai trong số chúng trong một vòng lặp bash:

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

2
sử dụng awk để chỉ trả về đối số đầu tiên thông qua printlà hơi thô thiển - while readthay vào đó hãy sử dụng cú pháp: lsmod | while read a b; do echo $a:; modinfo $a | grep parm | sed -e 's/parm://'; done- nó không thay đổi thực tế rằng modinfo không trả về các giá trị tham số, mặc dù ...
the-wợi

7
và tôi nghĩ rằng câu hỏi ban đầu là về các tham số được sử dụng , không phải là các tham số có sẵn .
asdmin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.