手把手教你用EJTAG调试龙芯开发板:从硬件连接到GDB远程调试
2026/4/20 4:02:35 网站建设 项目流程

龙芯开发板EJTAG调试实战:从硬件对接到源码级调试全解析

第一次接触龙芯开发板的EJTAG调试时,我盯着那排密密麻麻的接口引脚发愣——TDI、TDO、TCK、TMS这些缩写就像密码一样让人摸不着头脑。更让人崩溃的是,当你好不容易接上线缆,却发现调试器毫无反应,而开发板却开始发烫。这种经历相信不少嵌入式开发者都深有体会。本文将带你避开这些坑,从硬件连接到GDB远程调试,一步步掌握龙芯平台的底层调试技巧。

1. 认识EJTAG:龙芯调试的钥匙

EJTAG作为MIPS架构的专用调试接口,在龙芯处理器上扮演着不可替代的角色。与常见的JTAG不同,EJTAG在标准JTAG基础上扩展了更多调试功能:

  • 处理器控制:暂停/恢复CPU执行、单步调试
  • 寄存器访问:直接读写通用寄存器和特殊功能寄存器
  • 内存操作:查看和修改任意内存地址内容
  • 断点支持:硬件断点设置与触发

龙芯2K1000、3A5000等主流型号都支持完整的EJTAG功能,但需要注意早期型号如龙芯2F并不兼容。在开始调试前,建议先用cat /proc/cpuinfo确认处理器型号:

processor : 0 cpu model : Loongson-3A R4 (Loongson-3A5000) @ 2500MHz

2. 硬件连接:避开那些看不见的坑

2.1 接口定义与线序

龙芯开发板通常采用2×7 2.54mm间距的排针作为EJTAG接口,实际使用中需要注意:

引脚信号方向说明
1EJTAG_TMS输入测试模式选择
3EJTAG_TCK输入测试时钟(建议<10MHz)
5EJTAG_TDI输入测试数据输入
7EJTAG_TDO输出测试数据输出
9EJTAG_TRST输入测试复位(低电平有效)
11GND-接地

重要提示:12号引脚通常不焊接,连接时务必确认1脚位置(通常有方形焊盘标记),反接可能导致硬件损坏。

2.2 调试工具选型

市面上常见的EJTAG调试器主要有:

  1. 龙芯官方调试器

    • 兼容性最佳
    • 支持USB 2.0高速传输
    • 识别为ID 2961:6688
  2. 开源方案

    • 基于FT2232H的方案
    • 成本较低但需要自行编译驱动
    • 适合DIY爱好者

连接后,可以通过lsusb命令确认调试器是否被正确识别:

$ lsusb Bus 001 Device 004: ID 2961:6688 Loongson EJTAG Debugger

3. 软件工具链配置

3.1 安装ejtag-debug

ejtag-debug是龙芯官方提供的调试工具套件,安装步骤如下:

# 下载源码包 wget http://ftp.loongnix.org/toolchain/ejtag-debug/ejtag-debug-3.10.13.tar.gz # 解压并编译 tar zxvf ejtag-debug-3.10.13.tar.gz cd ejtag-debug-3.10.13 ./configure --prefix=/opt/ejtag make -j4 sudo make install

编译依赖包括:

  • flex/bison
  • libusb-1.0
  • readline开发包

3.2 常用调试命令

进入交互模式后,可以执行多种调试操作:

$ /opt/ejtag/bin/ejtag_debug ejtag> cpu0 ejtag> reg $a0 # 读取a0寄存器 ejtag> mem 0x80000000 # 查看内存内容 ejtag> dis 0x80001000 5 # 反汇编5条指令

4. GDB远程调试实战

4.1 配置gdbserver

ejtag-debug内置了GDB server功能,启动命令如下:

ejtag_debug --gdbserver --port 2333

在另一个终端中,使用交叉编译工具链中的gdb连接:

loongarch64-linux-gnu-gdb vmlinux (gdb) target remote :2333 (gdb) b start_kernel # 设置内核断点 (gdb) c # 继续执行

4.2 调试技巧

  1. 硬件断点

    (gdb) hbreak *0x80001000

    相比软件断点,硬件断点不会修改指令,适合调试ROM代码

  2. 查看反汇编

    (gdb) layout asm (gdb) ni # 单步执行汇编指令
  3. 监控变量

    (gdb) watch *(int*)0x8000ff00

5. 常见问题排查

问题1:连接后无响应

  • 检查线序是否正确
  • 测量TCK信号是否有波形
  • 确认TRST信号是否处于无效状态(高电平)

问题2:GDB连接超时

  • 确认防火墙放行了2333端口
  • 检查ejtag_debug是否以root权限运行
  • 尝试降低TCK频率(添加--clock 1000000参数)

问题3:寄存器读取错误

  • 确认CPU是否处于调试状态
  • 检查电源稳定性
  • 尝试复位目标板后重新连接

记得第一次成功通过EJTAG进入内核调试时,那种"一切尽在掌握"的感觉至今难忘。当你在凌晨三点终于捕捉到那个诡异的竞态条件,就会明白这些调试技巧的价值所在。

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

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

立即咨询