2016-09-21 5 views
1

Je travaille avec un kit de développement MK64FN1M0xxx12 prenant en charge OpenSDA. Pour rendre les choses plus faciles à déboguer, j'ai flashé le firmware J-Link qui supporte le jeu de commandes du débogueur SEGGER. Avant de faire cela, je me suis assuré que mon appareil était officially supported.Mise au point de mBed-OS 5 à l'aide du microprogramme OpenSDA de J-Link et de GDB

Pour être plus bavard, j'essaie d'essayer de déboguer mbed-os 5, en particulier les correctifs de sécurité uVisor. La page uVisor Github a un debugging write-up qui fournit des instructions pour la connexion au périphérique via une session GDB pour recevoir des impressions de débogage. J'ai réussi à connecter correctement la session J-Link, mais je n'arrive pas à déboguer le binaire. En outre, je ne peux pas sembler flasher correctement l'appareil. Je suis capable de pousser le binaire à la RAM de l'appareil, cependant.

Leurs instructions lire:

(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} 

Alors, j'ai essayé de reproduire leur travail. Se connecter à l'appareil via 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... 

Établir GDB session client

(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) 

Résultant J-Link sortie de la console

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 

Il semble que les choses sont presque travail, mais je Je ne suis pas assez bien versé dans GDB pour savoir où les choses peuvent échouer. À partir de la sortie de la console J-Link, il apparaît que le second load remplace les premiers contenus de la RAM. Si je laisse de côté cette instruction (mais garde la dernière commande file) alors alors aucune erreur sera signalée, mais la connexion via nc n'affiche aucun message de débogage

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

Malgré l'écriture-up de débogage uVisor (suite à la GDB liste de commandes) indiquant que de nombreux types de messages doivent être signalés lors de l'exécution. En plus de cela, mon programme qui a été (apparemment) téléchargé avec succès sur la carte ne se comporte pas comme il le devrait lors de l'exécution (pas de LED clignotantes, etc.).

Comme je l'ai déjà trouvé plusieurs fois avec uVisor (puisqu'il est très nouveau), la documentation peut être obsolète. De plus, j'ai découvert grâce à mes recherches que d'autres personnes avaient besoin de l'utilisation de la commande monitor flash download = 1 pour activer la programmation flash, même si cela ne semblait pas fonctionner pour moi. Bien que la sortie de cette commande indique Flash download enabled, rien n'est jamais écrit pour flasher autant que je peux dire (compte tenu de la sortie et du temps écoulé).

Répondre

0

j'ai pu fixer correctement et recevoir des instructions de débogage en utilisant l'ensemble de commande suivante:

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

Il semble qu'il est nécessaire de charger à partir des symboles de débogage de l'elfe et ne pas déléguer le chargement du binaire via la commande monitor Procuration. De plus, il semble que la commande load considère que le dernier fichier doit être utilisé comme cible par défaut (le * .elf, dans ce cas). Cela semble étrange, cependant, étant donné que mBed-OS ne pas analyser les en-têtes ELF ou charger n'importe quoi ...

En tout cas, la sortie de la console J-Link ressemble beaucoup plus que je m'y attendais:

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 
... 

Ce n'est pas une solution complète, donc je ne vais pas le marquer en tant que tel.