摘要在开始 RT-Linux 移植前建立硬件、rootfs、设备树、SDK 和内核版本基线避免把旧教程直接套用到新内核。适用对象准备在 LubanCat-RK3588 上构建或替换 Linux 内核的开发者。本文命令分为主机和目标板两类所有版本号均应以现场输出为准。文章目录本篇要解决什么问题先记住一个原则写在前面一、区分三个工作环境二、目标设备基线检查三、开发主机 SDK 检查四、为什么这一步不能省略五、建议把版本基线保存成文件开发主机也建议记录 SDK 信息六、常见误区误区 1板卡型号相同DTB 就一定能通用误区 2SDK 名称里写了 Ubuntu就等于目标板系统版本误区 3只记录 uname -r 就够了七、本文验收清单小结工作流实测截图专栏导航参考资料本篇要解决什么问题这篇文章是整个专栏的起点。后面无论是编译 PREEMPT_RT、移植gs_usb、适配 YT6801还是处理 initramfs 启动失败都依赖一个前提你必须知道当前板卡到底运行了什么硬件、什么 rootfs、什么设备树和什么内核。本文完成后至少应该得到下面这份“版本基线”项目本次实测/需要记录的内容为什么重要板卡LubanCat-5IOB / RK3588决定设备树、外设和构建配置原内核6.1.84用于回滚和模块兼容性判断目标内核6.1.99-rt36-rk3588 #12后续所有驱动均围绕它重新构建rootfs以findmnt /、/etc/os-release实测为准不能由 SDK 配置名反推用户空间版本启动根分区rootLABEL...或rootPARTUUID...initramfs 能否挂载根文件系统的关键SDK defconfigrk3588:LubanCat_rk3588_ubuntu_linux6.1_gnome_defconfig决定 SDK 使用哪套 RK3588/Linux 6.1 配置先记住一个原则教程是参考现场输出才是事实。同一块 RK3588 板卡只要 SDK、内核版本、rootfs、DTB 或启动介质发生变化旧教程里的路径和命令就可能不再成立。写在前面实时内核移植最容易犯的错误是拿着旧版本教程直接执行命令。教程可能基于 5.10 内核而当前设备运行的是 6.1即使板卡名称相同内核配置、设备树、启动分区和驱动接口也可能不同。本文先建立一份“版本基线”后续所有编译和安装操作都以这份基线为准。本次实测LubanCat-5IOBRK3588从6.1.84迁移到6.1.99-rt36-rk3588 #12。其他板卡不能直接复用本文的 DTB 和启动文件。一、区分三个工作环境移植过程通常同时涉及三个环境开发主机运行 LubanCat SDK、交叉编译器和build.sh。目标设备安装新内核、加载模块并进行运行验证。串口终端连接目标设备调试串口用于网络不可用时查看 U-Boot 和内核日志。build.sh在开发主机执行uname、modprobe和ip等验证命令在目标设备执行。串口工具运行在开发主机但显示的是目标设备的控制台。二、目标设备基线检查在目标板执行uname-acat/proc/cmdline findmnt /cat/etc/os-release重点记录四项当前内核版本例如6.1.84根分区来源和文件系统启动参数中的rootLABEL...或rootPARTUUID...发行版和架构通常为 Ubuntu/Debian arm64。还应记录板卡型号和设备树tr-d\0/proc/device-tree/modelprintf\ntr\0\n/proc/device-tree/compatiblemodel和compatible能确认设备树描述的板卡身份但不能直接告诉你 U-Boot 实际加载了哪个.dtb文件后者还要结合/boot配置和串口启动日志判断。三、开发主机 SDK 检查SDK$HOME/lubancat/LubanCat_SDKcd$SDK./build.sh rk3588:LubanCat_rk3588_ubuntu_linux6.1_gnome_defconfig ./build.shhelp|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 控制器等硬件是否被描述。先固定版本才能判断后续问题究竟来自编译、安装、启动还是驱动。五、建议把版本基线保存成文件手工复制几条命令输出很容易遗漏。可以在目标板先生成一份最小基线报告report$HOME/lubancat-baseline-$(date%Y%m%d-%H%M%S).txt{echo uname -a uname-aechoecho /proc/cmdline cat/proc/cmdlineechoecho rootfs findmnt /echoecho os-release cat/etc/os-releaseechoecho device-tree model tr-d\0/proc/device-tree/modelprintf\necho compatible tr\0\n/proc/device-tree/compatible}|tee$reportechobaseline saved to:$report这份文件不负责自动判断“对不对”它的价值是把现场状态固定下来。之后每次升级都可以保存一份同格式报告用diff直接比较。开发主机也建议记录 SDK 信息至少保留 SDK 所在 commit/manifest、实际使用的 defconfig、内核源码目录以及交叉编译器版本。后面如果某个.ko出现 vermagic 不匹配就能快速回答“它到底是用哪套源码编出来的”。六、常见误区误区 1板卡型号相同DTB 就一定能通用不一定。设备树不仅与 SoC 有关还可能和载板、外设连接、overlay、SDK 修改有关。本文只能证明本次 LubanCat-5IOB 环境中的实际结果。误区 2SDK 名称里写了 Ubuntu就等于目标板系统版本不是。SDK 构建配置和目标板正在运行的 rootfs 是两个维度用户空间版本仍应以/etc/os-release为准。误区 3只记录uname -r就够了不够。启动参数、rootfs 标识和设备树同样会决定系统能否正常启动。七、本文验收清单已记录板卡model和compatible已记录当前uname -a已保存/proc/cmdline已确认根分区来源与文件系统已确认目标板发行版已确认 SDK 实际选择 Linux 6.1已保存后续可用于对比的版本基线文件。小结移植的第一项成果不是生成一个文件而是形成一份可追溯的版本基线。建议把uname -a、/proc/cmdline、SDK manifest 和板卡型号保存到专栏配套资料中。下一篇将使用 picocom 建立串口恢复通道确保新内核无法联网时仍能观察和修复系统。工作流实测截图图1通过 SSH 采集的内核、系统版本和根分区信息发布时请替换为本机实际地址并遮挡敏感信息。图2设备树 model 与 compatible 输出用于确认板卡型号和 RK3588 兼容项。专栏导航专栏LubanCat RK3588 实时 Linux 开发实战第 1/18篇下一篇LubanCat RK3588 实时 Linux 开发二picocom 串口调试完整指南参考资料Linux kernel documentationDevice Tree usage model文中的版本号、接口名、设备地址和测试数据均应以自己的板卡实测为准引用命令前请先确认当前 SDK、内核和启动布局。标签LubanCatRK3588LinuxPREEMPT_RT嵌入式Linux