使用urjtag了解WRV54G

早年写的笔记,压箱底了,翻出来晒晒

目          录

使用urjtag了解WRV54G.. 1

实验环境... 1

WRV54G路由器配置... 2

硬件部分... 2

核心部分... 3

接口部分... 3

并口wiggler3

软件部分... 4

安装linux版本的urjtag. 5

在虚拟机中添加并口... 5

调试WRV54G.. 8

读取信息和flash. 9

写入flash. 11

安装windows版本的urjtag. 13

安装libusb和ftd2xx.dll13

urjtag控制usb openjtag. 13

需要注意的事... 13

Windows版本的urjtag运行错误... 13

Flash地址的问题... 13

板子对urjtag的支持... 14

实验环境

u  WRV54G路由器 IXP425 266Mhz 32M ram 8M flash

u  FC4

u  Windows XP sp3

u  libusb-win32-filter-bin-0.1.12.2.exe

u  CDM 2.04.16 WHQL Certified

WRV54G路由器配置

硬件部分

当前的电路板编号为WX5715_V02。其中一个类似的图片如下,只是flash芯片和无线网卡有所不同:

核心部分

IXP425 266Mhz

32M SDRAM(芯片型号etronTech的em639165TS-6G,两片)

8M flash(芯片型号intel JS28F640 J3D75,一片)

关于IXP425,有资料有如下说明

“Thehardware is operating in big endian mode. This is contrary to most ARM systemswhich run in little endian mode. The reason is that the IXP NPEs are onlyusable in big endian. The Intel access libraries do not support little endianmode.”

接口部分

电源为POE供电,但是也有一个单纯的电源接口。

TTL可以利用特殊电路和串口通信

JTAG口

WAN: One 10/100 RJ-45 port for Cable/DSLModem

LAN: Four 10/100 RJ-45 switched ports

以太网phy芯片为DELTA LFE8731

交换芯片为KS8995MA

并口wiggler

使用很多软件如jflash等都不能调试IXP425,其中有份资料上提到IXP425也许要求ntrst和nsrst能独立控制。但是使用urjtag并不需要这两个管脚独立。

本实验中使用的wiggler电路图如下:

软件部分

WRV54G路由器使用openrg linux, bootloader是rg bootloader。rg bootloader提供一些简单的命令。分区如下:

OpenRG boot>flash_layout

Flash layout:

Section 00 TypeBOOT       Range 0x00000000-0x00100000MaxSize 0x00100000

No more information.

Section 01 TypeIMAGE      Range 0x00100000-0x00800000MaxSize 0x006FFF6C

Size 0x0049C260 Name 'IMAGE'

Checksum 0x261AF47F Counter 0x00000001 Start Offset 0x00000000

Section 02 TypeIMAGE      Range 0x00800000-0x00F00000 MaxSize 0x006FFF6C

Uninitialized.

Section 03 TypeFLASH_SECT_BOOTCONF Range 0x00F00000-0x00F20000 MaxSize 0x0001FF6C

Uninitialized.

Section 04 TypeFLASH_SECT_CONF Range 0x00F20000-0x00F40000 MaxSize 0x0001FF6C

Size 0x00001A8CName 'rg_conf'

Checksum 0x000D37FE Counter 0x00000014Start Offset 0x00000000

Section 05 TypeFLASH_SECT_CONF Range 0x00F40000-0x00F60000 MaxSize 0x0001FF6C

Size 0x000019F4 Name 'rg_conf'

Checksum 0x000CF119 Counter 0x00000013Start Offset 0x00000000

Section 06 TypeFACTORY    Range 0x00F60000-0x00F80000 MaxSize 0x0001FF6C

Size 0x0000021F Name 'Image downloaded from:tftp://192.168.1.10/usr8200_default'

Checksum 0x0000A23E Counter 0x00000008 Start Offset 0x00000000

可以看到已经被分成了7个区。

安装linux版本的urjtag

urjtag有windows版本的linux版本的,官方网站是http://urjtag.org/.下载urjtag-0.10.tar.bz2,解压到/home/linuxuser/urjtag。

输入如下命令

#cd /home/linuxuser/urjtag

#./configure--with-includes

#make; makeinstall

安装完之后如果是root登录,读取flash得到的文件保存在root目录下。可以在jtag下输入“shell pwd”看到当前目录。

在虚拟机中添加并口

