LubanCat RK3588 实时 Linux 开发(四):构建 Linux 6.1 PREEMPT_RT 内核与 DEB 包
2026/9/12 19:44:10 网站建设 项目流程

摘要:使用正确的 RK3588 defconfig 构建 Linux 6.1 kerneldeb,并通过pipefail、日志和阶段化检查定位失败原因。

适用对象:已经准备好 LubanCat SDK、需要生成 Linux 6.1 内核 DEB 包的开发者。构建必须在开发主机执行。

文章目录

    • 本篇要解决什么问题
      • 为什么不能只看最后一行“成功”
    • 一、选择正确的 defconfig
    • 二、检查关键配置
    • 三、构建 kerneldeb 并保存日志
    • 四、为什么采用 DEB
    • 五、定位失败位置
    • 六、把构建过程做成可追溯记录
      • 构建成功后再做产物级验收
    • 七、`.config`、defconfig 与最终产物的关系
    • 八、本文验收清单
    • 小结
    • 工作流实测截图
    • 专栏导航
    • 参考资料

本篇要解决什么问题

这一篇从“环境已经可用”进入真正的内核构建阶段。目标不是看到终端滚过大量编译日志,而是得到一组可以安装、可以校验、可以回滚的 DEB 产物。

整个过程可以拆成四个检查点:

阶段关键问题验证手段
选择配置SDK 是否真的选择 RK3588 + Linux 6.1defconfig 输出、kernel-6.1/.config
内核配置PREEMPT_RT、CAN、YT6801 是否进入最终.configgrep CONFIG_...
编译打包kerneldeb是否真正成功pipefail+ 退出码 + 完整日志
产物验收DEB 中是否含内核、DTB、模块dpkg-deb -c、SHA256

为什么不能只看最后一行“成功”

带有tee的构建命令如果没有pipefail,管道最后一个命令成功并不一定代表前面的构建程序成功。因此本文不仅保存日志,还要求检查退出码和最终包内容。

一、选择正确的 defconfig

在 SDK 根目录执行:

SDK="$HOME/lubancat/LubanCat_SDK"cd"$SDK"./build.sh\rk3588:LubanCat_rk3588_ubuntu_linux6.1_gnome_defconfig

芯片前缀rk3588:很重要。配置成功后,SDK 会在output/.config中写入最终配置,并选择kernel-6.1目录。

二、检查关键配置

grep-E'CONFIG_PREEMPT_RT|CONFIG_CAN_GS_USB|CONFIG_NET_VENDOR_MOTORCOMM|CONFIG_FUXI'\kernel-6.1/.config

本次移植至少关注:

CONFIG_PREEMPT_RT=y CONFIG_HZ_1000=y CONFIG_CAN=y CONFIG_CAN_RAW=y CONFIG_CAN_GS_USB=m CONFIG_NET_VENDOR_MOTORCOMM=y CONFIG_FUXI=m

=m表示编译成模块,=y表示编译进内核。配置文件中的项目必须被实际构建系统读取,不能只修改一个未使用的.config

三、构建 kerneldeb 并保存日志

set-opipefail ./build.sh kerneldeb2>&1|teeoutput/kerneldeb-rt36.log

set -o pipefail能让管道前面的构建失败正确传递到脚本退出码,避免tee成功导致误判。

构建完成后查看最后的错误:

tail-n100output/kerneldeb-rt36.log

成功日志末尾应出现类似内容:

Running 10-kernel.sh - build_kerneldeb succeeded.

还必须确认命令退出码为0。本次最终构建生成的是 revision-12

linux-image-6.1.99-rt36-rk3588_6.1.99-rt36-rk3588-12_arm64.deb linux-headers-6.1.99-rt36-rk3588_6.1.99-rt36-rk3588-12_arm64.deb

检查包元数据和关键文件:

image_deb=linux-image-6.1.99-rt36-rk3588_6.1.99-rt36-rk3588-12_arm64.deb dpkg-deb-f"$image_deb"Package Version Architecture dpkg-deb-c"$image_deb"\|grep-E'boot/vmlinuz|rk3588-lubancat-5io\.dtb|gs_usb\.ko|yt6801\.ko'sha256sum"$image_deb"

本次两个部署包的 SHA256 为:

