0%

如何调试嵌入式系统

嵌入式系统调试的两种方式:

  • Software Debugger
    • gdbserver
    • redboot
  • Hardware Debugger
    • jtag
    • swd
    • jlink

Software Debugger

gdbserver典型应用场景

  • gdb 运行于宿主机
  • gdbserver 运行于目标机,核心依赖于 ptrace,是轻量级的GDB调试器,担任着调试代理的角色
  • 使用网口/串口连接通信

本地调试与远程调试

gdbserver

redboot

eCos redboot 包含有 GDB stub,可当作 GDB Server

Hardware Debugger

jtag典型应用场景

  • gdb 运行于宿主机
  • 需要硬件仿真器
  • 需要芯片支持

OpenOCD

OpenOCD(Open On-Chip Debugger)开源片上调试器,是一款开源软件。旨在提供针对嵌入式设备的调试、系统编程和边界扫描功能。是在仿真器的辅助下完成的,仿真器是能够提供调试目标的电信号的小型硬件单元。仿真器是必须的,因为宿主机通常不具备这种电信号的直接解析功能。

1595472703759

1595473016901

分为三部分,详见Introducing OpenOCD: Status of OpenOCD on AArch64

  • Development Hardware
  • Debug Adapter
  • Host Computer

Examples

  1. Linux
  2. eCos
    • 使用 JTAG 仿真器调试,带有硬件断点/watch
    • 使用 RedBoot 调试
  3. OpenOCD
    • JTAG ?
    • SWD ?
    • gdbserver ?

Refs

  1. gdb调试原理及qemu中的gdbserver
  2. GDB remote protocol: how to analyse packets?
  3. Debugging eCos applications
  4. gdbserver
  5. 浅论各种调试接口的区别
  6. OpenOCD JTAG 调试