DEBUGGER, REAL-TIME TRACE, LOGIC ANALYZER Advanced Debugging and Tracing tools for ARM architectures and Linux kernels PowerTools Una soluzione unica per il debug di sistemi Linux Un approccio integrato al run-mode debugging Un sistema embedded basato su Linux pone diversi problemi dal punto di vista del debug. Si tratta infatti di un sistema complesso, composto da molti elementi diversi e caratterizzato da configurazioni avanzate che complicano la vita del debugger, come la gestione dinamica dell’MMU. Tradizionalmente, nel debug Linux vengono utilizzati due approcci differenti, in relazione alla fase di sviluppo: nelle fasi iniziali, generalmente chiamate hardware bring-up, si utilizza un debugger JTAG in modalità stop-mode, al fine di mettere a punto i primi elementi del sistema, come il bootloader e il firmware di base. Si passa poi al debug delle applicazioni attraverso un cosiddetto run-mode debugger, ovvero una soluzione puramente software nella quale un agente di debug gira sul dispositivo embedded, controllato tramite uno specifico link (seriale o ethernet) dalla macchina host sulla quale si effettua il debug; nel caso di Linux, questa soluzione è rappresentata da GDB e dal suo agente gdbserver. JTAG Network Applicando il consueto concetto di modularità ed universalità, i sistemi TRACE32 Lauterbach permettono di utilizzare una sola interfaccia per ogni esigenza di debug. Con un sistema JTAG Lauterbach è possibile eseguiInfatti, per re il debug di tutte le componenti di un sistema Linux in ogni comstop-mode. Utilizzando un debugger Lauterbach di tipo ponente di front-end, è comunque possibile anche il debug run-moLinux Awareness menu un sistede, interfacciandosi via seriale o ethernet con gdbserver. Sono quindi disponibili due soluzioni ben distinte e non inma basato su Linux, Lauterbach tegrate. Tuttavia Lauterbach propone anche una soluzione propone una soluzione unica ed integrata, in cui è possibile effetintegrata, in grado di utilizzare entrambi gli approcci, batuare il debug fin dalle prime fasi di start-up del sistema, sandosi sullo stesso ambiente di debug JTAG, e offrendo proseguendo poi con il debug del kernel, moduli del kercosì una soluzione che permette il controllo completo del nel e driver, processi utente, threads e librerie dinamiche. sistema in ogni fase di debug. Grazie infatti ad un agente Partendo quindi da un primo ambiente tradizionale di deproprietario (t32server), l’ambiente di debug Lauterbach bug single-task, tipico di un bootloader, si arriva a operare TRACE32 è in grado di lanciare più debug agent, e quindi in un contesto multi-tasking. permettere l’utilizzo di un solo link JTAG DCC/DAP per il Questa versatilità del debugger permette all’utente di fodebug di più processi contemporaneamente. Lo switch tra calizzarsi sul debug vero e proprio di ogni componente run-mode debug e stop-mode debug e viceversa, è imdel sistema in fase di sviluppo, senza preoccuparsi delle modalità specifiche di debug. I Linux System sistemi TRACE32 Lauterbach Stop-mode debug shared threads process sono gestiti dall’IDE Powerlibs Run-mode debug View, che fornisce un’interfacgdbserver gdbserver cia standard con look-and-feel uniforme per diversi ambienti threads host. PowerView comprende process inoltre un RTOS debugger t32server configurabile e ad alte prestazioni, che include il supporto di oltre 30 sistemi operativi. La TRACE32 PowerView • kernel Ethernet or Serial tecnologia Kernel Awareness, Linux • modules (optional) rende il debugger “cosciente” • drivers del fatto che sul dispositivo Ethernet or USB in fase di debug giri un sistema operativo. Ciò semplifica boot JTAG loader notevolmente il debug, perCPU ché rende immediatamente xloader accessibili all’utente tutte le DCC or DAP PowerDebug JTAG debugger componenti del sistema operativo e dell’applicazione. TRACE32 integra Stop-mode e Run-mode debugger e consente il debug simultaneo di tutte le componenti di un sistema Linux 2 TRACE32 PowerView pere deterministicamente che cosa un certo processore eseguirà in un determinato istante. Per questo motivo, Lauterbach ha realizzato un debugger SMP con approccio “system view”, nel quale una sola istanza del debugger controlla tutti i core in fase di debug. Sfruttando la tecnologia Kernel Awareness, il debugger è in grado di determinare dinamicamente a quale core sia stato associato un determinato processo; di conseguenza è in grado di mostrare il codice e i dati sotto esame per ciascuna parte del sistema operativo e dei suoi elementi, spostando il focus sul core a cui è stato assegnato ogni singolo processo in ogni determinato istante. TRACE32 PowerDebug Real-time trace e profiling Joint JTAG Cortex-A9 Per tutte le architetture che prevedono questa funzionalità, Lauterbach offre anche la prestazione real-time trace, anch’essa basata sul concetto di kernel awareness, per poter tracciare e registrare il codice eseguito dai vari processi utente e dal kernel stesso, prendendosi automaticamente cura della corrispondenza tra gli indirizzi logici tracciati ed il relativo processo di appartenenza. Questo consente di sfruttare il “trace assisted debugging” anche in ambito multi tasking. Cortex-A9 Multicore chip as SMP system Una singola istanza TRACE32 controlla tutti i core in un sistema SMP mediato e consente di cambiare modalità operativa nella stessa sessione di debug, senza dover riavviare o cambiare debugger. Inoltre non è più necessario l’utilizzo di link ethernet o porte seriali dedicati al debug. I sistemi multicore e l’approccio SMP L’approccio dei tools Lauterbach al debug è modulare ed universale. Per questo è possibile anche effettuare il debug di sistemi multicore, ovvero sistemi nei quali sono coinvolti più processori, siano essi omogenei, eterogenei, sullo stesso chip o su chip differenti. Nel caso più comune, ciascun processore esegue un codice univoco predeterminato durante la compilazione, ed interopera con le altre unità di elaborazione scambiando dati attraverso dei canali dedicati (per esempio dei buffer di memoria condivisa, una periferica o altro): in questo caso si parla di Asymmetric Multi-Processing (AMP). Per queste architetture, Lauterbach utilizza un approccio nel quale un singolo debugger è connesso a uno solo dei core sotto esame, nella cosiddetta configurazione “core view”, ovvero una configurazione nella quale il focus è sul singolo processore, e diverse istanze del debugger controllano ciascuna uno ed un solo core. Con l’avvento dei sistemi SMP, ovvero Symmetric Multi-Processing, Lauterbach offre un nuovo concetto di debug: in un sistema SMP i core sono solitamente omogenei e consentono la parallelizzazione del carico CPU. Linux è uno dei sistemi operativi che offre una versione SMP per diverse piattaforme. In questo caso il codice eseguito da ciascun core non è più univoco, quindi è impossibile sa- Statistiche dei processi Linux OS-Aware trace In presenza di un sistema operativo, è necessario che le informazioni relative ai task switch vengano inviate alla trace port. Questo è implementato nei kernel Linux con la scrittura del registro Context-ID, che TRACE32 riconosce ed utilizza per diversi tipi di analisi, come la schedulazione dei task nel tempo. Grafico dei task switch nel tempo 3 www.lauterbach.com PowerTools TRACE32 debug e trace tools per ARM/Cortex series PowerDebug: JTAG debugger PowerDebug è il JTAG debugger più veloce e più utilizzato. Supporta oltre 50 diverse architetture e le diverse debug-port. Un unico debug cable per ARM può essere licenziato per supportare tutte le architetture ARM/Cortex sia single-core che multi-core ed anche i DSP integrati. I sistemi di nuova generazione hanno interfaccia USB3 o Gigabit ethernet. PowerDebug Combiprobe: JTAG debugger + ETM trace Combiprobe combina in un unico hardware a basso costo un debug cable ed un trace probe con 128MB di trace storage. Combiprobe è particolarmente adatto per i microcontrollori Cortex-M dotati di debug port JTAG e di una trace port ETM e ITM compatta a 4 pin. Per i microprocessori Cortex-A può essere utilizzato per il SystemTrace ITM o STM. Sarà presto disponibile il nuovo µTrace; un sistema debug + trace dedicato a Cortex-M ancora più economico. µTrace è descritto nella Newsletter 2013. PowerTrace e PowerTrace II: JTAG debugger + ETM trace PowerTrace aggiunge alle funzionalità di debug dei PowerDebug un modulo real-time trace integrato da 512MB o fino a 4GB per i PowerTrace II. Sono disponibili diversi probes per le trace port ARM ETM “parallele” e per le velocissime trace port ETM “seriali” HSTP. Con l’aiuto del real-time trace si velocizza enormemente il ciclo di debug e sono possibili misure non intrusive del programma, analisi statistiche e di performance, code coverage. La capacità di trace streaming consente di estendere illimitatamente la durata della registrazione. PowerView debugger PowerView è il debugger fornito con i sistemi Lauterbach TRACE32. E’ un ambiente di debug integrato che supporta linguaggi quali C/C++, Java, ASM; include un instruction set simulator, è integrabile con diversi IDE (Eclipse, MS Platform Builder) ed ha un supporto integrato per oltre 30 sistemi operativi inclusi Windows CE, Linux, Android. Il supporto Linux è molto avanzato e con PowerView è possibile il debug e il trace di tutte le componenti del sistema: boot loader, kernel, moduli, processi, threads e librerie. Il debug è possibile sia in modalità stop-mode che run-mode via JTAG, senza richiedere l’utilizzo di link esterni quali seriali o ethernet. PowerView funziona anche come GDB frond-end debugger per gdbserver via ethernet. PowerView gira su PC Windows, Linux e Mac OS-X. Il linguaggio di scripting Practice consente l’automazione completa della configurazione del sistema e dei test. TENETECI INFORMATI Se avete cambiato il vostro indirizzo o se desiderate ricevere la nostra newsletter, mandate una email a [email protected] 4 4 Lauterbach S.r.l. Via Enzo Ferrieri 12, 20153 Milano Tel: +39 02 45490282 Fax: +39 02 45490428 Web: www.lauterbach.com Sales: [email protected] Support: [email protected]