龙芯ejtag简明手册
龙芯中科乔崇
April3,2013
Contents
1安装1
1.1windows下安装 (1)
1.2Linux下安装 (1)
1.3配置文件和启动参数 (1)
1.4命令行参数 (1)
1.5ejtag-debug参数 (2)
1.6ejtag使用顺序 (2)
1.7ejtag连接和速度问题 (2)
2寄存器读写2
2.1通用寄存器读写 (2)
2.2协处理器读写 (3)
3ejtag寄存器读写3 4内存读写3
4.1读写内存 (3)
4.2内存测试 (4)
4.3保存内存到文件 (4)
4.4上传文件到内存 (4)
4.5上传启动elf文件 (4)
5cache相关命令5 6flash烧写5
6.1配置内存参数 (5)
6.2烧写flash (5)
7调试功能5
7.1软件指令断点 (5)
7.2硬件指令断点 (5)
7.3数据断点 (6)
7.4单步调试 (6)
8gdb调试功能6
8.1gdbserver功能 (6)
8.2内嵌gdb功能 (6)
9其他命令6 10二进制扩展功能7 11脚本扩展功能7
1
CONTENTS2
Abstract
EJTAG是mips的onchip debug调试标准。现在龙芯1号、龙芯2号(龙芯2F和以前版本不支持)和龙芯3号系
列都支持ejtag调试。通过ejtag可以大大方便软件调试,这里讲讲ejtag原理和ejtag-debug软件。
ejtag-debug是我编写的一个ejtag调试调试工具,支持读写寄存器、内存、反汇编、执行用户编写的小程
序、gdb远程调试和脚本语言。
1
1安装
软件下载地址为www.loongson/uploadfile/embed/ls1b/ejtag/。
其中是linux版本。ejtag-debug-cygwin-xxx.rar为windows版本。请下载安装最新版本使用。
1.1windows下安装
•龙芯ejtag在windows下使用需要安装驱动,如果windows下没有安装驱动执行ejtag_会提示缺少libusb库,或者不到设备。驱动按照过程如下:
1.首先将usb电缆插入pc机的usb口,这个时候windows会检测出未知的usb设备插入提示按照驱动
2.选择手动安装,并指定安装目录为ejtag-debug/driver目录,然后下一步来自动安装驱动
3.还可以在设备管理器里面为未安装驱动的usb设备,vid:2961,pid:6688,然后指定按照
ejtag-debug/driver目录里面的驱动即可。
驱动安装完后,直接双击ejtag_执行就可以了。
•ejtag程序的一些命令会调到脚本,需要安装perl。可以下载active perl或者strawberry perl都可以/get.html#win32.
•如果在cygwin下执行,需要将ejtag-debug里面的cygwin1.dll删除,否则程序会自动退出去。
1.2Linux下安装
在linux下不需要安装驱动,直接以超级用户权限执行ejtag_即可。
1.3配置文件和启动参数
配置文件是ejtag.cfg程序会自动打开./ejtag.cfg并执行里面的内容。因为本软件同时支持龙芯1、2、3三个系列的处理器,在运行之前需要根据你要调试的处理器类型对ejtag.cfg进行配置。
•setconfig core.cpucount1设置处理器核的个数,如龙芯3A有4个处理器核,应该设置成4,龙芯3B 设置成8,龙芯2H、龙芯1A、1B、1C、1D设置成1。
•setconfig core.cpuwidth32设置处理器寄存器宽度,如龙芯3A是64位处理器,应该设置成64,龙芯3B、龙芯2H设置成64,龙芯1A、1B、1C、1D设置成32。
其他和功能相关的一些设置:
•helpaddr:帮助地址,帮助程序执行的地址,地址应该指向ddr,cache/uncache都可以
•usb_ejtag.put_speed范围00xffff,调节ejtag的usb读取速度,设置越大速度越慢,当主机速度较慢的时候需要配置延迟大一些
•usb.maxtimeout usb访问的最大超时时间,如果usb_ejtag.put_speed设置较大,usb.maxtimeout也要设置更大一些
•putelf.uncached:设置0putelf、program命令上传数据到cache地址,然后刷cache,1在put、program 先刷cache然后上传到uncache地址,2put、program上传到uncache地址,不刷cache.如果设置为0,1一定要保证cache被初始化,如果cache没被初始化运行cache_config和cache_int命令•timer1000:设置timer1000ms检查一次ejtag状态,如果usb速度慢设置更大一些,timer0关闭timer 检测ejtag状态功能
1.4命令行参数debug灯
./ejtag_debug_usb
1.5ejtag-debug参数2
1.5ejtag-debug参数
./ejtag_debug_usb[-dlStch][-e cmd][-T n]
-d:verbose on,show debug messags
-e'cmd':run cmd
-l:do not use read line
-S:log disassemble info
-s:run cmdserver
-t:disable timer
-T n:set timer n ms
-c:do not load cfg file
-h:show this help
1.6ejtag使用顺序
1.主板先上电
2.ejtag usb端插入
3.ejtag插头插到主板的ejtag座上,注意三角形(1脚)对主板上的三脚形(1脚)
4.运行sudo./ejtag_debug_usb-t来执行ejtag软件
5.如果ejtag已经插在座上,处理器下电了,处理器再上电后需要在ejtag软件里面允许
来对处理器发出一个trst复位操作
1.7ejtag连接和速度问题
•将ejtag插入usb口可以观察到usb ejtag的两个灯开始都亮,1s后只有一个灯亮。这说明usb ejtag硬件没有问题。
•sudo./ejtag_debug_usb-t运行ejtag软件,jtagled1命令灯亮,jtagled0命令灯灭。说明usb驱动安装正常。
•然后将ejtag插头插到主办上,注意1脚对1脚,ejtag.cfg里面的cache_config注释掉
•运行sudo./ejtag_debug_usb-t,运行jtagregs d811来读处理器的ejtag id寄存器,如果是0x20010819或者是0x5a5a5a5a都说明连接正确
•运行set命令读处理器的通用寄存器,如果能读出来且非全0,则说明处理器运行起来了,ejtag也连接上了
•如果读不出来,按ctrl-c退出。可能是处理器在无程序的情况下运行到地址空洞,设备没响应,总线卡住了。可以运行resetcpu命令来复位cpu,然后按set就能读出通用寄存器内容了。
•在进行put,get,program命令的时候,如果是虚拟机,虚拟usb速度很慢,响应的龙芯处理器要等更长时间接usb数据,setconfig usb_ejtag.put_speed要设置更大一下,同setconfig usb.maxtimeout 也要设置更大一些。
•在进行put,get,program命令的时候,可能会刷cache,一定要保证cache已经初始化过了,或者设置设置setconfig putelf.uncached2,或者运行cache_config,cache_init先对cache进行初始化。2寄存器读写
2.1通用寄存器读写
•读通用寄存器:set[寄存器名]
•写通用寄存器:set[寄存器名][数值]
•save[file]:保存通用寄存器内容到文件/临时内存中
•restore[file]:恢复通用寄存器内容来自于文件/临时内存中
2.2协处理器读写3为了方面脚本软件调用,也可以用下面的方法访问
cpusregs表示设置d1、d2、d4、d8为1、2、4、8字节寄存器读功能,m1、m2、m4、m8为1、2、4、8字节寄存器写功能。
d412表示读寄存器1开始的两个寄存器也就是at和v0寄存器。m410x100描述写寄存器1为0x100,也就是设置at寄存器为0x100。
2.2协处理器读写
•选择协处理器组为sel,默认为0:cp0regs[sel]
•协处理器读:d4regno[count]或者cp0regs sel d4regno[count]
•写处理器写:m4regno value或者cp0regs sel m4regno value
3ejtag寄存器读写
•选择ejtag寄存器读写功能:jtagregs
•ejtag寄存器读:d4regno[count]或者jtagregs d4regno[count]
•ejtag寄存器写:m4regno value或者jtagregs d4regno value
4内存读写
4.1读写内存
•选择内存读写功能:mems
•读内存:d4addr[count]或者mems d4addr[count]
•写内存:m4addr value或者mems m4addr value
•反汇编:disas addr[count]:反汇编addr开始count个指令
•[s]memcpy[1/2/4]src dst size:拷贝内存从src到dst,命令包括smemcpy1,fmemcpy1,memcpy1等等。smemcpy[1/2/4]不用helpaddr速度慢,memcpy[1/2/4]跳到helpaddr中执行速度快。
•[s]memset[1/2/4]addr c size:设置size大小内存内容为c,命令包括smemset1,fmemset1,memset1等等。smemset[1/2/4]不用helpaddr速度慢,memset[1/2/4]跳到helpaddr中执行速度快。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论