首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >模块缺少/sys/模块/*/参数目录,如何启用它们?

模块缺少/sys/模块/*/参数目录,如何启用它们?
EN

Unix & Linux用户
提问于 2023-02-04 06:48:33
回答 1查看 388关注 0票数 2

我的许多模块缺少/sys/模块/*/参数目录,我无法检查加载的模块参数。

代码语言:javascript
运行
复制
# 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

最值得注意的是,我感兴趣的是:

代码语言:javascript
运行
复制
# 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

但是,虚拟人没有参数,这是一个假人:

代码语言:javascript
运行
复制
# 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,也找到了dummy/parameters目录。

如何启用该目录,以便获得内核模块参数?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2023-02-04 10:40:59

为了使模块的参数在/sys/module/*/parameters中可见,模块需要为每个参数提供一个module_param_cb()回调函数。这些函数必须“知道在哪里查找”各个参数的当前设置,因此sysfs文件系统驱动程序可以根据需要使用它们来计算参数及其状态。

如果模块使用module_param(name, type, perm)module_param_named(name, value, type, perm)宏声明其参数,则将自动生成回调函数,除非perm被指定为0。

dummy模块声明其模块参数如下:

代码语言:javascript
运行
复制
module_param(numdummies, int, 0);
MODULE_PARM_DESC(numdummies, "Number of dummy pseudo devices");

显式地将perm指定为0,这使得参数在sysfs中不可见。

nvidia模块声明自己的NV_MODULE_PARAMETER(x)NV_MODULE_STRING_PARAMETER(x)宏(在NVidia驱动程序包中的common/inc/nv-linux.h中),这些宏使用module_param()perm参数设置为0:

代码语言:javascript
运行
复制
#define NV_MODULE_PARAMETER(x)          module_param(x, int, 0)
#define NV_MODULE_STRING_PARAMETER(x)   module_param(x, charp, 0)

驱动程序包中的其他模块,如nvidia_modesetnvidia_drmnvidia_uvm,确实以更正常的方式使用module_param(),并且这些模块在/sys/module/*/parameters中确实有它们的参数。

显然,nvidia模块内部将其参数处理为“注册表项”(参见驱动程序包中的nvidia/nv-reg.h )。也许这是一种为NVidia驱动程序参数提供跨平台接口的尝试,这至少在某种意义上与Windows和Linux相似吧?

还请注意,nvidia模块提供了自己的/proc/driver/nvidia/params伪文件,它提供了一个虚拟文件中的所有参数。

因此,简单地说:我建议您看一下/proc/driver/nvidia/params,看看它是否适合您的需要。如果没有,而且如果您愿意构建NVidia驱动程序的自定义版本,您可以尝试更改NV_MODULE_PARAMETER()NV_MODULE_STRING_PARAMETER()宏的定义,使其具有0以外的perm值,例如:

代码语言:javascript
运行
复制
#define NV_MODULE_PARAMETER(x)          module_param(x, int, 0400)
#define NV_MODULE_STRING_PARAMETER(x)   module_param(x, charp, 0400)

若要使所有以这种方式声明的参数使用/sys/module/*/parameters接口可读,仅由根用户声明。

如果它有效,您可以向NVidia发送一个增强请求。

票数 5
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/734288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档