Skip to content

为什么需要一卷调试 ​

板子出问题的时候,咱们手里剩下的交互界面往往只有一个串口。程序崩了,shell 里留下一行 Segmentation fault;驱动 insmod 完悄无声息,dmesg 里翻不出 probe 的痕迹;更狠的是内核停在启动半路,连登录提示符都不出来。没有弹窗,没有任务管理器,串口吐出来的那几屏文本就是全部线索。读不出病灶,剩下的事全靠猜。能不能从日志里把病灶挑出来,决定咱们是半小时收工,还是通宵换着法子试。

其实咱们这个仓库的调试素材一直都有,只是散落各处:Buildroot 卷有构建侧排错,内核卷教启动日志怎么看,驱动卷讲 kgdb 这类内核态手段,QEMU 卷存了一篇完整的触摸排查实录,宿主 gdb 的基本功 Linux 基础卷也教过了。

缺的是一条把它们串起来的主线:程序在板子上崩了,咱们该从哪下手;断点怎么跨过交叉编译打到板子上;启动卡住时,怎么把日志切成一段一段定位。本卷补的就是这条线,三篇,只管用户态与串口可见的证据;别的卷已经讲清楚的内容,直接给链接,您按需跳过去看。

章节目录 ​

专栏定位(路径上下文规范)

本卷每章开头交代清楚在哪个目录、对哪棵源码、用什么工具链操作;正文每个命令块的首行注释标明执行位置:主机命令默认在仓库根 ~/imx-forge,虚拟机或板端命令默认在 / 或 /root,交叉工具链在 /opt/arm-gnu-toolchain。命令离开路径上下文就没法照抄。这是 Issue #101 里提的第一条诉求,本卷把它定为必须遵守的规矩;咱们照着走,命令才能原样落地。

前置知识

咱们得走过 Buildroot 构建——gdbserver 与 strace 的部署要动 Buildroot 配置;宿主 gdb 的基本功在 GDB 调试入门 里教过;串口工具您按 串口工具使用 备好就行。手边没有板子的朋友,走 QEMU 板级模拟 也能完成本卷各篇的等价验证。

三篇怎么走 ​

01 是整卷的地基。远程链路打通之后,宿主的交叉 gdb 与板端的 gdbserver 就都握在咱们手里:02 分析 coredump 用的正是同一支交叉 gdb,03 里读到的可疑行为,您也随时可以用断点停下来对质。把 01 走通,后面两篇要用的工具就都是现成的。

02 与 03 互相独立,您按症状跳读:程序能跑但行为不对,或者干脆崩掉,去 02;板子进不了 shell、卡在启动半路,去 03。两篇没有先后依赖,缺哪补哪。

出问题了从哪篇读起 ​

排查从对号入座开始,咱们把常见症状的入口列成一张表:

症状先去哪为什么
程序崩了、结果不对02 strace、日志与 coredump先日志再 strace 最后 core,便宜的在前面
要断点单步01 gdbserver 远程调试全链远程链路是唯一途径
板子启动不了、卡在某段03 串口日志阅读路线分段地图先定位卡在哪
构建挂了Buildroot 调试与排错构建侧排错是它的主场
内核态、Oops 深入内核调试技术 与 驱动开发入门kgdb 与内核调试
串口连不上串口工具使用minicom 配置与排障
NFS、TFTP 起不来WSL2 开发注意事项 与 NFS 挂载网络与挂载

表里 NFS 那行的落点,笔者在本机核实过:rootfs 卷的目录与卷索引里,它都叫 05_nfs_wsl_troubleshoot,您照着链过去不会扑空:

bash
# 主机 ~/imx-forge
ls document/tutorial/rootfs/
grep -n "nfs" document/tutorial/rootfs/index.md | head -5
text
01_rootfs_overview.md
02_busybox_compile.md
03_inittab_init.md
04_rootfs_structure.md
05_nfs_wsl_troubleshoot.md
06_apps_integration.md
07_module_autoload.md
index.md
14:  <ChapterLink num="05" href="05_nfs_wsl_troubleshoot">NFS 挂载</ChapterLink>

继续学习 ​

v1.0.4-37-gc79a127 · c79a127 · 2026-09-29