openocd support for aarch64 targetsconnect.linaro.org.s3.amazonaws.com/hkg18/... · beaglebone...

13
OpenOCD support for AArch64 targets Omair Javaid

Upload: others

Post on 27-May-2020

9 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: OpenOCD support for AArch64 targetsconnect.linaro.org.s3.amazonaws.com/hkg18/... · Beaglebone Black HiKey 96 Board Raspberry Pi 3 Nitrogen 96 Board. Linaro’s OpenOCD Efforts (cont…)

OpenOCD support for AArch64 targets

Omair Javaid

Page 2: OpenOCD support for AArch64 targetsconnect.linaro.org.s3.amazonaws.com/hkg18/... · Beaglebone Black HiKey 96 Board Raspberry Pi 3 Nitrogen 96 Board. Linaro’s OpenOCD Efforts (cont…)

● An introduction of JTAG/SWD based hardware debugging● An introduction of OpenOCD and its architecture● What Linaro has been doing with OpenOCD● Work in progress and future plans

Introduction

Page 3: OpenOCD support for AArch64 targetsconnect.linaro.org.s3.amazonaws.com/hkg18/... · Beaglebone Black HiKey 96 Board Raspberry Pi 3 Nitrogen 96 Board. Linaro’s OpenOCD Efforts (cont…)

● Development Hardware○ Runs software to be debugged - Firmware, Bootloaders, Kernel, User apps etc.○ Provides a hardware debugging interface like JTAG or SWD○ JTAG/SWD interface allows use of run-control and other debug facilities provided by the core.

JTAG/SWD Debugging - Introduction

Debug AdapterDevelopment Hardware

Debug & Trace Logic

Core Logic

JTAG Host Computer (Linux / Win / Mac)

OpenOCDParallel

GDB

GDB RSPSWD

Ethernet

USBJTAG

Signaling

SWD Signaling

Com

munication

Interface

Page 4: OpenOCD support for AArch64 targetsconnect.linaro.org.s3.amazonaws.com/hkg18/... · Beaglebone Black HiKey 96 Board Raspberry Pi 3 Nitrogen 96 Board. Linaro’s OpenOCD Efforts (cont…)

● Debug Adapter or Probe○ Communicates with hardware board by using JTAG/SWD signaling○ Communicates with host computer using USB, Ethernet etc○ May host a on-board JTAG/SWD driver and a gdb stub

JTAG/SWD Debugging - Introduction (cont…)

Debug AdapterDevelopment Hardware

Debug & Trace Logic

Core Logic

JTAG Host Computer (Linux / Win / Mac)

OpenOCDParallel

GDB

GDB RSPSWD

Ethernet

USBJTAG

Signaling

SWD Signaling

Com

munication

Interface

Page 5: OpenOCD support for AArch64 targetsconnect.linaro.org.s3.amazonaws.com/hkg18/... · Beaglebone Black HiKey 96 Board Raspberry Pi 3 Nitrogen 96 Board. Linaro’s OpenOCD Efforts (cont…)

● Host Computer - Runs debug tools like GDB○ GDB communicates with debug adapter directly over ethernet using RSP protocol or using

OpenOCD

● OpenOCD - Interface between debug adapter and GDB

JTAG/SWD Debugging - Introduction (cont…)

Debug AdapterDevelopment Hardware

Debug & Trace Logic

Core Logic

JTAG Host Computer (Linux / Win / Mac)

OpenOCDParallel

GDB

GDB RSPSWD

Ethernet

USBJTAG

Signaling

SWD Signaling

Com

munication

Interface

Page 6: OpenOCD support for AArch64 targetsconnect.linaro.org.s3.amazonaws.com/hkg18/... · Beaglebone Black HiKey 96 Board Raspberry Pi 3 Nitrogen 96 Board. Linaro’s OpenOCD Efforts (cont…)

OpenOCD Architecture - Introduction● User Interface

○ GDB connected OpenOCD GDB stub○ Telnet client

● Target Interface○ Debug probes via drivers or libraries

● Target Management○ Halt/Resume, Step, Break etc○ Memory and Register access○ Cache and MMU management○ Flash Programming○ JTAG/SWD configuration

GDB Server Telnet Server

Target Abstraction (target.h)

Target Specific code

JTAG Abstraction (jtag.h)

JTAG DriversWiggler, ZY1000,

FT2232 ...

Target Board

TCL Scripting Interface

OpenOCD Architecture

Flash Programming

Page 7: OpenOCD support for AArch64 targetsconnect.linaro.org.s3.amazonaws.com/hkg18/... · Beaglebone Black HiKey 96 Board Raspberry Pi 3 Nitrogen 96 Board. Linaro’s OpenOCD Efforts (cont…)

OpenOCD Architecture - Introduction (cont…)● TCL Scripting Interface