如果使用的Linux是安装在虚拟机中,只需要在虚拟机里把并口添加进去就好了。

1. 在VMàsettingsàhardware里点击add

2. 出现add hardware窗口,点击parallel port

3. 选择use physical parallel port on the host, 点击next

4. 选择LPT1,点击finish,就可以在vmware里面启动linux并且使用并口了。

调试WRV54G

在终端输入jtag命令,屏幕显示如下

UrJTAG 0.10#1502

Copyright (C)2002, 2003 ETC s.r.o.

Copyright (C) 2007,2008, 2009 Kolja Waschk and the respective authors

UrJTAG is freesoftware, covered by the GNU General Public License, and you are

welcome tochange it and/or distribute copies of it under certain conditions.

There isabsolutely no warranty for UrJTAG.

WARNING: UrJTAGmay damage your hardware!

Type"quit" to exit, "help" for help.

jtag>

读取信息和flash

使用detect和detectflash命令检查硬件,detectflash的用法是detectflash addr。WRV54G的flash应该位于0x0,但是实际上detectflash 0x5000000一样能检查出来。

jtag> detect

IR length: 7

Chain length: 1

Device Id:00011001001001110111000000010011 (0x0000000019277013)

Manufacturer: Intel

Part(0):         IXP425-266MHz

Stepping:    B0

Filename:    /usr/local/share/urjtag/intel/ixp425/ixp425

jtag>detectflash 0

Queryidentification string:

Primary Algorithm Command Set andControl Interface ID Code: 0x0001 (Intel/Sharp Extended Command Set)

Alternate Algorithm Command Set andControl Interface ID Code: 0x0000 (null)

Query systeminterface information:

Vcc Logic Supply Minimum Write/Erase orWrite voltage: 2700 mV

Vcc Logic Supply Maximum Write/Erase orWrite voltage: 3600 mV

Vpp [Programming] Supply MinimumWrite/Erase voltage: 0 mV

Vpp [Programming] Supply MaximumWrite/Erase voltage: 0 mV

Typical timeout per single byte/wordprogram: 64 us

Typical timeout for maximum-sizemulti-byte program: 128 us

Typical timeout per individual blockerase: 1024 ms

Typical timeout for full chip erase: 0ms

Maximum timeout for byte/word program:256 us

Maximum timeout for multi-byte program:1024 us

Maximum timeout per individual block erase:4096 ms

Maximum timeout for chip erase: 0 ms

Device geometrydefinition:

Device Size: 8388608 B (8192 KiB, 8MiB)

Flash Device Interface Codedescription: 0x0002 (x8/x16)

Maximum number of bytes in multi-byteprogram: 32

Number of Erase Block Regions withindevice: 1

Erase Block Region Information:

Region 0:

Erase Block Size:131072 B (128 KiB)

Number of Erase Blocks:64

使用readmem读取flash。在此之前,可以利用openrg的flash_dump命令打印出flash中的部分内容,和jtag读取出来的对比,判断是否正确。另外注意,只要jtag启动了,那串口就控制不了。

以下是正常启动是利用flash_dump读取0x0-0x800的flash部分内容:

00000000: e1 a0 c000 e3 a0 00 d3  e1 21 f000 e3 a0 00 78  |.........!.....x|

00000010: e3 8000 80 ee 01 0f 10  ee 12 0f 10 e1 a000 00  |................|

00000020: e2 4f f0 04 e3 a0 00 00  ee 0d 0f 10 ee 12 0f 10 |.O..............|

00000030: e1 a0 00 00 e2 4f f0 04  ee 07 0f 17 ee 12 0f 10 |.....O..........|

00000040: e1 a0 00 00 e2 4f f0 04  ee 07 0f 9aee 12 0f 10  |.....O..........|

00000050: e1 a0 00 00 e2 4f f0 04  e3 a0 00 01 ee 0f 0f11  |.....O..........|

00000060: ee 07 0f 9aee 12 0f 10  e1 a000 00 e2 4f f0 04  |.............O..|

00000070: e3 a0 10 2a e3 a023 33  e5 82 10 00 e3 a0 10 00 |...*..#3........|

00000080: e5 9f 30 c8e5 83 10 00  e3 a0 10 03 e5 9f40 c0  |..0...........@.|

00000090: e5 8410 00 e3 a0 0901  e2 50 00 01 12 4f f0 0c |.........P...O..|

