로드 된 Linux 모듈 매개 변수 값을 어떻게 나열합니까?


77

로드 된 Linux 모듈의 매개 변수 값을 나열하는 표준 방법이 있습니까? 필자 는 관심이있는 모듈에 인터페이스 가 없기 때문에이 Linux 커널 모듈 매개 변수 질문에 대한 다른 대답을 본질적으로 조사 하고 /sys/modules/<module_name>/parameters있습니다.


4
OP에 대해주의 깊게 읽지 않았기 때문에 지금까지의 모든 답변에 대한 투표권이 필요합니다 ( "관심있는 모듈 에는 ... / parameters 인터페이스 가 없습니다 ")! :-(
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을 / proc / modules에서 가져 오는 대신 함수 매개 변수로 전달하면 주어진 모듈의 모든 매개 변수를 쉽게 얻을 수 있습니다.
igordcard

@RaSca-이 답변 중 어느 것이 효과가 있었습니까?
Dan Garthwaite의

처음에 이것은 내가 가진 것처럼 작동하지 않았습니다 alias ls='ls -lah'. 별명을 제거하거나 스크립트로 솔루션을 실행하면 효과적입니다.
David Farrell

이것을 lsmod의 grep과 결합 : lsmod | grep -i bluetooth> lsmodpattern.txt; 고양이 lsmodpattern.txt | sed 's / | / /'| awk '{print $ 4}'> patternmodules.txt; cat patternmodules.txt | tr, '\ n'| 모듈을 읽는 동안; echo "Module : $ module"; [-d "/ sys / module / $ module / parameters"] 인 경우; 그런 다음 ls / sys / module / $ module / parameters / | 파라미터를 읽는 동안; echo -n "매개 변수 : $ parameter ="; 고양이 / sys / module / $ module / parameters / $ parameter; 끝난; 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 이것은 맨 페이지와 같은 것을 보여 주지만 그 값이 무엇인지는 말하지 않습니다.
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 매개 변수 값으로 표시되지 않는 매개 변수를 가질 수는 있지만 모듈 형식이 고정되어 있어야하기 때문에 모듈 없이 로드 할 때 옵션 매개 변수를 모듈에 전달할 수 있다고 생각 하지 않습니다. 링크 된 .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매개 변수 디렉토리에서 와일드 카드 를 사용 하고 그대로두면 항상 파일 이름이 표시됩니다. 보너스 포인트 : --colorgrep에 추가 하고 파일 이름 + 값을 색상으로 구분하십시오. ;) 예 :grep -R --color '.' /sys/module/block/parameters/
dannysauer

(질문을하는 사람이 / parameters API : D를 노출시키지 않는 모듈에 대해 특별히 물었다는 것을 염두에 두지 마십시오)
dannysauer

0

katriel의 작업을 수행하면 두 개를 bash 루프로 결합하여 (거의 추악한) 원 라이너를 얻을 수 있습니다.

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이 ...하지만, 매개 변수 값을 반환하지 않는다는 사실은 변경되지 않습니다
더 - wabbit

7
나는 원래의 질문이에 대해 생각 사용하는 매개 변수가 아닌 가능한 것.
asdmin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.