我有一个关于内核安装的问题。我下载了新版本的 net-next 内核源代码并执行了以下步骤:
make allyesconfig
make -j16
make modules_install
make install
问题是,当我尝试执行时make install
,出现“找不到模块”错误。我在这里很困惑,因为其他人能够使用相同的过程来制作内核,而我却无法做同样的事情(我们都有 root 权限)。我需要做一些额外的事情来确保这些模块可见/可用吗?
答案1
当make install
被调用时,它将调用特定于发行版的脚本来构建 initrd.img,该脚本将查找该发行版所需的所有模块,但是因为您刚刚将所有模块作为内置 via 编译到内核中make allyesconfig
,所以该脚本查找模块失败。
我刚才无法重现您的问题,我记得“找不到模块”只是警告,我总是忽略它,因为 initrd.img 已成功构建并且新内核已成功启动。如果“找不到模块”失败,您应该通过以下方式手动将此类模块从内置模块重新配置为真正的可加载模块make menuconfig
:“找不到模块”消息包含模块名称,使用该名称进行搜索Makefiles 找出哪个 CONFIG_XXX,并将 CONFIG_XX 转换为=m
.
最后,如果您只是想要一个新构建的内核,我建议您使用分发配置make allyesconfig
:
cd your_kernel_src
cp /boot/your_distribution_config .config
make menuconfig # can exit it directly with nothing changed
make -j16
make modules_install
make install
# update the grub, if it is required for your distribution.
答案2
您使用 plain 编译了内核make
,但没有使用模块。跑步make -j16 all modules
。
答案3
您必须确保工具链了解您正在使用的内核源代码树。您必须将环境变量设置KERNEL_TREE
为源所在的目录。看https://unix.stackexchange.com/a/147700/37538以供参考。