000000a0: e5 9f10 b0 e5 83 10 00  e3 a0 09 01 e2 50 00 01  |.............P..|

000000b0: 12 4f f0 0c e3 a010 02  e5 84 10 00 e3 a0 09 01 |.O..............|

000000c0: e2 50 00 01 12 4f f0 0c  e3 a010 04 e3 a0 5008  |.P...O........P.|

000000d0: e5 8410 00 e3 a0 0c 01 e2 50 00 01 12 4ff0 0c  |.........P...O..|

000000e0: e2 5550 01 1a ff fff9  e3 a0 10 01 e5 84 10 00 |.UP.............|

000000f0: e3 a009 01 e2 50 00 01  12 4f f0 0c e3 a010 06  |.....P...O......|

00000100: e5 8410 00 e3 a0 0901  e2 50 00 01 12 4f f0 0c |.........P...O..|

因为IXP425是big endian的, 所以要jtag要改成big endian的再读。Readmem的用法是readmem ADDR LEN FILENAME。

输入两条命令:

jtag> endianbig

jtag> readmem0 0x800 54redboot

屏幕打印如下:

jtag> endianbig

jtag>

jtag> readmem0 0x800 54redboot

address:0x00000000

length:  0x00000800

reading:

addr: 0x00000800

Done.

jtag>

54redboot是保存内容的文件,是二进制文件,默认在urjtag的安装目录下。内容如下图。

对比发现,两种方法读取的内容是一致的。

写入flash

主要的写入命令是flashmem,在此写入redboot文件。先使用eraseflash命令测试擦除。然后使用flashmem写入预先写好的二进制文件。

jtag>eraseflash 0x80000 1

Manufacturer:Intel

Chip: 28F640J3A

Erasing 1 Flashblock from address 0x80000

(100% Completed)FLASH Block 4 : Unlocking ... Erasing ... Ok.

ErasingCompleted.

jtag>flashmem 0x80000 linux_red50080000test

Manufacturer:Intel

Chip: 28F640J3A

program:

block 4 unlocked

erasing block 4:0

addr: 0x00080000

addr: 0x000807FE

verify:

addr: 0x000807FE

Done.

使用eraseflash命令擦除完之后,该部分的内容都变成0x80,可以使用readmem命令读取出来看看。Flashmem默认是写入完成之后再读出来校验一次,当然也可以加入noveirfy选项跳过,如下所示:

jtag>flashmem 0 redboot-ROM.bin noverify

Manufacturer:Intel

Chip: 28F640J3A

program:

block 0 unlocked

erasing block 0:0

addr: 0x00000000

addr: 0x0001F000

block 1 unlocked

erasing block 1:0

addr: 0x00032000

addr: 0x00033000

addr: 0x0003D000

addr: 0x0003F000

block 2 unlocked

erasing block 2:0

addr: 0x00045422

verify skipped

安装windows版本的urjtag

Windows版本以前需要安装cywin,最新的版本urjtag 0.10已经不需要了。所有的命令操作和linux版本的一样。但是似乎windows版本的还不完善,有读取错误发生。以前需要安装cywin的版本,也许没有这个问题。

安装libusb和ftd2xx.dll

urjtag需要另外两个软件才能运行。下载libusb-win32-filter-bin-0.1.12.2.exe,双击安装即可。下载地址为http://sourceforge.net/projects/libusb-win32/files/

再下载CDM 2.04.16 WHQL Certified,下载后得到是一个压缩包,解压后,将\i386\ftd2xx.dll复制到urjtag的安装目录,下载地址为http://www.intra2net.com/en/developer/libftdi。

如果缺少这些软件,urjtag将无法启动。

urjtag控制usb openjtag

前面讲的都是urjtag使用并口wiggler,实际上也能使用openjtag。openjtag和jtagkey是兼容的。

和并口不同的是cable的选择

jtag>cable JTAGkey ftd2xx-mpsse 1457:5118

Connected to libftd2xx driver.

接下来的所有操作和并口的就一样了,不同的是usb的读写速度大概是并口的16倍左右。

需要注意的事

Windows版本的urjtag运行错误

Windows版本的urjtag在使用并口的时候运行不太正常,读取的时候经常随机加入0xD,导致读取错误。而linux版本没有这个问题。

Flash地址的问题