d4141e0a4f7b93c0e1736232aef893c42e2987272158637c4fb3820e131901d7 linux-image-6.1.99-rt36-rk3588_6.1.99-rt36-rk3588-12_arm64.deb 3ee5fd9a8ebd8a11c1644aeea1d9c367b57545ed35b1871404b9687557e44f82 linux-headers-6.1.99-rt36-rk3588_6.1.99-rt36-rk3588-12_arm64.deb

每次重新构建后都要重新计算哈希,不能沿用本文数值。

四、为什么采用 DEB

DEB 可以由dpkg管理,安装时自动生成 initramfs、写入模块目录并记录版本,适合在多台相同设备上重复部署。不要直接把单个Image覆盖到启动分区后就认为升级完成,这样容易遗漏模块、设备树或 initramfs。

五、定位失败位置

看到错误时先判断阶段:

  • Kconfig 阶段:多为flexbison或配置名问题;
  • 内核编译阶段:检查编译器、配置和具体源文件;
  • check-kernel.sh阶段:检查lz4和压缩格式;
  • 打包阶段:检查 DEB 控制文件、模块安装路径和设备树布局。

六、把构建过程做成可追溯记录

建议每次正式构建都创建一个独立的日志和产物记录目录,而不是只保留终端历史:

stamp=$(date+%Y%m%d-%H%M%S)record_dir="output/build-record-$stamp"mkdir-p"$record_dir"cpkernel-6.1/.config"$record_dir/kernel.config"./build.shhelp>"$record_dir/build-help.txt"2>&1set-opipefail ./build.sh kerneldeb2>&1|tee"$record_dir/kerneldeb.log"rc=${PIPESTATUS[0]}echo"kerneldeb_exit=$rc"|tee"$record_dir/result.txt"exit"$rc"

这里使用PIPESTATUS[0]直接读取管道中build.sh的退出状态。即使最终终端显示了tee的正常输出,也不会把构建失败误判成成功。

构建成功后再做产物级验收

至少检查三个层面:

  1. 包元数据:Package、Version、Architecture 是否正确;
  2. 关键文件:kernel、DTB、gs_usb.koyt6801.ko是否进入最终包;
  3. 完整性:对最终准备部署的 DEB 重新计算 SHA256。

七、.config、defconfig 与最终产物的关系

一个常见误区是“我明明改了配置,为什么模块没有生成”。原因往往是修改的配置文件没有被当前构建入口真正读取。

  • defconfig:用于生成初始配置;
  • .config:本次构建实际使用的展开配置;
  • CONFIG_xxx=m/y:只有进入当前.config并参与 Kbuild,才会反映到最终产物。

因此每次构建前、构建后都建议检查关键配置和包内容,形成首尾闭环。

八、本文验收清单

  • 使用了带rk3588:前缀的正确 defconfig;
  • CONFIG_PREEMPT_RT=y、CAN、YT6801 配置进入实际.config
  • kerneldeb退出码为 0;
  • 保存了完整构建日志;
  • image/headers DEB 文件名明确,不使用模糊通配符;
  • 最终 DEB 中存在目标 DTB 和关键模块;
  • SHA256 已重新计算并记录。

小结

一次可靠构建必须同时保留配置命令、完整日志、SDK manifest 和最终 DEB。这样出现启动问题时,才能把“源码问题”和“部署问题”分开。

工作流实测截图

图1:PREEMPT_RT、HZ、SocketCAN 和 gs_usb 配置确认。

图2:内核 DEB 包构建末尾日志;以该日志和生成文件作为构建成功判据。

专栏导航

专栏LubanCat RK3588 实时 Linux 开发实战(第 4/13 篇)

  • 上一篇:LubanCat RK3588 实时 Linux 开发(三):SDK 环境准备与 flex、bison、LZ4 依赖排查
  • 下一篇:LubanCat RK3588 实时 Linux 开发(五):如何确认 PREEMPT_RT 实时内核真正生效

参考资料

  • Linux Kconfig Language
  • Linux Kbuild 文档
  • Debian package tools: dpkg-deb

文中的版本号、接口名、设备地址和测试数据均应以自己的板卡实测为准;引用命令前请先确认当前 SDK、内核和启动布局。

标签RK3588LubanCat SDKLinux 6.1内核编译kerneldeb

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询