我有一台使用已重新安装的 Qualcomm Atheros 驱动程序的设备。为了正确使用设备,我需要使用以下选项加载模块:
sudo modprobe -r ath10k_pci # remove module
sudo modprobe -r ath10k_core # remove module
sudo modprobe ath10k_core rawmode=1 cryptmode=1
sudo modprobe ath10k_pci
我可以使用以下命令验证模块是否已正确加载systool -v -m ath10k_core
:
Module = "ath10k_core"
Attributes:
coresize = "503808"
initsize = "0"
initstate = "live"
refcnt = "1"
srcversion = "8846560394C80047DEEC13F"
taint = ""
uevent = <store method only>
Parameters:
coredump_mask = "3"
cryptmode = "1"
debug_mask = "0"
fw_diag_log = "N"
rawmode = "Y"
skip_otp = "N"
uart_print = "N"
Sections:
现在我想在启动时自动执行此操作。我使用了这篇文章:systemd:在启动时自动执行 modprobe 命令
我创建了一个文件/etc/modules-load.d/ath10k_core.conf
:
options ath10k_core rawmode=1 cryptmode=1
但是当我启动时,结果systool -v -m ath10k_core
是:
Module = "ath10k_core"
Attributes:
coresize = "503808"
initsize = "0"
initstate = "live"
refcnt = "1"
srcversion = "8846560394C80047DEEC13F"
taint = ""
uevent = <store method only>
Parameters:
coredump_mask = "3"
cryptmode = "0"
debug_mask = "0"
fw_diag_log = "N"
rawmode = "N"
skip_otp = "N"
uart_print = "N"
Sections:
所以模块没有正确加载,我需要手动运行它。
该命令的结果journalctl -u systemd-modules-load.service
是:
déc. 07 17:07:18 ubuntu-machine systemd-modules-load[263]: Failed to find module 'options ath10k_core rawmode=1 cryptmode=1'
我正在运行 Ubuntu 20.04。我的配置有什么问题?
您正在查看错误的配置文件。
/etc/modules-load.d/
将告诉系统在引导阶段加载内核模块,即使没有立即需要它们:这通常被复制到initramfs引导文件中,因此会提前发生。因为语法错误,目前该文件告诉加载一个内核模块
options options ath10k_core rawmode=1 cryptmode=1
,该模块调用失败,因为没有这样的模块。这部分不会告诉系统向模块添加选项。实际上很少需要。
要定义自定义模块选项,有
/etc/modprobe.d/
(和其他系统保留的地方):modprobe
它也由内核作为帮助程序运行,以加载刚刚检测到的硬件模块(如前所述,通过 PCI ID 等)。所以内容应该被移动,例如
/etc/modprobe.d/ath10k_core.conf
:我认为您根本不必提前加载它(通过使用
ath10k_core
可能后跟ath10k_pci
in的简单行/etc/modules-load.d/ath10k_core.conf
)但是如果选择这样做,update-initramfs -u
可能会建议运行一次,因此这些选项也会被复制到initramfs中,否则它可能仍然会失败直到下一次内核升级。