2016-09-21 1 views
1

Я работаю с комплектом разработки MK64FN1M0xxx12, который поддерживает OpenSDA. Чтобы облегчить отладку, я высветил прошивку J-Link, которая поддерживает набор команд отладчика SEGGER. Прежде чем сделать это, я убедился, что мое устройство было officially supported.Отладка mBed-OS 5 с использованием JS-Link OpenSDA Firmware и GDB

Чтобы быть более подробным, я пытаюсь отлаживать mbed-os 5, в частности, uVisor исправления безопасности. На странице uVisor Github есть debugging write-up, которая содержит инструкции по подключению устройства к сеансу GDB для получения отладочных отпечатков. Я смог правильно подключить J-Link-сессию, но, похоже, я не могу отлаживать двоичный файл. Кроме того, я не могу нормально зажечь устройство. Тем не менее, я могу использовать двоичное устройство для оперативной памяти.

Их инструкция гласила:

(gdb) target remote localhost:2331 
(gdb) monitor reset 
(gdb) monitor halt 
(gdb) monitor semihosting enable 
(gdb) monitor loadbin ./build/${target}/source/${your_app}.bin 0 
(gdb) monitor flash device = ${device_name} 
(gdb) load ./build/${target}/source/${your_app} 
(gdb) file ./build/${target}/source/${your_app} 

Итак, я попытался повторить их работу. Подключение к устройству через J-Link

$ JLinkGDBServer -device MK64FN1M0xxx12 
SEGGER J-Link GDB Server V6.00g Command Line Version 

JLinkARM.dll V6.00g (DLL compiled Aug 17 2016 13:20:32) 

-----GDB Server start settings----- 
GDBInit file:     none 
GDB Server Listening port:  2331 
SWO raw output listening port: 2332 
Terminal I/O port:    2333 
Accept remote connection:  yes 
Generate logfile:    off 
Verify download:    off 
Init regs on start:   off 
Silent mode:     off 
Single run mode:    off 
Target connection timeout:  0 ms 
------J-Link related settings------ 
J-Link Host interface:   USB 
J-Link script:     none 
J-Link settings file:   none 
------Target related settings------ 
Target device:     MK64FN1M0xxx12 
Target interface:    JTAG 
Target interface speed:  1000kHz 
Target endian:     little 

Connecting to J-Link... 
J-Link is connected. 
Firmware: J-Link OpenSDA 2 compiled Sep 15 2016 14:57:31 
Hardware: V1.00 
S/N: 621000000 
Checking target voltage... 
Target voltage: 3.30 V 
Listening on TCP/IP port 2331 
Connecting to target...ERROR: Debugger tries to select target interface JTAG. 
This interface is not supported by the connected emulator. 
Selection will be ignored by the DLL. 

J-Link found 1 JTAG device, Total IRLen = 4 
JTAG ID: 0x2BA01477 (Cortex-M4) 
Connected to target 
Waiting for GDB connection... 

Установить сеанс клиента GDB

