JTAG/JLINK/OPENOCD/GDB

JTAG/JLINK/OPENOCD/GDB

小狼@http://blog.csdn.net/xiaolangyangyang


一、OpenOCD

二、JTAG与JLINK的区别

        JTAG:边界扫描链,硬件上有4根线,分别是TMS/TCK/TDI/TDO,协议上属于硬件协议;

        JLINK:将串口协议转换成JTAG协议的硬件模块,串口端支持JLink cmd,JTAG段支持JTAG协议

三、JTAG用途

        JTAG有两种用途:

        1、芯片可测试方法DFT的一种,用于测试芯片;

        2、JLINK调试debug;

四、JLINK用于debug

寄存器(要求/可选)位宽Capture Value相关指令
EXTEST0…0*测试边界扫描寄存器
SAMPLE/PRELOAD用户定义Normal边界扫描寄存器
Bypass1…1*NormalBypass
INTEST用户定义测试边界扫描寄存器
RUNBIST用户定义测试用户定义
IDCODE用户定义测试Device ID
USERCODE用户定义测试Device ID
CLAMP用户定义测试BYPASS
HIGHZ用户定义测试BYPASS
用户定义用户定义测试用户定义

五、JLINK V8常用命令集

        1、连接到目标板

# usb

        2、重启目标板

# r

        3、停止cpu运行(halt)

# h 
# halt

        4、加载文件到设备

# loadbin <filename>, <addr>

        5、下载设备数据到本地文件

# savebin <filename>, <addr>, <NumBytes> (hex)
# savebin aaa.bin 0 2000

        6、跳到代码段地址执行

# g

        7、单步执行

# s

        8、设置pc寄存器的值

# SetPC <addr>

        9、设置断点(软,硬)

# SetBP <addr> [S/H]

        10、读寄存器值,需要在halt状态下

# Regs

        11、写寄存器

# wreg <RegName>, <Data>

        12、寄存器名可以是

R0-R15SP=R13PC=R15XPSRMSPPSP
RAZCFBPAPSREPSRIPSRPRIMASK
BASEPRIFAULTMASKCONTROLBASEPRI_MAIAPSREAPSR
IEPSRFPSCRFPS0-FPS31CycleCnt

        13、读内存

# mem <Addr>, <NumBytes>
# mem 20002000 20
# mem8 20002000 20
# mem16 20002000 20
# mem32 20002000 20

        14、写内存

# w4 <Addr>, <Data>
# w4 20002000 11223344 55667788
# w1 20002000 11 22 33 44 55 66
# w2 20002000 1122 3344 5566

        15、设置jtag的传输速率

# speed <freq>|auto|adaptive
# speed 2000k
# speed auto

六、使用JLink+OpenOCD+gdb调试PI4步骤

1、硬件连接jlink;
2、启动openOCD
        # openocd -f jlink.cfg -f raspi4.cfg
3、加载固件及cpu复位
        # telnet localhost 4444
        > halt                                                // hold住cpu
        > load_image benos.bin 0x80000    // 将固件image.bin加载到addr地址
        > step 0x80000                                // 将cpu指针指向addr地址
4、启动gdb进行调试
        # aarch64-linux-gnu-gdb --tui benos.elf
        (gdb) target remote localhost:3333
        (gdb) step
        (gdb) next
        (gdb) info reg
        (gdb) layout reg

七、GDB命令汇总

        target [remote] [ip:port]:链接openOCD gdb server
        step/s:单步调试,进入函数
        next/n:单步调试,不进入函数
        run:全速运行
        finish:直到当前函数结束
        until/u:直到当前循环结束
        jump 5:跳转到程序第5行
        return:强制返回当前函数
        call/print <expr>:强制调用函数
        watch i != 10:检测表达式成立则停止
        break 6:在当前文件第6行打断点
        break func:在当前文件函数处打断点
        break fileName:N:在指定文件某行打断点
        info breakpoints:显示所有断点
        delete N:删除N号断点
        delete:删除所有点
        clear N:清楚行N上的所有断点
        continue:继续运行到下一个断点
        backtrace:显示当前函数栈信息
        show language:查看当前语言
        info frame:查看当前函数的程序语言
        info source:显示当前的调试源文件
        set language c++:手动设置当前的程序语言为c++
        set language:查看可以设置的程序语言
        kill:终止一个正在调试的程序
        print var:print显示变量(var)值
        print /x var:用16进制显示(var)值
        print *a@10:如果a是一个数组,10个元素,如果要显示则
        print x=4:修改运行时候的变量值
        whatis var:显示一个变量var的类型
        ptype var:以更详细的方式显示变量var的类型
        gdb <program> core:调试同时指明生成core文件
        list n1 n2:显示n1到n2行之间的代码
        info reg:显示寄存器
        layout reg:打开寄存器显示窗口


什么是JTAG那么,我怎么样才能利用它呢? 

深入理解jtag接口协议

模拟JTAG协议脱机编程

JTAG基本原理与调试

JTAG的TAP状态机介绍

[JTAG]跟我学JTAG协议破解——第一弹+初识JTAG+TAP状态机

JTAG原理和应用

JTAG IEEE 1194.1笔记

jlink使用方法笔记

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值