上面提到过可以在0x0开始写入flash,但是如果WRV54G把bootloader成功刷新到redboot后,使用fis list命令可以发现flash的地址变成到了0x50000000,但是实际上物理地址不可能因为换了bootloader而发生改变的。可以测试在0x50000000写入数据,都会报错。

jtag> eraseflash0x50080000 1

Manufacturer:Intel

Chip: 28F640J3A

Erasing 1 Flashblock from address 0x50080000

Erasing Failed.

jtag>flashmem 0x50080000 linux_red50080000test

Manufacturer:Intel

Chip: 28F640J3A

program:

addr: 0x500807FE

verify:

addr: 0x50080000

verify error:

read: 0x0000E1A0

expected:0x0000FFFF

根据资料可以看到,0x50000000是MMU处理之后的地址。

板子对urjtag的支持

并不是所有的板子都能够支持urjtag,即使是linux版本,像板型非常相近的IXP425 P720板,能够支持detect和detectflash,而且显示都是正确的数据,但是读取和写入都会发生错误。读取的时候随机产生错误。每次读取不同长度的flash,可能会发现同样地址的数据读取的一样。举例如下,读取的部分内容是正确的,但是有的是错误的,有的干脆就是FF,而且循环出现。

使用urjtag了解WRV54G相关推荐

  1. jtag引脚定义_从逆向分析的角度学习硬件调试技巧JTAG,SSD和固件提取

    我想从逆向的角度做了深入了解JTAG,JTAG是许多嵌入式CPU使用的硬件级别调试机制,我希望通过这篇文章从逆向工程师的角度解释如何使用JTAG,并在此过程中提供一些实际示例. 0x01 研究目标 通 ...

  2. SNMP网管NAT穿透的问题

    最近遇到一个问题,SNMP网管不能穿透路由器管理到私网设备(即使内网中的设备先使用trap包打洞出来),因此研究了一下NAT机制. 现在多数路由器都支持NAT转换,但实现模式不同,因此当你需要NAT穿 ...

  3. AGM脱机烧录器的使用入门

    通过本文,介绍一下AGM脱机烧录器(制造商:海振远科技)的使用方法,通过该烧录器,可以对AG256, AG576等器件进行脱机烧录,速度快,应用简单,易于帮助客户快速批量烧录程序. 一.烧录器供电方式 ...

最新文章

  1. Codeforces1600数学day5[找规律CodeForces - 1059C,贪心数学A - Banh-mi CodeForces - 1062C ]
  2. 《梦醒黄金城》主创暨明星见面会举办 预计2019年完成拍摄
  3. 我们一直使用的管理系统oner
  4. Android 通过反射让SQlite建表
  5. jQuery 3教程(三):jQuery集合
  6. 读取文件夹下所有的文件
  7. form 多条数据 只保存修改的行_MVC中的新增、修改、删除
  8. nodejs对mongodb数据库的增删改查操作(转载)
  9. 【剑指offer】面试题10- II:青蛙跳台阶问题(Java)
  10. 线段树——最大数——洛谷——1198
  11. vue elementui表单清空前一次的数据
  12. fill()函数和fill_n()函数
  13. 互联网平台掘金三四五线城市,你需要知道的9.9个真相
  14. 拼多多参谋:拼多多隐私号是什么意思?拼多多隐私号怎么查看真实号码?
  15. 4g数据需要排序计算机内存,20 亿个数字在 4G 内存中如何去重排序:快来试一试 BitMap...
  16. weblogic增大线程数
  17. 4G工业路由器DTU的扩展功能
  18. python取excel单元格数值_python读取excel文件单元格中的数据返回类型
  19. 【4G5G基础学习】物理层-物理随机接入信道PRACH与随机接入过程
  20. 第7讲 替代定理、戴维南定理、诺顿定理

热门文章

  1. 原生JavaScript批量下载文件压缩包
  2. XP的故障恢复控制台
  3. eclipse新建JSP页面报错:Multiple annotations found at this line解决方法
  4. 逆水寒2021最新服务器,【图片】《逆水寒》2021年4月29日更新公告【逆水寒ol吧】_百度贴吧...
  5. spark idea报错:json standard allows only one-top level
  6. 11G rac修改监听端口
  7. 顺序栈和链栈实现汉洛塔
  8. Oracle event px,oracle wait event:PX Deq Credit: send blkd
  9. 多宽带联网(一) OpenWrt中使用Macvlan实现单线多拨上网
  10. PS制作3D立体字、透明气泡