(gdb) target remote localhost:2331 
Remote debugging using localhost:2331 
0x200171fe in ??() 
(gdb) monitor reset 
Resetting target 
(gdb) monitor halt 
(gdb) monitor semihosting enable 
Semi-hosting enabled (Handle on BKPT) 
(gdb) monitor flash download 1 
Flash download enabled 
(gdb) shell cp ../.build/K64F/GCC_ARM/mbed-os-example-uvisor.bin /tmp 
(gdb) monitor loadbin /tmp/mbed-os-example-uvisor.bin 
Binary file loaded successfully (210240 bytes downloaded) 
(gdb) monitor flash device = MK64FN1M0xxx12 
Selecting device: MK64FN1M0xxx12 
(gdb) load ../.build/K64F/GCC_ARM/source/main.o 
Loading section .text._ZN4rtos6ThreadC2E10osPrioritymPh, size 0x54 lma 0x0 
Loading section .text._ZN16NetworkInterfaceD2Ev, size 0x28 lma 0x0 
Loading section .text._ZN16NetworkInterfaceD0Ev, size 0x1c lma 0x0 
Loading section .text._ZN4mbed10DigitalOutC2E7PinName, size 0x24 lma 0x0 
Loading section .text._ZN4mbed10DigitalOut5writeEi, size 0x1c lma 0x0 
Loading section .text._ZN4mbed10DigitalOutaSEi, size 0x1c lma 0x0 
Loading section .rodata._ZL10g_main_acl, size 0xc0 lma 0x0 
Loading section .rodata.__uvisor_priv_sys_irq_hooks, size 0xc lma 0x0 
Loading section .keep.uvisor.bss.boxes, size 0x80 lma 0x0 
Loading section .rodata.__uvisor_mode, size 0x4 lma 0x0 
Loading section .keep.uvisor.cfgtbl, size 0x28 lma 0x0 
Loading section .keep.uvisor.cfgtbl_ptr_first, size 0x4 lma 0x0 
Loading section .text._Z30local_ENET_Transmit_IRQHandlerv, size 0x14 lma 0x0 
Loading section .text._Z29local_ENET_Receive_IRQHandlerv, size 0x14 lma 0x0 
Loading section .text._ZN16NetworkInterfaceC2Ev, size 0x18 lma 0x0 
Loading section .text._ZN12EthInterfaceC2Ev, size 0x24 lma 0x0 
Loading section .text._ZN12EthInterfaceD2Ev, size 0x30 lma 0x0 
Loading section .text._ZN12EthInterfaceD0Ev, size 0x1c lma 0x0 
Loading section .text._ZN17EthernetInterfaceC2Ev, size 0x24 lma 0x0 
Loading section .rodata, size 0xd4 lma 0x0 
Loading section .text._Z16ethernet_connectv, size 0x54 lma 0x0 
Loading section .text.main, size 0x174 lma 0x0 
Loading section .text._ZN4mbed8CallbackIFvvEEC2EPS1_, size 0x1c lma 0x0 
Loading section .text._ZN4mbed8CallbackIFvvEE6attachEPS1_, size 0x30 lma 0x0 
Loading section .text._ZN4mbed8CallbackIFvvEE12_staticthunkEPvS3_, size 0x14 lma 0x0 
Loading section .rodata._ZTV12EthInterface, size 0x24 lma 0x0 
Loading section .rodata._ZTV16NetworkInterface, size 0x18 lma 0x0 
Loading section .text._ZN17EthernetInterfaceD2Ev, size 0x30 lma 0x0 
Loading section .text._ZN17EthernetInterfaceD0Ev, size 0x1c lma 0x0 
Loading section .text._Z41__static_initialization_and_destruction_0ii, size 0x3c lma 0x0 
Loading section .text._GLOBAL__sub_I___uvisor_priv_sys_irq_hooks, size 0x10 lma 0x0 
Loading section .init_array, size 0x4 lma 0x0 
Start address 0x0, load size 1816 
Transfer rate: 1773 KB/sec, 56 bytes/write. 
(gdb) file ../.build/K64F/GCC_ARM/source/main.o 
A program is being debugged already. 
Are you sure you want to change the file? (y or n) y 
Reading symbols from ../.build/K64F/GCC_ARM/source/main.o...done. 
(gdb) c 
Continuing. 

Program received signal SIGTRAP, Trace/breakpoint trap. 
rtos::Thread::Thread (this=<error reading variable: Cannot access memory at address 0xfffffff4>, priority=<error reading variable: Cannot access memory at address 0xfffffff2>, stack_size=<error reading variable: Cannot access memory at address 0xffffffec>, 
    stack_pointer=<error reading variable: Cannot access memory at address 0xffffffe8>) at ../mbed-os/rtos/rtos/Thread.h:42 
