我的总体目标是构建一个我可以修改的 RT_PREEMPT 内核。作为中间步骤,我尝试构建并安装(并作为 grub 条目运行)一个通用的非 RT_PREEMPT 内核。但我认为下面的问题是有效的,即使没有提到 RT_PREEMPT。
这是场景:
- 从 .iso 全新安装 Debian 11
- 从 kernel.org 下载我认为与相同内核源代码最接近的内容。
- 建造,
- 启动失败并显示:
Loading initial ramdisk ...
error: out of memory.
Press any key to continue ...
如果我按下某个键,该过程会在内核因无法挂载根而发生恐慌之前短暂地继续。我是 Linux 新手,但这似乎是一个基本的事情,它应该可以工作。所以我做错了什么,但不知道那是什么。内存不足错误似乎并不常见,所以我在这里寻求帮助。以下是我的流程的更多详细信息:
- 从 debian.org (debian-11.2.0-amd64-netinst.iso) 下载 .iso 并安装。安装是完全通用的,我唯一添加的是 KDE 和 SSH。
- 登录并运行 uname -a。输出看起来像:
Linux sdcc13 5.10.0-11-amd64 #1 SMP Debian 5.10.92-1 (2022-01-18) x86_64 GNU/Linux
这部分有点令人困惑,但我认为这意味着这是一个版本 5 内核、补丁级别 10 和子级别 92。在 kernel.org 上,我认为最接近的版本是:
longterm: 5.10.93
所以,这些是我正在使用的命令:
wget https://www.kernel.org/pub/linux/kernel/v5.x/linux-5.10.93.tar.xz
xz -cd linux*.tar.xz | tar xvf
cd linux-5.10.93/
cp /boot/config-$(uname -r) .config
sudo apt-get install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison
make -j11
sudo make modules_install
sudo make install
sudo reboot
然后重启失败,如上所述。我确实必须编辑.config
以解决 CERT 问题,但我没有更改其他任何内容。这看起来非常通用,而且似乎应该有效,因此我们将不胜感激。我也尝试过make menuconfig
,并且make oldconfig
作为此过程的一部分,但结果是相同的。我缺少什么?
我终于得到了 Debian 的工作说明(添加了几行)。因此,为了构建与现有 debian 11 系统上相同的内核,我做了以下操作。最可怕的部分是您必须删除库存内核,因此最好在执行此操作之前至少拥有一个不同的内核:
sudo apt-get install build-essential fakeroot
sudo apt-get build-dep linux
apt-get 源 Linux
cd linux-5.10.92/
fakeroot make -j10 -f debian/rules.gen 二进制-arch_amd64
sudo apt删除--purge linux-image-5.10.0-11-amd64-unsigned
sudo dpkg -i linux-image-5.10.0-11-amd64-unsigned_5.10.92-1_amd64.deb
须藤重新启动
谢谢您的帮助。
答案1
我建议使用 Debian 的文档来构建内核;
https://kernel-team.pages.debian.net/kernel-handbook/ch-common-tasks.html#s-common-official
您可能希望从内核源代码包构建,而不是从“原始”kernel.org Linux 内核源代码构建。并不真正推荐您尝试构建内核的方式。
您还可以在这里找到 debian 11 / bullseye 的 preempt-rt 内核包和内核源代码包;
https://packages.debian.org/bullseye/linux-image-5.10.0-10-rt-amd64
您应该能够使用它作为模板来为 Debian 构建正确的 -rt 软件包。我建议沿着这条路走下去,而不是乱搞 kernel.org 源代码并手动完成所有事情。