如何检查模块是否加载了自定义配置?

如何检查模块是否加载了自定义配置?

在回答中辣椒555 为了如何创建系统文件 /etc/modprobe.d/ath9k.conf?显示您可以为内核模块创建配置文件。现在的问题是,如何验证配置文件中设置的选项是否已生效sudo modprobe ath9k

我尝试检查的特定选项是ps_enable。但是,执行以下操作

$ modinfo ath9k | grep ps_enable
parm:           ps_enable:Enable WLAN PowerSave (int)

仅解释参数是什么而不是其当前值。

答案1

总结:查看/sys/module/ath9k/parameters/或执行cat "$(readlink -f /sys/class/net/wlp2s0/device/driver/)"/module/parameters/<param_name>

显然这些信息包含在/sys文件系统中。根据Gilles 的回答在相关帖子中,为了找到接口正在使用的驱动程序,您需要执行

readlink /sys/class/net/wlan0/device/driver

这将提供相对路径,如

../../../../bus/pci/drivers/ath5k

就我而言,由于systemd 和预测接口命名,接口名称不同,并产生

$  readlink /sys/class/net/wlp2s0/device/driver
../../../../bus/pci/drivers/ath9k

生成的目录路径包含子目录module/parameters/,其中每个参数将包含其当前值的文件。因此,如果我编辑文件/etc/modprobe/ath9k.conf并重新插入模块,结果如下:

# After editing the conf file to set parameter to 1
$ sudo sh -c 'modprobe -r ath9k ; sleep 3; modprobe ath9k'
$ sudo cat  /sys/class/net/wlp2s0/device/driver/../../../../bus/pci/drivers/ath9k/module/parameters/ps_enable
1
# after editing the file and setting parameter to 0
$ sudo sh -c 'modprobe -r ath9k ; sleep 3; modprobe ath9k'
$ sudo cat  /sys/class/net/wlp2s0/device/driver/../../../../bus/pci/drivers/ath9k/module/parameters/ps_enable
0

该命令也可以组合。

$ cat  "$(readlink -f /sys/class/net/wlp2s0/device/driver/)"/module/parameters/ps_enable
0

如果您已经知道接口使用的是什么驱动程序,那么替代/sys方法也可能是 更可取的,因此您可以跳过该部分。在我的具体情况下/sys/modulesreadlink

/sys/module/ath9k/parameters/ps_enable

或者

/sys/module/ath9k/drivers/pci\:ath9k/module/parameters/

根据sysfs(5)手册,“此子目录包含加载到内核的每个模块的一个子目录。”


还有另一种方法可以确定接口正在使用哪个驱动程序(如果有必要,尽管我正在编辑模块的配置文件,这意味着我已经知道接口使用哪个模块;但如果你需要,我会把它作为备选方案)。如果你有桌面环境并且dbus正在运行,以及qdbusdbus-send安装后,可以通过网络管理器的 dbus 接口查询此类信息(尽管它需要找出每个设备的对象路径,并且可能最好用 Python 或 C 编写)

$ qdbus --system org.freedesktop.NetworkManager /org/freedesktop/NetworkManager/Devices/14 org.freedesktop.NetworkManager.Device.Driver
ath9k

相关内容