大家好!
不知道从哪里开始。
从 kernel.org 编译 5.4.125 源代码,我得到了这个
CC [M] kernel/kheaders.o
debian/rules:6: recipe for target 'build' failed
make[2]: *** [build] Error 2
dpkg-buildpackage: error: debian/rules build subprocess returned exit status 2
scripts/Makefile.package:73: recipe for target 'deb-pkg' failed
make[1]: *** [deb-pkg] Error 2
Makefile:1469: recipe fpr target 'deb-pkg' failed
make: *** [deb-pkg] Error 2
下面是我使用的命令(请注意两个不同的源,后者失败了):
sudo apt build-dep linux linux-image-$(uname -r)
sudo apt install libncurses-dev fakeroot
# the current kernel version works ok ...
apt source linux-image-unsigned-$(uname -r)
# the latest 5.4.123 has the issue ...
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.4.123.tar.gz
tar -xf linux-5.4.123.tar.gz
make oldconfig
# just to check settings ... no changes.
make menuconfig
make -j`nproc` deb-pkg
答案1
在没有任何有用信息的情况下(您调用了哪些命令?您之前执行了哪些步骤?)只能猜测您遵循了这些说明:
https://wiki.ubuntu.com/Kernel/BuildYourOwnKernel
当然,这只适用于从 Debian 源代码包或从Ubuntugit 存储库。
如果你从 kernel.org 获取源代码,那么它们可能不会附带 Debian 打包部分,因此你需要遵循标准构建内核的说明,例如此处:
https://www.linux.com/topic/desktop/how-compile-linux-kernel-0/
但这意味着安装未包装内核直接添加到您的系统中,而包管理器(dpkg,apt)对此一无所知,可能会很乐意使用下一次常规更新覆盖或删除它,而您手工制作的自定义内核可能会消失。
那么你可以使用一些战术apt-mark hold
命令来防止这种情况,但您将再也不会获得任何安全更新;或者您可以按照常规的 Ubuntu 方式执行此操作并从 kernel.ubuntu.org 获取源代码并为该内核构建一个 .deb 包并安装它。
请注意,如果尝试在带有 4.x 内核(目前为 4.5.0-144)的 Ubuntu 18.04 上使用 5.x 内核,当所有其他低级软件包与更新的内核不兼容时,您可能会大吃一惊。这可能会或可能不会奏效。如果不行,您可能不想重建发行版的大部分内容,而这可能是必要的。
编辑:如果您的首要任务是需要最新的 5.4 内核,请选择较新的 Ubuntu 版本;如果您需要 LTS 版本,那么 20.04 LTS 是一个更好的起点,而 21.04(虽然不是 LTS 版本)则更好。
偶尔,低级系统包需要进行调整才能与较新的内核配合使用;UDEV 就是一个例子。如果您使用较新的内核,但仍使用较旧的 UDEV(或其他类似的低级子系统),则某些系统事件可能会在与以前略有不同的情况下发送,并且某些工具可能会以微妙的方式中断。它不会需要不可能,但这种可能性是存在的。
发行版以一定时间间隔整体发布是有原因的;Linux 发行版最重要的工作就是集成所有不同的子系统,使它们协同工作。Linux 发行版不是一堆可以随意拼凑起来的组件,而且一切都会顺利运行;它需要大量的专业知识和工作。
如果组件的年龄大致相同,您可以增加事情正常运转的机会;但是 2021 年中期的最新内核和 2018 年初的所有其他内核(即早 3 年多!)是在自找麻烦。
当然,你可能会很幸运,但这可能只是在考验你的运气。