如何管理在 Debian 中从源代码构建的内核模块?

如何管理在 Debian 中从源代码构建的内核模块?

我正在一台全新的 Mac Mini 上安装 Debian squeeze,其中的 Broadcom NIC 仅适用于Broadcom 的最新 tg3 模块。我可以很容易地构建这个模块,但执行手动构建并覆盖内核包附带的 tg3.ko 似乎是一个临时解决方案,因为:

  • 我构建模块时执行的一些相当复杂的步骤并没有实现自动化
  • 内核升级会覆盖我定制的模块,从而破坏以太网

我读了如何构建内核模块的 Debian 包?但到目前为止,我研究过的技术似乎都是针对打包模块的情况,不在内核包中. 假设我想替换内核包中已经提供的模块,而不是添加新模块,我该如何实现此目的而不诉诸脆弱的临时解决方案?

答案1

我能够使用 DKMS 来实现这一点。还有一个额外的问题,那就是不能破坏内核包中已经存在的 tg3.ko。我了解到,在 下可以有一个“更新”目录。/lib/modules/$KERNELVERSION这样,我就不必担心覆盖另一个包的文件,而且还有一个简单的方法可以返回到默认版本。更多信息请见:

http://www.linuxvox.com/2009/10/update-kernel-modules-the-smart-and-safe-way/

这里有一个关于 DKMS 流程的很好的教程,它还描述了当 DKMS 模块将其模块放入 /updates 时的一些 Ubuntu/Debian 特定的魔法:

https://wiki.kubuntu.org/Kernel/Dev/DKMSPackaging

我用于此特定模块的 dkms.conf:

包名称="tg3"
PACKAGE_VERSION="3.124c"
BUILT_MODULE_NAME[0]="tg3"
DEST_MODULE_LOCATION[0]="/更新"
MAKE[0]="'make' KVER=$kernelver"
自动安装=“是”

这其中的困难部分是知道'make'在 中引用$MAKE,因为如果没有引用,DKMS 将附加KERNELRELEASE=...make,这会破坏这个特定的构建系统。

我能够在 squeeze chroot 中完成所有构建,运行dkms mkdeb,然后在 Mini 上安装生成的 deb 包以获得胜利。

答案2

查看知识管理系统。它可以在内核升级时重新编译内核模块。例如 nvidia 就使用这个。

相关内容