モジュールに /sys/module/*/parameters ディレクトリがありません。有効にする方法は?

モジュールに /sys/module/*/parameters ディレクトリがありません。有効にする方法は?

多くのモジュールに/sys/module/*/parametersディレクトリがないため、モジュールがロードするパラメータを確認できません。

# printf "%s\n" /sys/module/*/parameters | wc -l
125
# lsmod | wc -l
151
# comm -13 <(printf "%s\n" /sys/module/*/parameters | xargs dirname | xargs basename -a | sort) <(lsmod | awk '{print $1}' | sort) | fmt
Module aesni_intel at24 blake2b_generic bpf_preload btbcm btintel
btmtk btrfs btrtl crc16 crc32_pclmul crc32c_generic crc32c_intel
crct10dif_pclmul cryptd crypto_simd crypto_user dummy ecdh_generic fat
gf128mul ghash_clmulni_intel i2c_smbus iTCO_vendor_support iTCO_wdt
intel_cstate intel_pmc_bxt intel_rapl_common intel_rapl_msr intel_uncore
ip6_tables ip6t_REJECT ip6table_filter ip6table_mangle ip6table_nat
ip6table_raw ip_tables ipt_REJECT iptable_filter iptable_mangle
iptable_nat iptable_raw irqbypass joydev ledtrig_audio libcrc32c lpc_ich
mac_hid mei mei_hdcp mei_me mei_pxp mei_wdt nf_conntrack_broadcast
nf_conntrack_netlink nf_conntrack_pptp nf_defrag_ipv4 nf_defrag_ipv6
nf_log_syslog nf_nat nf_nat_amanda nf_nat_ftp nf_nat_h323 nf_nat_irc
nf_nat_pptp nf_nat_sip nf_nat_snmp_basic nf_nat_tftp nf_reject_ipv4
nf_reject_ipv6 nfnetlink nfnetlink_log nvidia nvme_common parport
polyval_clmulni polyval_generic ppdev raid6_pq rapl sha512_ssse3
snd_hda_codec_conexant snd_hda_codec_generic snd_hda_core snd_hwdep ts_kmp
tun uas vboxnetadp vboxnetflt vfat vmd x_tables xhci_pci xhci_pci_renesas
xor xt_CT xt_LOG xt_NFLOG xt_addrtype xt_comment xt_conntrack xt_hashlimit
xt_mark xt_multiport xt_tcpudp

最も注目すべきものは次のとおりです。

# lsmod | grep nvidia
nvidia_drm             77824  20
nvidia_modeset       1515520  40 nvidia_drm
nvidia_uvm           2891776  0
video                  69632  1 nvidia_modeset
nvidia              61472768  2179 nvidia_uvm,nvidia_modeset
# ls /sys/module/nvidia/parameters
ls: cannot access '/sys/module/nvidia/parameters': No such file or directory

ただし、ダミーにはパラメータはありません。これはただの山です。

# modprobe dummy numdummies=12
# lsmod | grep dummy
dummy                  16384  0
root@leonidas /root
# ls /sys/module/dummy/parameters
ls: cannot access '/sys/module/dummy/parameters': No such file or directory
# ip a | grep dummy | wc -l
12

私が見つけたhttps://bugs.launchpad.net/ubuntu/+source/linux/+bug/1774731また、欠落している仮想/パラメータディレクトリに関する情報です。

カーネルモジュールパラメータを取得するためにこのディレクトリをどのように有効にしますか?

ベストアンサー1

モジュールのパラメータを表示するには、モジュールが/sys/module/*/parametersmodule_param_cb()パラメータにコールバック関数を提供する必要があります。これらの関数はそのパラメータの現在の設定を「探す場所を知る必要がある」ため、sysfsファイルシステムドライバはそれを使用して要求に応じてパラメータとその状態を見つけることができます。

モジュールがまたはマクロを使用してパラメータを宣言する場合、module_param(name, type, perm)0を指定しないと、module_param_named(name, value, type, perm)コールバック関数が自動的に生成されます。perm

このdummyモジュールは次のようにモジュールパラメータを宣言します。

module_param(numdummies, int, 0);
MODULE_PARM_DESC(numdummies, "Number of dummy pseudo devices");

明示的に0に指定され、permsysfsにパラメータが表示されなくなります。

メインモジュールは、使用法パラメータが0に設定されたnvidia独自のNV_MODULE_PARAMETER(x)マクロNV_MODULE_STRING_PARAMETER(x)common/inc/nv-linux.hNVidiaドライバパッケージ内)を宣言します。module_param()perm

#define NV_MODULE_PARAMETER(x)          module_param(x, int, 0)
#define NV_MODULE_STRING_PARAMETER(x)   module_param(x, charp, 0)

ドライバパッケージの他のモジュール(たとえば、nvidia_modesetおよび)は実際にはnvidia_drmより一般的な方法でnvidia_uvm使用され、module_param()これらのモジュールには予想されるパラメータがあります/sys/module/*/parameters

明らかに、nvidiaモジュールはいわゆる「レジストリキー」と呼ばれるパラメータを内部的に処理します(nvidia/nv-reg.hドライバパッケージを参照)。おそらく、これは少なくともWindowsとLinuxの間で似ているという点で、NVidiaドライバパラメータのクロスプラットフォームインタフェースを提供しようとしますか?

また、このモジュールは、1つのダミーファイルにすべてのパラメータを提供するnvidia独自のダミーファイルも提供します。/proc/driver/nvidia/params

簡単に言えば、/proc/driver/nvidia/paramsそれがあなたのニーズに合っていることを確認することをお勧めします。そうではなく、NVidiaドライバのカスタムバージョンを作成したい場合は、マクロのNV_MODULE_PARAMETER()定義をゼロ以外の値にNV_MODULE_STRING_PARAMETER()するように変更してみてください。たとえば、次のようになります。perm

#define NV_MODULE_PARAMETER(x)          module_param(x, int, 0400)
#define NV_MODULE_STRING_PARAMETER(x)   module_param(x, charp, 0400)

/sys/module/*/parametersこの方法で宣言されたすべてのパラメータは、このインターフェイスを使用するrootユーザーのみが読み取ることができます。

有効な場合は、NVidiaに改善要求を送信できます。

おすすめ記事