○ Describe new targets variant boards○ Describe new debug interfaces○ Perform scripted initialization○ Event based command operation○ Accessible via GDB monitor commands

GDB Server Telnet Server

Target Abstraction (target.h)

Target Specific code

JTAG Abstraction (jtag.h)

JTAG DriversWiggler, ZY1000,

FT2232 ...

Target Board

TCL Scripting Interface

OpenOCD Architecture

Flash Programming

Page 8: OpenOCD support for AArch64 targetsconnect.linaro.org.s3.amazonaws.com/hkg18/... · Beaglebone Black HiKey 96 Board Raspberry Pi 3 Nitrogen 96 Board. Linaro’s OpenOCD Efforts (cont…)

Linaro’s OpenOCD Efforts● Architecture Specific

○ Verify Arm v7-a support○ Verify Arm v8-a support○ Verify Arm v7-m support○ Compare Arm v7-a and Arm v8-a

● Board specific○ Verify Hikey 96 Board○ Verify Nitrogen 96 Board

● GDB Integration○ GDB testsuite using OpenOCD stub○ GDB testsuite results comparison

■ Arm v7-a vs Arm v8-a (AArch64 Mode)

■ Arm v7-a vs Arm v8-a (AArch32 Mode)

HiKey 96 BoardBeaglebone Black

Nitrogen 96 BoardRaspberry Pi 3

Page 9: OpenOCD support for AArch64 targetsconnect.linaro.org.s3.amazonaws.com/hkg18/... · Beaglebone Black HiKey 96 Board Raspberry Pi 3 Nitrogen 96 Board. Linaro’s OpenOCD Efforts (cont…)

Linaro’s OpenOCD Efforts (cont…)● Hardware Configurations

○ AArch64:■ Bus Blaster v4 + Hikey Board

○ AArch32■ Bus Blaster v4 + Raspberry Pi 3

○ Arm v7-A (Cortex A)■ Flyswatter2 + BeagleBone Black

○ CMSIS-DAP■ Nitrogen Board

FT2232

USB to JTAG

USB to UART

Bus Blaster V4 Flyswatter2

LIBUSBJTAGInterface

Page 10: OpenOCD support for AArch64 targetsconnect.linaro.org.s3.amazonaws.com/hkg18/... · Beaglebone Black HiKey 96 Board Raspberry Pi 3 Nitrogen 96 Board. Linaro’s OpenOCD Efforts (cont…)

● Upstream Contributions○ OpenOCD Generic

■ Fix load + run failure bug in GDB■ Make OpenOCD generate target xml with architecture defined data types

○ Arm v8-A■ Read/Write of AArch64 SIMD-Floating-point registers■ Read/Write of AArch32 SIMD-Floating-point registers

○ Arm v7-A■ Read/Write of VFP v3 Neon SIMD-Floating-point registers

Linaro’s OpenOCD Efforts (cont…)

D0

D1

D0

D1Q0

S0S1S2S3

V0

Armv7/AArch32 VFP S0-S31

Arm VFPv2D0-D15

Armv7/AArch32 VFPv3 or Adv SIMD

D0-D31

Armv7/AArch32Advanced SIMD

Q0-Q15

AArch64 SIMD or Floating-point

V0-V31

Page 11: OpenOCD support for AArch64 targetsconnect.linaro.org.s3.amazonaws.com/hkg18/... · Beaglebone Black HiKey 96 Board Raspberry Pi 3 Nitrogen 96 Board. Linaro’s OpenOCD Efforts (cont…)

Linaro’s OpenOCD Efforts (cont…)● In-Progress Contributions

○ OpenOCD Arm and AArch64 Semihosting■ Verify Arm semihosting support with NewLib plus OpenOCD■ Add support for AArch64 semihosting in OpenOCD■ Fix Bugs in Arm support

Semi Hosting I/O Interface

Target Hardware

ApplicationI/O

JTAG / SWD

Console I/O

File I/O

Debugger

OpenOCDHardware

DebugInterface

Page 12: OpenOCD support for AArch64 targetsconnect.linaro.org.s3.amazonaws.com/hkg18/... · Beaglebone Black HiKey 96 Board Raspberry Pi 3 Nitrogen 96 Board. Linaro’s OpenOCD Efforts (cont…)

Future Wish List ● Arm v8-M support● LLDB and OpenOCD● Improvements in OpenOCD GDB stub● Fix bugs and improve stability● Improve OpenOCD testing

Page 13: OpenOCD support for AArch64 targetsconnect.linaro.org.s3.amazonaws.com/hkg18/... · Beaglebone Black HiKey 96 Board Raspberry Pi 3 Nitrogen 96 Board. Linaro’s OpenOCD Efforts (cont…)

Thank You

#HKG18HKG18 keynotes and videos on: connect.linaro.orgFor further information: www.linaro.org