我正在尝试为我的ubuntu发行版安装一个PREEMPT_RT内核,因为这是我正在工作的机器人所必需的。但是无论我做什么,在编译内核时都会出现错误。我在问题中包含了错误信息,并提供了完整终端输出的链接。我对linux并不十分满意,因此我一直按照制造商的安装指南执行以下步骤:
curl -SLO https://www.kernel.org/pub/linux/kernel/v5.x/linux-5.6.19.tar.xz
curl -SLO https://www.kernel.org/pub/linux/kernel/projects/rt/5.6/older/patch-5.6.19-rt12.patch.xz
xz -d linux-5.6.19.tar.xz
xz -d patch-5.6.19-rt12.patch.xz
tar xf linux-5.6.19.tar
cd linux-5.6.19
patch -p1 < ../patch-5.6.19-rt12.patch
make oldconfig
在配置中,我只需为抢占模型选择完全抢占内核(PREEMPT_RT_FULL),并将所有其他设置保留在它们的默认设置上。
fakeroot make -j4 deb-pkg
dpkg-buildpackage: error: fakeroot -u debian/规则清除子进程返回的退出状态1使2:*
C4
1 make:* Error 2
全终端输出这里
如果我试着用
sudo make -j4 deb-pkg
make3.:* Error 2 dpkg-buildpackage: error: debian/rules build子进程返回退出状态22:* Error 2 make:* Error 2
全定时输出这里
当这不起作用时,我试着按照这问题的答案中给出的步骤
curl -SLO https://www.kernel.org/pub/linux/kernel/v5.x/linux-5.6.19.tar.gz
curl -SLO https://www.kernel.org/pub/linux/kernel/projects/rt/5.6/older/patch-5.6.19-rt12.patch.gz
tar xvzf linux-5.6.19.tar.gz
cd linux-5.6.19
gzip -cd ../patch-5.6.19-rt12.patch.gz | patch -p1 --verbose
make menuconfig
make -j4
sudo make modules_install -j4
modules_install -j4 sed:无法读取modules.order:没有这样的文件或目录:*错误2
sudo make modules -j4
sudo make modules_install -j4
当我使用make模块命令时,它编译了很长时间,并成功地终止了,但是当我再次运行modules_install时,我得到了一条错误消息:
cp:无法统计“Modes.builtin”:没有这样的文件或目录:*错误1
我不知道下一步该做什么。我尝试过不同的内核版本和不同的操作系统(Ubuntu18.04和20.04),所有这些都有相同的错误。我得到的指示是如此的清晰和直接,所以我想知道我是做错了什么,还是有一些硬件不兼容或者类似的东西?作为参考,我目前正在运行Ubuntu20.04.02,内核5.8.0-53-泛型,硬件。有人知道什么会导致这个问题吗?
PS:这是我在这个网站上的第一个问题,非常感谢关于问题格式的反馈(信息太少/相关性太小等)。我刚加了终端给我的所有信息,不知道什么是有用的,什么是没用的。
发布于 2021-09-07 22:17:11
我能够在Ubuntu20.04上构建PREEMPT内核,主要基于本指南,如下所示:
sudo apt install build-essential git libssl-dev libelf-dev flex bison
下载该版本的内核源代码和修补程序:
wget https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.4.143.tar.xz
wget https://mirrors.edge.kernel.org/pub/linux/kernel/projects/rt/5.4/patch-5.4.143-rt64-rc2.patch.xz
解包并应用修补程序:
tar -xf linux-5.4.143.tar.xz
cd linux-5.4.143
xzcat ../patch-5.4.143-rt64-rc2.patch.xz | patch -p1
配置,当请求Preemption模型时,选择Fully可抢占内核。接受其余部分的默认值:
cp /boot/config-5.4.0-81-generic .config
make oldconfig
编辑.config
文件并将CONFIG_SYSTEM_TRUSTED_KEYS="debian/canonical-certs.pem"
更改为CONFIG_SYSTEM_TRUSTED_KEYS=""
构建内核:
make -j8 deb-pkg
安装生成的软件包,然后重新启动系统。
sudo dpkg -i ../linux-headers-5.4.143-rt64-rc2_5.4.143-rt64-rc2-1_amd64.deb ../linux-image-5.4.143-rt64-rc2_5.4.143-rt64-rc2-1_amd64.deb ../linux-libc-dev_5.4.143-rt64-rc2-1_amd64.deb
在重新启动之后,您应该能够看到这样的内容:
# uname -a
Linux vod 5.4.143-rt64-rc2 #1 SMP PREEMPT_RT Tue Sep 7 20:19:55 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
指南建议了几个其他步骤,但我还没有对它们进行测试。
https://unix.stackexchange.com/questions/650320
复制相似问题