- probe device: Olimex ARM-USB-OCD-H
- target device: Raspberry Pi 2
- host machine: Ubuntu 15.04
openocd-0.9.0
as debugger host:- probe device driver:
libftd2xx1.1.12
- probe device configuration:
olimex-arm-usb-ocd-h.cfg
(@see below) - target device configuration:
openocd-rpi2.cfg
(@see below)
- probe device driver:
- debug client:
telnet
orgdb
- pin assign between
Olimex ARM-USB-OCD-H
andRaspberry Pi 2
This method is obsolete. By openocd warning message, you should use libftdi.
- download FTDI proprietary D2XX driver for linux from here
- installation guide is here
- extract to ./libftd2xx1.1.12/
- (optional) locate libraries to /usr/local/lib/
sudo cp libftd2xx1.1.12/build/x86_64/libftd2xx.a /usr/local/lib/
sudo cp libftd2xx1.1.12/build/x86_64/libtd2xx.so.1.1.12 /usr/local/lib/
sudo ln -s /usr/local/lib/libtd2xx.so.1.1.12 /usr/local/lib/libftd2xx.so
sudo chmod 0755 /usr/local/lib/libtd2xx.so.1.1.12
Download "openocd-0.9.0 release" from here
$ cd openocd-0.9.0
$ ./configure --enable-maintainer-mode --enable-legacy-ft2232_ftd2xx --with-ftd2xx-lib=static --with-ftd2xx-linux-tardir=../libftd2xx1.1.12
--- src/Makefile.org 2015-07-16 17:51:11.333497970 +0900
+++ src/Makefile 2015-07-16 17:52:06.797236301 +0900
@@ -275,11 +275,11 @@
INSTALL_SCRIPT = ${INSTALL}
INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
LD = /usr/bin/ld -m elf_x86_64
-LDFLAGS = -L/home/tono/OpenOCD/libftd2xx1.1.12/build/x86_64
+LDFLAGS = -L/home/tono/OpenOCD/libftd2xx1.1.12/build/x86_64 -L/lib64
LIBFTDI_CFLAGS =
LIBFTDI_LIBS =
LIBOBJS =
-LIBS = -lftd2xx -lrt -ldl
+LIBS = -lftd2xx -lrt -ldl -lpthread
LIBTOOL = $(SHELL) $(top_builddir)/libtool
LIBTOOL_DEPS = ./ltmain.sh
LIBUSB0_CFLAGS =
$ ldd openocd-0.9.0/src/openocd
linux-vdso.so.1 => (0x00007ffc599bc000)
libusb-0.1.so.4 => /lib/x86_64-linux-gnu/libusb-0.1.so.4 (0x00007f5dace03000)
libusb-1.0.so.0 => /lib/x86_64-linux-gnu/libusb-1.0.so.0 (0x00007f5dacbeb000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f5dac8e3000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f5dac6df000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f5dac4c1000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f5dac0f7000)
libudev.so.1 => /lib/x86_64-linux-gnu/libudev.so.1 (0x00007f5dabee4000)
/lib64/ld-linux-x86-64.so.2 (0x00007f5dad00c000)
# Olimex ARM-USB-OCD-H
# http://www.olimex.com/dev/arm-usb-ocd-h.html
interface ft2232
ft2232_device_desc "Olimex OpenOCD JTAG ARM-USB-OCD-H"
ft2232_layout olimex-jtag
ft2232_vid_pid 0x15ba 0x002b
from here Thanks jitomesky! I bought your book!
# ref: http://www.raspberrypi.org/forums/viewtopic.php?f=72&t=100268
# : http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0464f/ch10s06s01.html
adapter_khz 1000
adapter_nsrst_delay 400
reset_config none
gdb_breakpoint_override hard
if { [info exists CHIPNAME] } {
set _CHIPNAME $CHIPNAME
} else {
set _CHIPNAME rpi2
}
#
# Main DAP
#
if { [info exists DAP_TAPID] } {
set _DAP_TAPID $DAP_TAPID
} else {
set _DAP_TAPID 0x4ba00477
}
jtag newtap $_CHIPNAME dap -irlen 4 -ircapture 0x01 -irmask 0xf -expected-id $_DAP_TAPID
set _TARGETNAME $_CHIPNAME.cpu.0
target create $_TARGETNAME cortex_a -chain-position $_CHIPNAME.dap -coreid 0 -dbgbase 0x80010000
set _TARGETNAME $_CHIPNAME.cpu.1
target create $_TARGETNAME cortex_a -chain-position $_CHIPNAME.dap -coreid 1 -dbgbase 0x80012000
set _TARGETNAME $_CHIPNAME.cpu.2
target create $_TARGETNAME cortex_a -chain-position $_CHIPNAME.dap -coreid 2 -dbgbase 0x80014000
set _TARGETNAME $_CHIPNAME.cpu.3
target create $_TARGETNAME cortex_a -chain-position $_CHIPNAME.dap -coreid 3 -dbgbase 0x80016000
$_TARGETNAME configure -event reset-assert-post "cortex_a dbginit"
$_TARGETNAME configure -event gdb-attach { halt }
$ rmmod ftdi_sio usbserial
$ sudo src/openocd -f olimex-arm-usb-ocd-h.cfg -f openocd-rpi2.cfg
[sudo] password for tono:
Open On-Chip Debugger 0.9.0 (2015-07-16-17:40)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
Info : only one transport option; autoselect 'jtag'
adapter speed: 1000 kHz
adapter_nsrst_delay: 400
none separate
Warn : Using DEPRECATED interface driver 'ft2232'
Info : Consider using the 'ftdi' interface driver, with configuration files in interface/ftdi/...
Info : device: 6 "2232H"
Info : deviceID: 364511275
Info : SerialNumber: OLYPBH2QA
Info : Description: Olimex OpenOCD JTAG ARM-USB-OCD-H A
Info : max TCK change to: 30000 kHz
Info : clock speed 1000 kHz
Info : JTAG tap: rpi2.dap tap/device found: 0x4ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x4)
Info : rpi2.cpu.0: hardware has 6 breakpoints, 4 watchpoints
Info : rpi2.cpu.1: hardware has 6 breakpoints, 4 watchpoints
Info : rpi2.cpu.2: hardware has 6 breakpoints, 4 watchpoints
Info : rpi2.cpu.3: hardware has 6 breakpoints, 4 watchpoints
Now connection established, you can see the brinking LED on top of ARM-USB-OCD-H.
open another terminal
$ telnet localhost 4444
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Open On-Chip Debugger
> halt
ttbcr 0ttbr0 ca5eaa5attbr1 fd7c7f73
rpi2.cpu.3 rev 5, partnum c07, arch f, variant 0, implementor 41
number of cache level 2
cache l2 present :not supported
rpi2.cpu.3 cluster f core 3 multi core
target state: halted
target halted in ARM state due to debug-request, current mode: Supervisor
cpsr: 0x600001d3 pc: 0x000000c4
MMU: disabled, D-Cache: disabled, I-Cache: disabled
Download gcc-arm-none-eabi-4_9-2015q1-20150306-linux.tar.bz2 or later from here .
JTAG hook HYP mode on RPi-2
BOOT/armjtag.hyp
Download special bootcode
bcm2836-raspi2-bootblk.bin.ift
from here and concatenate .$ cat bcm2836-raspi2-bootblk.bin.ift armjtag.bin > armjtag.hyp
BOOT/config.txt
Boot RPi-2
Run OpenOCD
Connect to openocd server
cpsr: 0x600001da
... Mode field(bits [4:0]) indicates that we are inHYP
(0b11010).umm... openocd-0.9 does not recognize Hypervisor mode of Cortex-A7 MPCore architecture correctly.
Research for rebuilding OpenOCD
About details, refer to the "How to enable debugging in HYP-mode" described below comment.
Research about bootstrap code for HYP
Enable HYP mode on RPi-2 when booting #369
Cortex-A7 initialization code & TrustZone/ Secure Boot @ AMR Connected Community
original boot code if a line of
kernel_old=1
is not described inconfig.txt
xvisor-next/docs/arm/bcm2836-raspi2-bootblk.bin.ift
u-boot/arch/arm/cpu/armv7/nonsec_virt.S
Perhaps, special bootcode
bcm2836-raspi2-bootblk.bin.ift
has built fromnonsec_virt.S
.