我正在尝试为我的 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
在配置中,我只需选择完全可抢占内核(RT)(PREEMPT_RT_FULL)作为抢占模型,并将所有其他设置保留在它们的位置默认。
fakeroot make -j4 deb-pkg
dpkg-buildpackage:错误:fakeroot -u debian/rules clean 子进程返回退出状态 1 make2: *** [scripts/Makefile.package:77: deb-pkg] 错误 1 make: *** [Makefile:1429: deb-pkg] 错误 2
全端子输出这里
如果我尝试使用
sudo make -j4 deb-pkg
制作3: *** [debian/rules:6: build] 错误 2 dpkg-buildpackage: 错误: debian/rules 构建子进程返回退出状态 2 make2: *** [scripts/Makefile.package:77: deb-pkg] 错误 2 make: *** [Makefile:1429: deb-pkg] 错误 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
sudo make module_install -j4 sed:无法读取模块。顺序:没有这样的文件或目录 make:*** [Makefile:1316:现代] 错误2
sudo make modules -j4
sudo make modules_install -j4
当我使用 makemodules 命令时,它会编译很长时间并成功终止,但是当我再次运行modules_install时,我收到一条错误消息:
cp: 无法 stat 'modules.builtin': 没有这样的文件或目录 make: *** [Makefile:1317:现代] 错误1
我不知道下一步该尝试什么。我尝试了不同的内核版本和不同的操作系统(Ubuntu 18.04 和 20.04),并且在所有这些版本中都遇到相同的错误。我得到的说明似乎如此清晰和直接,所以我想知道我是否做错了什么,或者是否存在某些硬件不兼容或类似性质的问题?作为参考,我当前运行的是 Ubuntu 20.04.02,内核 5.8.0-53-generic,硬件。有谁知道可能导致此问题的原因吗?
PS:这是我在这个网站上的第一个问题,对问题格式的反馈表示赞赏(信息太多/太少/相关性等)我刚刚添加了终端给我的所有信息,不确定什么有用或没用
答案1
我能够在 Ubuntu 20.04 上构建 PREEMPT-RT 内核主要基于本指南如下:
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
配置,并在要求时抢占模型选择完全抢占式内核。其余部分接受默认值:
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
这指导建议其他一些步骤,但我尚未测试它们。