在我的 Linux 发行版中,我使用 Edimax EW-7811UTC Wi-Fi USB 适配器。
我已经通过以下步骤从源安装了驱动程序
rtl8812au
:
88XXau.ko
(命令make
)/lib/modules/$(uname -r)/kernel/drivers/net/wireless/
(命令make install
)此驱动程序支持许多 Wi-Fi 适配器,但只有当 Wi-Fi 适配器正是 Edimax EW-7811UTC 时,我才需要 编写脚本或其他东西来加载模块
88XXau.ko
。
我想展示2个场景:
通过命令
lsmod
,我检查了在启动时如果Wifi-USB适配器未插入,则模块88XXau.ko
未加载。
当我插入WiFi-USB适配器时,内核和
udev
自动加载模块(我已经通过命令lsmod | grep 88XXau
检查了这一点),但我找不到执行此加载的特定udev rule
。
我还没有写任何
udev rule
,所以在Linux发行版中必须存在一个默认的udev rule
负责内核模块的自动加载88XXau.ko
。
为了实现我的目标,即仅当 WiFi 适配器是 Edimax EW-7811UTC 时才加载模块,我需要禁用自动功能,所以我来这里询问是否有人可以向我展示一个找到默认值的程序
udev rule
对于这个司机?
谢谢
https://www.linuxfromscratch.org/lfs/view/development/chapter09/udev.html
编译为模块的设备驱动程序可能内置有别名。 别名在 modinfo 程序的输出中可见,并且是 通常与支持的设备的总线特定标识符有关 通过一个模块。例如snd-fm801驱动支持PCI设备 供应商 ID 为 0x1319,设备 ID 为 0x0801,别名为 “pci:v00001319d00000801svsdbc04sc01i*”。对于大多数设备来说,总线 驱动程序导出将处理设备的驱动程序的别名 通过 sysfs。例如,/sys/bus/pci/devices/0000:00:0d.0/modalias 文件 可能包含字符串 “pci:v00001319d00000801sv00001319sd00001319bc04sc01i00”。默认 udev 提供的规则将导致 udevd 调用 /sbin/modprobe 包含 MODALIAS uevent 环境的内容 变量(应该与模态的内容相同 sysfs 中的文件),从而加载别名与此匹配的所有模块 通配符扩展后的字符串。
https://wiki.archlinux.org/title/Modalias
$ cd /usr/lib/udev/rules.d
$ grep -r MODALIAS .
80-drivers.rules
5:ENV{MODALIAS}=="?*", RUN{builtin}+="kmod load '$env{MODALIAS}'"