怎么获取openEuler 2403 SP3的kernel-rt的内核源码

现在正使用uboot加载openEuler 2403 SP3的操作系统,内核选择替换成了rt的内核,该内核是通过dnf下载安装的,这个内核在uboot的引导下没法正常加载root分区;

在openEuler内核的代码仓中没有找到rt的内核源码,这个内核源码或者rt补丁包有获取途径吗?

RT 内核的打包文件和补丁在 src-openeuler/kernel 仓库,不是在 openeuler/kernel 的独立 RT 分支里。24.03 LTS SP3 对应这个分支,主要看:

  • kernel-rt.spec:RT 内核的构建规则,%prep 段可以看到补丁应用过程
  • patch-6.6.0-6.0.0-rt20.patch:RT 补丁
  • patch-6.6.0-6.0.0-rt20.patch-openeuler_defconfig.patch:配套的内核配置调整

补丁文件名沿用了早期的 rt20,但目前该分支的 spec 已使用 rt47 版本号,不能只按补丁文件名判断版本。

如果还能启动原来的系统,可以查询已经安装的 RT 内核对应哪个源码包:

rpm -q kernel-rt --qf '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n源码包:%{SOURCERPM}\n'

然后按输出的源码包名称,到对应发行版的源码仓库下载。例如 SP3 的 EPOL 仓库提供了:

kernel-rt-6.6.0-132.0.0.rt47.11.oe2403sp3.src.rpm

SRPM 中包含源码归档、spec 和补丁;解包后原始源码还需要按 spec 应用补丁。如果希望直接查看已应用补丁的源码,也有同版本的 kernel-rt-source 子包,安装后位于 /usr/src/linux-…/。注意选择与所装 RT 内核对应的版本,不要直接用当前分支最新源码代替。

至于 U-Boot 引导后无法加载根分区,方便补充一下板卡型号、上面查询到的内核版本、实际加载的内核/initramfs/DTB、启动参数,以及报错前后的串口日志吗?目前还不能确定是根设备或文件系统支持的问题,还是引导时加载的文件不匹配;不一定需要先改内核源码。

好的,非常感谢;

之所以要源码编译,是因为我们使用的是飞腾S5000C的CPU平台,已经尝试过加载initramfs,但是加载失败了,一直没法正确解析initramfs文件,后面使用openeuler/kernel下的非rt内核源码编译,发现在不加载initramfs的情况下,需要内核镜像中将nvme/sata驱动直接编译进去,这样就可以正常引导系统了;所以才希望能找到操作系统对应版本的rt内核,将磁盘驱动手动编译进内核镜像中,这样就也可以实现uboot正常引导操作系统。