Ubuntu 15.10 修改后的内核模块无法加载 - 必须手动完成

Ubuntu 15.10 修改后的内核模块无法加载 - 必须手动完成

一个名为 alx 的模块,它驱动我的 Qualcomm AR8161 以太网,在启动时加载并可通过 lsmod 看到。

这个模块有缺陷。我找到了补丁,下载了正在运行的内核的源代码,修补了 alx/ 文件,在找到方法后,重建了 alx.ko 模块文件。在 rmmod 了旧的 alx 并 modprobe -v 我的新版本后,以太网开始正常工作。好极了!问题解决了。

令人烦恼的是,如果我直接将原始 alx.ko 与新 alx.ko 交换,它仍然会在启动时加载旧版本?此外,如果我删除全部alx.ko 文件完全来自 /lib/modules,alx 模块仍然在启动时加载???所以问题是:它从哪里获取它,以及如何让系统加载我的替换版本(完全相同的文件名)?

目前,我在启动时发出 rmmod alx; modprobe -v alx,但我希望它自动发生。

答案1

常规做法是将新模块命名为略有不同的名称,例如 alx_fixed.ko,并将原始模块列入黑名单。有关如何将模块列入黑名单的说明可在此处找到。 http://linuxconfig.org/how-to-blacklist-a-module-on-ubuntu-debian-linux 将新模块放置在 /lib/modules/your-kernel-version/kernel/drivers/net/ 中后,您需要运行命令“sudo depmod -a”来更新已安装模块列表。

我怀疑以太网驱动程序是否存在这种情况,但有些模块是在启动时加载的,因此您可能还需要运行“update-initramfs”。 https://wiki.ubuntu.com/Initramfs

至于即使你删除了模块,它们又从何而来?你运行的是什么内核版本?你确定你从正确的内核版本中删除了它们吗?一般来说,删除系统文件不是一个好主意,因为它会导致系统不稳定。

答案2

我将新模块放入 /lib/modules/4.2.0-27-generic/updates/dkms/,然后运行 ​​depmod -av |grep alx 和 update-intramfs -uv|grep alx 验证它只选取了我修改过的模块,而不是原始模块。在后续的启动日志中:alx:模块验证失败:缺少签名和/或所需密钥 - 污染内核,但它仍然会加载并且问题得到解决。

相关内容