
调试手段按「从软到硬」排串口日志是最常用的一层串口失效再上 JTAG测试则分软件功能/压测和量产PCBA两级。本文基于触觉智能RK3576开发板演示把这四块串成一套完整的调试与验收方法分上下篇为大家分享。开发期先用串口把日志调通调不通再上 JTAG验证阶段用 rockchip-test 做功能与压力量产用 PCBA 测试逐模块体检。上篇先讲透开发期两条关键调试链路——console 与 loglevel 串口日志调通、OpenOCD GDB 硬件级兜底覆盖「板子起不来、日志断流、死在第一条指令之前」这一类最让人头疼的早期问题。造console与loglevel调试串口就打印几行就停了通常是两个原因console 没从 earlycon 切换到正式 console或日志级别太低把后面的输出滤掉了。把这两处调对日志就源源不断了。串口日志的输出链路是earlycon早期→ consolettyFIQ0正式→ init 后用户态。只看到几行的常见根因①console 参数没生效/波特率不对后面的日志走不到串口②日志级别loglevel太低把 INFO 以下的打印滤掉了③卡在内核早期见 01.05那是真问题。1、console 从哪来earlycon → 正式 console本 SDK bootargsrk3576-linux.dtsiearlyconuart8250,mmio32,0x2ad40000 consolettyFIQ0consolettyFIQ0 是 RK 的 FIQ 调试口内核编了 CONFIG_SERIAL_8250_CONSOLEy 才能把 console 挂到串口波特率必须与 U-Boot 一致否则正式 console 一接管就断流这经常被误读成卡住了。2、printk 与 loglevel日志能不能上串口由内核 printk 级别决定。运行时看/改 /proc/sys/kernel/printk四个数字位置含义值 1console_loglevel能打到 console 的最高级别7debug 全开4只到 err 级——想让串口多打就调它值 2default_message_loglevel没有显式级别的 printk 默认级别值 3minimum_console_loglevelconsole 级别能设的最小值下限值 4default_console_loglevel默认 console 级别启动时用内核命令行 loglevel8或 ignore_loglevel能从一开始就全量输出运行时用 echo 7 4 1 7 /proc/sys/kernel/printk 临时调。3、常见问题对照表现象根因处理只有 earlycon 那几行之后无输出console 未接管波特率/console 参数/driver 未注册确认 consolettyFIQ0 在 bootargs 里、波特率与 U-Boot 一致、CONFIG_SERIAL_8250_CONSOLEy有输出但缺中间一大段loglevel 太低INFO/DEBUG 被滤掉启动参数加 loglevel8 或调 /proc/sys/kernel/printk乱码 / 波特率错串口工具波特率与内核不一致核对 U-Boot/内核/工具三处波特率一致用户态日志看不到systemd 的console 被占或 journald 未接到 console确认 console 设备存在ls /dev/ttyFIQ0必要时 journald 配 ForwardToConsole4、实操# 1. 运行时把日志级别开到最大临时echo7 4 1 7 /proc/sys/kernel/printk# 2. 确认 console 设备与注册ls/dev/ttyFIQ* ; dmesg | grep -iconsole# 3. 启动参数带 loglevel 全量输出改 dts bootargs见 02.03 后重烧# bootargs loglevel8# 4. 串口抓取minicom -D /dev/ttyUSB0 -b 1500000# 波特率与内核一致串口只有几行先分清是 console 没接管波特率/console 参数/CONFIG还是 loglevel 太低滤掉了。前者查 consolettyFIQ0 与波特率后者 loglevel8 或改 /proc/sys/kernel/printk。两处都对了日志自然源源不断。用JTAG兜底调试串口没输出、内核起不来往往是太早期就死了。这时候JTAG是唯一能掀开盖板看寄存器的手段——OpenOCDGDB 可以停住CPU、看 PC/寄存器/内存。JTAG/OpenOCD是串口失效时的兜底调试手段它可以停住CPUhalt、读PC/寄存器/内存、设断点定位死在第一条指令之前的问题如 DDR 初始化失败、时钟/电源没起来导致 CPU 卡死。代价是需要JTAG 调试器 目标配置文件且早期阶段很多外设还没初始化。它定位的是硬件/极早期初始化问题而不是驱动逻辑。边界说明官方文档 Common/DEBUG/..._GNU_MCU_Eclipse_OpenOCD_CN.pdf 侧重 MCURTOS/AMP核调试本文只讲主系统A核早期崩溃的 JTAG 思路。1、什么时候需要它场景串口能否帮忙JTAG 的价值DDR初始化失败CPU跑不动完全没输出halt 后读 PC/看 DDR寄存器内核极早期 panic/死锁可能只有几行断点 单步看死在哪个函数怀疑硬件/上电时序不可靠确认 CPU 是否真的在跑2、OpenOCD 从哪来SDK 把它做成了buildroot 包buildroot/package/openocd/openocd.mk需要时在 Buildroot 里勾选打进系统官方调试文档docs/cn/Common/DEBUG/Rockchip_Developer_Guide_GNU_MCU_Eclipse_OpenOCD_CN.pdf另外 RK 还提供 GPIO 级调试工具PinDebugtools/linux/PinDebugWindows 版 tools/windows/pin_debug_tool_v1.17_...用来查引脚/电平和 JTAG 互补。3、基本工作流# 1. 准备好 JTAG 调试器如 J-Link/ST-Link 等 目标板 JTAG 接口# 2. 启动 OpenOCD加载目标配置文件openocd -f interface/jlink.cfg -f target/rk3576 或对应 target.cfg# —— 监听 localhost:3333 (gdb)# 3. GDB 连上去aarch64-linux-gnu-gdbvmlinux 或 u-bootelf(gdb) target remote :3333(gdb) halt# 停住 CPU(gdb) info registers# 看 PC/SP/通用寄存器(gdb) x/16i$pc# 反汇编当前指令(gdb)breakfunction_name(gdb)continue4、能力边界与提示需要硬件JTAG 调试器 板上 JTAG 引脚是否引出、复用到哪一组见板级原理图/调试文档需要匹配的目标配置目标板的 core、DAP/AP 地址等SDK 没现成 RK3576 配置时需按 OpenOCD 模板适配标注推断早期段调试要连 符号 用带符号的 vmlinux/u-boot elf配合 CONFIG_DEBUG_INFO_DWARF4y本 SDK 已开看源码行。串口都救不了的极早期/硬件问题用JTAG OpenOCDhalt 停 CPU → 看 PC/寄存器 → 断点/单步 → 对带符号的 vmlinux。它是调试链的最后一道手段配合 buildroot 的 openocd 包与官方 OpenOCD 文档上手引脚级问题用 RK 的 PinDebug工具。上篇到此结束。串口能打通、JTAG能兜底开发期「起不来」的问题基本就覆盖了。下篇进入验收量产测试为大家分享功能验没验全、压力扛不扛得住、量产每块板怎么检验。官方文档依据docs/cn/Common/UART/Rockchip_Developer_Guide_UART_CN.pdfdocs/cn/Common/UART/Rockchip_Developer_Guide_UART_FAQ_CN.pdf串口与FAQSDK 源码依据kernel-6.1/arch/arm64/boot/dts/rockchip/rk3576-linux.dtsiearlycon/console bootargskernel-6.1/arch/arm64/configs/rockchip_linux_rk3576_defconfigCONFIG_SERIAL_8250_CONSOLEy、CONFIG_SERIAL_8250_DWy、CONFIG_PRINTK_TIMEykernel-6.1/arch/arm64/boot/dts/rockchip/rk3576.dtsiuart2 节点Purple Pi OH2开发板是触觉智能RK3576核心板SOM7609系列配套的评估开发板搭载4核A724核A53M0多核异构处理器主频2.2GHz集成6Tops算力 NPU轻松应对AI推理、边缘计算与轻量级AI端侧学习。配套完善SDK、丰富资料与Demo有助于项目前期快速开发验证。触觉智能SOM7609系列核心板尺寸仅40.5×40.5mm基于RK3576/RK3576J SoC集成高性能GPU与VPU支持4K视频编解码与多屏异显提供PCIe、USB3.2、双路千兆以太网、MIPI-DSI、多路MIP CSI、eDP、CAN、SPI、I2C等丰富接口灵活扩展。