摘要:在开始 RT-Linux 移植前,建立硬件、rootfs、设备树、SDK 和内核版本基线,避免把旧教程直接套用到新内核。
写在前面
实时内核移植最容易犯的错误,是拿着旧版本教程直接执行命令。教程可能基于 5.10 内核,而当前设备运行的是 6.1;即使板卡名称相同,内核配置、设备树、启动分区和驱动接口也可能不同。
本文先建立一份"版本基线",后续所有编译和安装操作都以这份基线为准。
本次实测:LubanCat-5IOB(RK3588)从
6.1.84迁移到6.1.99-rt36-rk3588 #12。其他板卡不能直接复用本文的 DTB 和启动文件。
一、区分三个工作环境
移植过程通常同时涉及三个环境:
- 开发主机 :运行 LubanCat SDK、交叉编译器和
build.sh。 - 目标设备:安装新内核、加载模块并进行运行验证。
- 串口终端:连接目标设备调试串口,用于网络不可用时查看 U-Boot 和内核日志。
build.sh 在开发主机执行,uname、modprobe 和 ip 等验证命令在目标设备执行。串口工具运行在开发主机,但显示的是目标设备的控制台。
二、目标设备基线检查
在目标板执行:
bash
uname -a
cat /proc/cmdline
findmnt /
cat /etc/os-release
重点记录四项:
- 当前内核版本,例如
6.1.84; - 根分区来源和文件系统;
- 启动参数中的
root=LABEL=...或root=PARTUUID=...; - 发行版和架构,通常为 Ubuntu/Debian arm64。
还应记录板卡型号和设备树:
bash
tr -d '\0' < /proc/device-tree/model
printf '\n'
tr '\0' '\n' < /proc/device-tree/compatible
model 和 compatible 能确认设备树描述的板卡身份,但不能直接告诉你 U-Boot 实际加载了哪个 .dtb 文件;后者还要结合 /boot 配置和串口启动日志判断。
三、开发主机 SDK 检查
bash
SDK="$HOME/lubancat/LubanCat_SDK"
cd "$SDK"
./build.sh rk3588:LubanCat_rk3588_ubuntu_linux6.1_gnome_defconfig
./build.sh help | sed -n '/available defconfigs:/,/olddefconfig/p'
如果输出中出现 Using preferred kernel version(6.1),说明 SDK 已选择 6.1 内核。不要使用不存在的旧 defconfig,例如直接执行不带芯片前缀的配置名,可能得到 No such defconfig。
这里的 ubuntu、gnome 是 SDK 构建配置的一部分。只执行 kerneldeb 不会把目标板现有用户空间改成另一个 Ubuntu 版本,因此目标系统版本仍应以 cat /etc/os-release 为准。
四、为什么这一步不能省略
内核模块必须同时匹配内核版本、架构、配置和 vermagic。设备树还决定网卡、显示、CAN 控制器等硬件是否被描述。先固定版本,才能判断后续问题究竟来自编译、安装、启动还是驱动。
小结
移植的第一项成果不是生成一个文件,而是形成一份可追溯的版本基线。建议把 uname -a、/proc/cmdline、SDK manifest 和板卡型号保存到专栏配套资料中。
下一篇将使用 picocom 建立串口恢复通道,确保新内核无法联网时仍能观察和修复系统。