华为光猫HG8245H救砖笔记④为HG8245H配置OpenOCD调试环境
发表于:
2017-2-19 22:39
9444
华为光猫HG8245H救砖笔记④为HG8245H配置OpenOCD调试环境
原文发在我的blog:1bcK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0D9L8$3N6Q4x3X3g2U0M7$3g2J5M7$3!0X3N6q4)9J5k6h3&6W2N6q4)9J5c8X3q4J5j5$3S2A6N6X3g2K6i4K6u0r3x3e0b7%4
主要讲了OpenOCD的配置文件。
正文:
准备工具: Windows下使用OpenOCD+FT2232H进行片上调试需要以下工具:
HG8245H的硬件配置: CPU: Hisilicon SD5115 (基于ARM Cortex-A9) RAM:Hynix H5TQ1G63EFR-H9C (128 MBytes; 64Mbits x 16; DDR3-1333 9-9-9) Nand Flash:Spansion S34ML01G1-00TFI000 (128 MBytes; 48 nm SLC; 100,000 P/E) WLAN:Broadcom BCM43217 (802.11 b/g/n; 2×2 MIMO) OpneOCD配置文件概述: 使用OpenOCD来实现片上调试的最主要一步,就是编写OpenOCD的配置脚本文件。OpenOCD新版本的每次发布,或多或少都会更新一些自带的配置脚本文件。配置文件不光是描述如何与目标设备通信,还可以配置使用的JTAG适配器参数,目标设备上的Flash设备等。所以为了灵活的配置硬件,OpenOCD的scripts目录分了很多子目录:interface、cpu、fpga、board等,根据名字,大概可以知道该目录下的配置脚本文件的用途。
HG8245H的配置脚本文件: 这次的调试配置脚本,关于适配器部分我采用附带的FT2232系列配置文件,加以修改。而目标CPU部分,只能参考别的配置文件,自己写一个。具体编写过程就忽略不写了,这里直接放上来我写好的FT2232H的JTAG适配器配置文件和SD5115的配置文件: ft2232h.cfg:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#
# FT2232H
#
telnet _ port 14444
tcl _ port 16666
interface ftdi
# ftdi_device_desc "FT2232H Board"
ftdi_vid _ pid 0x0403 0x6010
adapter _ khz 30000
ftdi_tdo_sample_edge falling
ftdi_layout _ init 0x0508 0x0f1b
# ftdi_layout_signal nTRST -data 0x0200 -noe 0x0100
# ftdi_layout_signal nSRST -data 0x0800 -noe 0x0400
hi_sd5115_jtag.cfg:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#
# Hisilicon SD5115
#
transport select jtag
if { [ info exists CHIPNAME ] } {
set _CHIPNAME $ CHIPNAME
} else {
set _CHIPNAME sd5115
}
if { [ info exists CPUTAPID ] } {
set _CPU _ TAPID $ CPUTAPID
} else {
set _CPU _ TAPID 0x4ba00477
}
if { [ info exists ENDIAN ] } {
set _ENDIAN $ ENDIAN
} else {
# this defaults to a bigendian
set _ENDIAN little
}
if { [ info exists ETB_TAPID ] } {
set _ETB _ TAPID $ ETB _ TAPID
} else {
set _ETB _ TAPID 0x410CF231
}
jtag newtap $ _CHIPNAME cpu - irlen 4 - ircapture 0x1 - irmask 0xf - expected - id $ _CPU_TAPID
# jtag newtap $_CHIPNAME etb -irlen 4 -expected-id $_ETB_TAPID
set _TARGETNAME $ _CHIPNAME . cpu
target create $ _TARGETNAME cortex_a - endian $ _ENDIAN - chain - position $ _TARGETNAME
# etm_dummy config $_TARGETNAME
# etb config $_TARGETNAME $_CHIPNAME.etb
proc sd5115_dbginit { target } {
cortex_a dbginit
}
$ _TARGETNAME configure - event reset - assert - post "sd5115_dbginit $_TARGETNAME"
# init
# dap apsel 1
OpenOCD快速启动脚本: 为了方便启动OpenOCD,写了2个bat脚本来实现一键调试:
ft2232h_x64.bat:
@echo off
bin-x64 \ openocd. exe -s . . \ scripts -f . . \ ft2232h. cfg -f . . \ hi_ sd5115_ jtag. cfg
pause
open_telnet.bat(telnet的端口号根据实际配置文件,自行更改):
@echo off
telnet 127. 0. 0. 1 14444
OpenOCD调试测试: 首先为FT2232H替换驱动,因为FT2232H是双通道系列,所以PC上应该有2个设备(在通用串行总线控制器 下,应该有USB Serial Converter A和B,2个设备,如果想用A通道做JTAG适配器,就替换USB Serial Converter A),只需要替换一个通道的驱动即可,另一个保留FTDI的驱动,用作UART通信。 连接好HG8245H的JTAG并上拉DBGSEL,然后让CPU进入调试状态(让StartCode找不到UBoot,或者将Flash的RE#引脚与GND短接)。 给HG8245H上电,然后执行ft2232h_x64.bat。 如果JTAG正常的话,OpenOCD的控制台里会输出以下类似的内容:
Open On-Chip Debugger 0.10.0 Licensed under GNU GPL v2 For bug reports, readaa5K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3!0H3k6h3&6G2j5$3c8Q4x3X3g2G2M7X3N6Q4x3V1k6V1L8$3y4Q4x3V1k6V1L8%4S2&6k6$3g2F1i4K6u0r3j5Y4g2Y4M7#2)9J5k6h3S2@1L8h3H3`. adapter speed: 30000 kHz ftdi samples TDO on falling edge of TCK Error: libusb_open() failed with LIBUSB_ERROR_NOT_SUPPORTED Info : clock speed 30000 kHz Info : JTAG tap: sd5115.cpu tap/device found: 0x4ba00477 (mfg: 0x23b (ARM Ltd.), part: 0xba00, ver: 0x4) Info : DAP transaction stalled (WAIT) – slowing down Info : DAP transaction stalled (WAIT) – slowing down Info : DAP transaction stalled (WAIT) – slowing down Info : sd5115.cpu: hardware has 6 breakpoints, 4 watchpoints
需要注意的是:Error: libusb_open() failed with LIBUSB_ERROR_NOT_SUPPORTED。
该错误其实不是问题,因为FT2232H是双通道的,2个通道的VID,PID都是一样的。并且只替换了通道A的驱动,所以这个错误,可能是打开通道B时出现的,只要OpenOCD的控制台没有一闪而退,就是正常的。
没有问题的话,可以执行open_telnet.bat打开telnet,执行OpenOCD的命令。
如果不知道哪些命令可用,可以在telnet里执行help查看命令帮助,也可以翻看OpenOCD的用户手册 。
[培训]科锐逆向工程师培训第53期2025年7月8日开班!
上传的附件: