我是重建内核和内核模块等的新手,所以如果这是一个糟糕的问题,我深表歉意。
我正在运行 Centos 6.8 、2.6.32.642.el6.x86_64。我正在尝试了解设备驱动程序等,我的参考文本从重建内核开始。它的说明似乎有点过时,所以我也一直在谷歌搜索。
我重建了内核,对 main.c 进行了微小的更改,然后将生成的 bzImage 移动到启动目录中:
cp arch/x86/boot/bzImage /boot/vmlinuz-2.6.32-custom.el6.x86_64
然后,我向 etc/grub.conf 添加了一个条目,该条目与已有条目相同,但内核名称不同。
然后我重新启动,重新启动时,我收到内核恐慌,这表明它无法在 /lib/modules/2.6.32 中找到modules.dep
但我读到的所有内容都表明模块应位于 /lib/modules/2.6.32-custom.el6.x86_64,
因此,为了尝试这一点,我将 /lib/modules/2.6.32-642.el6.x86_64 软链接到 /lib/modules/2.6.32-custom.el6.x86_64:
ln -s /lib/modules/2.6.32-642.el6.x86_64 /lib/modules/2.6.32-642.el6.x86_64
但正如预期的那样,它没有修复错误,因为它(内核?)正在查找 /lib/modules/2.6.32/ 而不是 /lib/modules/2.6.32-custom.el6_x86_64
我的问题是,内核应该在哪里寻找模块和/或如何更改它,和/或是什么驱动它寻找它正在寻找的地方?
答案1
它通过将 VERSION 和 EXTRAVERSION 连接在一起(这是内核构建的标准部分),从内核源代码树根部的 Makefile 中获取版本。这将成为用于查找模块的子目录名称。 Red Hat 内核 RPM 是使用 rpmbuild 程序构建的,该程序在构建过程中将正确的 EXTRAVERSION 放入该文件中。您可能想以这种方式构建您的自定义内核。否则,您将必须自己编辑 Makefile 并手动应用所有补丁。