42   Thread(osPriority priority=osPriorityNormal, 
(gdb) 

Результирующая J-Link выход консоли

Waiting for GDB connection...Connected to 127.0.0.1 
Reading all registers 
Read 4 bytes @ address 0x200171FE (Data = 0xEA126221) 
Read 2 bytes @ address 0x200171FE (Data = 0x6221) 
Resetting target 
Halting target CPU... 
...Target halted (PC = 0x200171FE) 
Semi-hosting enabled (Handle on BKPT) 
Flash download enabled 
Loading binary file [/tmp/mbed-os-example-uvisor.bin] ... 
Downloading 210240 bytes @ address 0x00000000 
Binary file loaded successfully (210240 bytes downloaded) 
Selecting device: MK64FN1M0xxx12 
Downloading 84 bytes @ address 0x00000000 
Downloading 40 bytes @ address 0x00000000 
Downloading 28 bytes @ address 0x00000000 
Downloading 36 bytes @ address 0x00000000 
Downloading 28 bytes @ address 0x00000000 
Downloading 28 bytes @ address 0x00000000 
Downloading 192 bytes @ address 0x00000000 
Downloading 12 bytes @ address 0x00000000 
Downloading 128 bytes @ address 0x00000000 
Downloading 4 bytes @ address 0x00000000 
Downloading 40 bytes @ address 0x00000000 
Downloading 4 bytes @ address 0x00000000 
Downloading 20 bytes @ address 0x00000000 
Downloading 20 bytes @ address 0x00000000 
Downloading 24 bytes @ address 0x00000000 
Downloading 36 bytes @ address 0x00000000 
Downloading 48 bytes @ address 0x00000000 
Downloading 28 bytes @ address 0x00000000 
Downloading 36 bytes @ address 0x00000000 
Downloading 212 bytes @ address 0x00000000 
Downloading 84 bytes @ address 0x00000000 
Downloading 372 bytes @ address 0x00000000 
Downloading 28 bytes @ address 0x00000000 
Downloading 48 bytes @ address 0x00000000 
Downloading 20 bytes @ address 0x00000000 
Downloading 36 bytes @ address 0x00000000 
Downloading 24 bytes @ address 0x00000000 
Downloading 48 bytes @ address 0x00000000 
Downloading 28 bytes @ address 0x00000000 
Downloading 60 bytes @ address 0x00000000 
Downloading 16 bytes @ address 0x00000000 
Downloading 4 bytes @ address 0x00000000 
Writing register (PC = 0x00000000) 
Read 4 bytes @ address 0x00000000 (Data = 0x00000000) 
Read 2 bytes @ address 0x00000000 (Data = 0x0000) 
Reading all registers 
Read 4 bytes @ address 0x00000000 (Data = 0x00000000) 
Starting target CPU... 
ERROR: Can not read register 15 (R15) while CPU is running 
Reading all registers 
ERROR: Can not read register 0 (R0) while CPU is running 
ERROR: Can not read register 1 (R1) while CPU is running 
ERROR: Can not read register 2 (R2) while CPU is running 
ERROR: Can not read register 3 (R3) while CPU is running 
ERROR: Can not read register 4 (R4) while CPU is running 
ERROR: Can not read register 5 (R5) while CPU is running 
ERROR: Can not read register 6 (R6) while CPU is running 
ERROR: Can not read register 7 (R7) while CPU is running 
ERROR: Can not read register 8 (R8) while CPU is running 
ERROR: Can not read register 9 (R9) while CPU is running 
ERROR: Can not read register 10 (R10) while CPU is running 
ERROR: Can not read register 11 (R11) while CPU is running 
ERROR: Can not read register 12 (R12) while CPU is running 
ERROR: Can not read register 13 (R13) while CPU is running 
ERROR: Can not read register 14 (R14) while CPU is running 
ERROR: Can not read register 15 (R15) while CPU is running 
ERROR: Can not read register 16 (XPSR) while CPU is running 
ERROR: Can not read register 17 (MSP) while CPU is running 
ERROR: Can not read register 18 (PSP) while CPU is running 
ERROR: Can not read register 24 (PRIMASK) while CPU is running 
ERROR: Can not read register 25 (BASEPRI) while CPU is running 
ERROR: Can not read register 26 (FAULTMASK) while CPU is running 
ERROR: Can not read register 27 (CONTROL) while CPU is running 
ERROR: Can not read register 32 (FPSCR) while CPU is running 
ERROR: Can not read register 33 (FPS0) while CPU is running 
ERROR: Can not read register 34 (FPS1) while CPU is running 
ERROR: Can not read register 35 (FPS2) while CPU is running 
ERROR: Can not read register 36 (FPS3) while CPU is running 
ERROR: Can not read register 37 (FPS4) while CPU is running 
ERROR: Can not read register 38 (FPS5) while CPU is running 
ERROR: Can not read register 39 (FPS6) while CPU is running 
ERROR: Can not read register 40 (FPS7) while CPU is running 
ERROR: Can not read register 41 (FPS8) while CPU is running 
ERROR: Can not read register 42 (FPS9) while CPU is running 
ERROR: Can not read register 43 (FPS10) while CPU is running 
ERROR: Can not read register 44 (FPS11) while CPU is running 
ERROR: Can not read register 45 (FPS12) while CPU is running 
ERROR: Can not read register 46 (FPS13) while CPU is running 
ERROR: Can not read register 47 (FPS14) while CPU is running 
ERROR: Can not read register 48 (FPS15) while CPU is running 
ERROR: Can not read register 49 (FPS16) while CPU is running 
ERROR: Can not read register 50 (FPS17) while CPU is running 
ERROR: Can not read register 51 (FPS18) while CPU is running 
ERROR: Can not read register 52 (FPS19) while CPU is running 
ERROR: Can not read register 53 (FPS20) while CPU is running 
ERROR: Can not read register 54 (FPS21) while CPU is running 
ERROR: Can not read register 55 (FPS22) while CPU is running 
ERROR: Can not read register 56 (FPS23) while CPU is running 
ERROR: Can not read register 57 (FPS24) while CPU is running 
ERROR: Can not read register 58 (FPS25) while CPU is running 
ERROR: Can not read register 59 (FPS26) while CPU is running 
ERROR: Can not read register 60 (FPS27) while CPU is running 
ERROR: Can not read register 61 (FPS28) while CPU is running 
ERROR: Can not read register 62 (FPS29) while CPU is running 
ERROR: Can not read register 63 (FPS30) while CPU is running 
ERROR: Can not read register 64 (FPS31) while CPU is running 
Read 4 bytes @ address 0x00000000 (Data = 0x00000000) 
Read 4 bytes @ address 0x00000000 (Data = 0x00000000) 
Read 4 bytes @ address 0x00000000 (Data = 0x00000000) 
WARNING: Failed to read memory @ address 0xFFFFFFF4 
WARNING: Failed to read memory @ address 0xFFFFFFF2 
WARNING: Failed to read memory @ address 0xFFFFFFEC 
WARNING: Failed to read memory @ address 0xFFFFFFE8 

Кажется, вещи почти работает, но я я недостаточно хорошо разбираюсь в GDB, чтобы знать, где могут быть ошибки. С выхода консоли J-Link появляется, как если бы второй load перезаписывал раннее содержимое ОЗУ. Если я опускаю эту инструкцию (но сохранить последнюю file команду), то тогда ошибки не будет сообщаться, но соединение через nc не выводит никаких сообщений отладки

$ nc localhost 2333 
SEGGER J-Link GDB Server V6.00g - Terminal output channel 

Несмотря на uVisor отладки записи вверх (после GDB список команд), указывающий на то, что во время выполнения должны отображаться многие типы сообщений. В дополнение к этому, моя программа, которая (по-видимому) была успешно загружена на плату, не ведет себя так, как должна при выполнении (без мигающих светодиодов и т. Д.).

Как я уже несколько раз встречал с uVisor (так как это очень новый), документация может быть устаревшей. Кроме того, я нашел в своих исследованиях, что другие требовали использования команды monitor flash download = 1, чтобы включить программирование вспышки, хотя это, казалось, не работало для меня. Хотя вывод этой команды читается Flash download enabled, ничто никогда не записывается в flash, насколько я могу судить (учитывая выходное и прошедшее время).

ответ

0

я был в состоянии правильно прикрепить и получить отладочные операторы, используя следующий набор команд:

file ./build/${target}/source/${your_app}.elf 
target remote localhost:2331 
monitor reset 
monitor semihosting enable 
load 

Кажется, необходимо загрузить из отладочных символов из эльфа, а не делегировать загрузки двоичного файла с помощью команды monitor прокси. Кроме того, представляется, что команда load считает, что последний файл должен использоваться в качестве своей целевой цели по умолчанию (в этом случае - * .elf). Это кажется странным, однако, учитывая, что mBed-OS не разбирает заголовки ELF или загружает что-нибудь ...

В любом случае, выход в консоли J-Link выглядит гораздо больше, как я ожидал:

Downloading 1024 bytes @ address 0x00000000 
Downloading 16 bytes @ address 0x00000400 
Downloading 4096 bytes @ address 0x00000410 
Downloading 4096 bytes @ address 0x00001410 
Downloading 4096 bytes @ address 0x00002410 
Downloading 4096 bytes @ address 0x00003410 
... 

Это не полное решение, поэтому я не буду отмечать его как таковой.

Смежные вопросы