Cross-Development Tool Suite

Intel System Studio: das Tool für Embedded-Software-Entwicklung
Kommentare

Eine Suite mit plattformübergreifendem Entwicklungstool für intelligente Systeme mit eingebettetem und mobilem Linux – gibt es so etwas? In diesem Artikel beschäftigen wir uns mit dem Intel System Studio, das für die Anforderungen von Entwicklern moderner Embedded-Software wie geschaffen ist. Wir bieten einen Überblick über die Technologie und zeigen die Komponenten sowie deren Anwendung auf Ihre intelligenten Systeme oder herkömmlichen eingebetteten Geräte.

Intel System Studio ist eine Cross-Development Tool Suite für intelligente Systeme mit embedded und mobilem Linux. Sie erleichtert die Entwicklung ausgereifter und maßgeschneiderter Systemsoftwarestacks sowie auch Komponenten der Anwendungsebene für hochintegrierte, komplexe Chipsätze heutiger Embedded-Systeme. In diesem Artikel bieten wir einen Überblick über die Komponenten des Intel System Studio sowie deren Anwendung auf Ihre intelligenten Systeme oder herkömmlichen Embedded Systems.
Entwickler eingebetteter Lösungen wurden kürzlich gefragt, welche Aspekte der Embedded Tool Suites den größten Spielraum für Verbesserungen bieten. Am häufigsten wurden dabei Debugging-Tools genannt. Das Intel System Studio wurde mit speziellem Augenmerk auf das Debugging geschaffen und beinhaltet:

• JTAG Debugger für Systemsoftware
• Applikations Debugger (GDB)
• Tracing auf dem gesamten SoC mit geringem Overhead
• Power und Performance Profiler für den gesamten SoC
• Tools für Speicherprüfung und Thread Profiling
• Branchenführender C- und C++-Compiler
• Performance-Libraries
• Integration vieler Komponenten in die Eclipse-IDE

Erfahren Sie mehr Kaufen oder erneuern: http://software.intel.com/de-de/articles/buy-or-renew/
Leitfaden zur Bewertung: http://software.intel.com/de-de/articles/evaluation-guides/
Support: Sämtliche Produktupdates und Intel Premier-Support-Services für den Zeitraum von einem Jahr enthalten. Der Premier-Support bietet Ihnen sicheren, webbasierten Support von Engineer zu Engineer.
Erfahren Sie mehr über dieses Tool: http://software.intel.com/de-de/node/365158
Versionshinweise: http://software.intel.com/de-de/node/365160
Foren: Teilen Sie Ihre Erfahrungen mit anderen Nutzern von Intel System Studio im moderierten Intel-Forum: http://software.intel.com/de-de/forums/intel-system-studio
Learning Lab: http://software.intel.com/de-de/intel-learning-lab

Debugger für intelligente Systeme

Es gibt vier Kategorien von Debugging-Tools: Tools zur Überprüfung von Speicherallokation und Multit-Threading-Code, Anwendungs-Debugger, Debugger für Systemsoftware und Event Tracing.
Debugging von Firmware, Bootloader und dem Betriebssystem mit Intel JTAG Debugger
Für jede Ebene eines Embedded-Softwarestacks ist für das Debugging ein geringfügig anderer Ansatz erforderlich. Werfen wir einen Blick auf die einzelnen Softwareebenen – von der Firmware bis hinauf zur Anwendungsebene – deren typischen Herausforderungen sowie das Vorgehen beim Debugging.
Das JTAG-Debugging im Intel System Studio ermöglicht eine frühe Hardwarekonfiguration und Board-Bring-up. Es basiert auf einer Eclipse-RCP-Benutzeroberfläche und bietet unter anderem folgende Funktionen: Source Level Debugging von OS-Kernel, BIOS, UEFI Firmware und Treiber, ultraschnelles Software Event Tracing sowie einen Bitfield-Editor für die Device Control, Prozessor- und Softwarestatusregister. Dieser Editor erklärt die Funktion der einzelnen Bits (Abb. 1). Hinzu kommt die Seitentabellenanzeige, die Abbildung virtueller Adressen im physischen Speicher zeigt, der Zugriff auf den General Descriptor Table (GDT) mit Erläuterung der Ausführbarkeit und Beschreibbarkeit von Speichersegmenten, sowie auf den Local Descriptor Table (LDT), der Speichersegmente für bestimmte Programme reserviert. Außerdem bietet sie einen Überblick über Speicherverwaltung und Konfiguration des Betriebssystems zur Identifizierung fehlerhafter Datenzuweisung.

Abb. 1: Intel JTAG Debugger

Unified Extensible Firmware Interface Debugging (UEFI)

Für Entwickler könnte die Anpassung der Firmware des Geräts von Interesse sein. Auf diese Weise lässt sich der Bootvorgang beschleunigen und insbesondere nur die wirklich benötigten Peripheriegeräte einschalten. Hierzu werden UEFI-kompatible Firmwarelösungen verwendet, beispielsweise das Intel Firmware Support Package oder der Intel Bootloader Development Kit. Das Debugging von UEFI-Fehlern ist herausfordernd, beispielsweise durch verschiebbare Codemodule, deren Adressen in der Regel unbekannt sind. Da UEFI-Firmware mit dem Microsoft C/C++-Compiler oder dem Intel C/C++-Compiler entwickelt wird, muss die Windows-Version des Intel JTAG Debuggers verwendet werden, um die PDB-Symbole aufzulösen und auf den Sourcecode abzubilden.
Der JTAG Debugger bietet zwei grundlegende Verfahren für das Aufspüren von Codemodulen im Speicher:

1. Gezieltes Identifizieren des Moduls unter einer bestimmten Speicheradresse (z. B. am Instruction Pointer IP)
2. Auflisten aller der EFI-Runtime bekannten Module, um eines auszuwählen und deren Symbole zu laden

Bei der ersten Methode durchsucht der Debugger den Speicher um die angegebene Adresse, um den Modul-Header aufzuspüren. Dieser enthält die zum Laden der Symbole benötigten Daten. Durch den EFI-Befehl loadthis wird die Suche gestartet (Listing 1). Ist keine Adresse angegeben, wird das IP verwendet. Ist die Suche erfolgreich, werden die Symbole und der Sourcecode geladen und angezeigt.

xdb> efi "loadthis"
INFO: Software debugger set to: efi64 - EFI/PI compliant BIOS (64-bit mode)
INFO: Using DRAM search semantics, align=0x00001000 range=0x00100000
INFO: Searching backwards from 0x00000000809FB6C3 to 0x00000000808FB6C3 for PE/COFF header
INFO: Found PE/COFF module at 0x00000000809FB000 - 0x00000000809FF1C0 (size: 16832 bytes)
INFO: Loading debug symbols found at:
e:dev.efiworkBuildMdeModuleNOOPT_VS2008x86X64MdeModulePkgApplicationxdbefiutilxdbefiutilDEBUG
xdbefiutil.efi

Bei der zweiten Methode wird vom Debugger eine EFI-Datenstruktur im Speicher gesucht und die dort beschriebenen Module aufgelistet. Der Debugger nutzt „eingebautes Wissen“, um die Organisation und Aufbau der EFI-Datenstrukturen wie das EFI-System Table Pointer.

Linux-Gerätetreiber

Gerätetreiber sollten möglichst ohne Instrumentierung, also Änderungen, debuggt werden, da sie oft zeitkritisch sind. Intel System Studio bietet dazu ein Linux-Kernel-Modul für den Target an, das zur Ladezeit des Treibers die Adressen der Init- und Exit-Routinen über die JTAG-Schnittstelle an den Host sendet. Somit kann der Treiber im Sourcecode debuggt werden.

Befehlsverfolgung

Der JTAG Debugger unterstützt die Last Branch Records (LBR) der CPU. Mit LBR kann der Debugger bei einem Breakpoint die zuletzt ausgeführten Befehle in Assembler und im Source anzeigen (Abb. 2).
LBR hat keinen Einfluss auf die Echtzeitperformance und ist daher ein leistungsstarkes Werkzeug zum Aufspüren deterministischer und sich wiederholender Fehler wie Stack Overflow oder Speicherzugriffsfehler wie z. B.:

• Analyse von Breakpoints im OS-Signal-Ereignis-Handler (z. B. Anhalten bei Speicherzugriffsfehler)
• Zurückverfolgen der Ausführung bis zu dem Punkt, an dem sie vom erwarteten Ablauf abweicht
• Erneute Ausführung bis zu diesem Punkt und Analysieren des Speicherzugriffs

Abb. 2: Die Befehlsverfolgung stellt den Programmfluss wieder her

Aufmacherbild: Close up of businesswoman with sketches at background von Shutterstock / Urheberrecht: Sergey Nivens

[ header = Seite 2: Debugging nicht deterministischer und schwer reproduzierbarer Fehler mit SVEN ]

Debugging nicht deterministischer und schwer reproduzierbarer Fehler mit SVEN

Ein präzises Timing ist für moderne intelligente Systeme unverzichtbar. Oft treten in diesen Systemen nicht deterministische Fehler auf, die sich nur schwer reproduzieren lassen. Allein durch Breakpoints, Tracing oder Logging kann der Ablauf verändert werden und der Fehler tritt nicht mehr auf – ein „Heisenbug“. Häufig treten solche Fehler ausschließlich beim Kunden auf und sind dadurch nochmals schwerer zu lokalisieren.
SVEN kann eine Hilfe zur Lösung derartiger Fehler sein. SVEN zeichnet Ereignisse mit einem Overhead von unter 5µs1 auf, wodurch wird die Gefahr von Heisenbugs deutlich verringert wird. Durch geeignete Instrumentierung des Codes können kritische Ereignisse und der Ablauf aufgezeichnet werden. Durch den sehr geringen Overhead kann die Instrumentierung im Code verbleiben – die Aufzeichnung wird nur im Problemfall aktiviert. SVEN zeichnet Ereignis-ID, Zeitstempel, Ereignistyp und Nutzlast auf, wobei die Daten vom Entwickler definiert werden. Durch SVEN ist es möglich, Probleme, die nur selten oder an schwer erreichbaren Orten auftreten, aufzuzeichnen und offline im SVEN-Tool zu analysieren (Abb. 3).

Abb. 3: Visuelle Darstellung von Ereignissen im gesamten Softwarestack mit SVEN

Anwendungs-Debugging mit GDB

Intel System Studio verfügt über einen eigenen GNU Project Debugger (GDB) mit Funktionen für Data Race Detection und Branch-Trace-Storage-basiertes (BTS), prozessspezifisches Unrolling von Befehlsabläufen (für Intel-Atom-Prozessoren). Um den Default Linux GDB zu ersetzen, wird ein Skript für die Einrichtung der Debugger-Umgebung mitgeliefert. Wie der Standard-GDB lässt sich der erweiterte GDB in die Eclipse-IDE integrieren und unterstützt die Remote-System-Explorer-Plug-ins (RSE). Der Remote System Explorer (RSE) ist Teil des Eclipse Target Management Project. Detaillierte Hinweise zur Verwendung für die Entwicklung plattformübergreifender Embedded-Lösungen finden Sie im folgenden Tutorial.

Data Race Detection

Der erweiterte GDB ermöglicht das Anhalten bei Data-Sharing-Ereignissen sowie möglicher Data Races in Echtzeit, sobald sie auftreten. Einzige Voraussetzung hierfür ist die Kompilierung des Codes unter Verwendung der Option –debug parallel über den Intel C++-Compiler.
Zu einem Data Race kommt es, wenn mehrere Threads gleichzeitig und ohne Synchronisierung auf einen Speicher zugreifen. Data Races können harmlos sein oder sind in bestimmten Fällen sogar Teil des Designs – meist führen sie jedoch zu einem Bug. GDB kann als Frontend für den Parallel Debug Extension (PDBX) Data Race Detector verwendet werden, der Teil des Intel-Compilers ist. Der PDBX Data Race Detector umfasst die Compiler Instrumentation und eine Runtime Support Library.
Der PDBX Data Race Detector protokolliert alle Speicherzugriffe sowie die Synchronisierung aller Threads. Bei jedem Speicherzugriff prüft er auf Data Races. Erwartungsgemäß ist diese Vorgehensweise hinsichtlich Performance und Speicherbelegung sehr ressourcenintensiv. Eine Feineinstellung der Analyse des Data Race schont hierbei Ihre Ressourcen. Zwar können Sie die Protokollierung der Synchronisierungsereignisse nicht beeinflussen, wohl aber die Protokollierung der Speicherzugriffe – der Data Race Detector lässt sich beliebig deaktivieren und wieder aktivieren.

Intel-System-Studio-Analysen

Die bereits erwähnten Debug-Tools sind eine Methode, um die Zuverlässigkeit einer Embedded-Plattform sicherzustellen. Intel Inspector for Systems bietet einen zusätzlichen Satz an Codeanalysewerkzeugen, um Speicherfehler und Fehler durch gleichzeitige Zugriffe zu identifizieren. Er bietet ein schnelles Auffinden von Speicherlecks, unerlaubte Zugriffe, Data Races und Deadlocks, führt statische Speicher- und Heapwachstumanalysen durch, um kritische Fehler aufzudecken, und unterstützt Analysen von Remote-Devices, Debugger Breakpoints und Breakpoints auf spezifische Fehler.

Intel VTune Amplifier for Systems

VTune ist ein sehr mächtiges Werkzeug zur Analyse der Performanz von Softwarekomponenten, die auf einem Embedded-Device ablaufen – sowie Informationen zu deren Stromverbrauch. Mit VTune findet man z. B. Codehotspots auch in kleinen Funktionen, Cache-Fehlzugriffe oder exzessive Speicherzugriffe sowie zu häufige Wake-ups oder Änderung der Prozessorfrequenz in System- oder Anwendungscode, aufgrund von IO-Geräte-Pings, Timer, Interrupts oder anderer Aktivitäten. Dabei spielt es keine Rolle, ob Source oder Assembly Code analysiert wird.

Compiler und Libraries

Durch die Verwendung von branchenweit führenden High-Performance-C++-Compilern und Libraries erschließen sich Entwickler die Vorteile von Intel-Prozessoren hinsichtlich Performance und Skalierbarkeit. Der Compiler generiert schnelleren Code durch hervorragende Optimierung der Geschwindigkeit und ermöglicht kürzeste Ausführungszeiten von Anwendungen mit geringer Leistung.
Der Intel C++-Compiler unterstützt Cross-Kompilation und Integration in Poky-Linux oder OpenEmbedded-kompatible GNU Cross-Toolchains, die beispielsweise für Wind River Linux, Yocto Project und viele andere angepasste GNU Cross-Build Toolchains verwendet werden. Durch vordefinierte Compilerumgebungsdateien ist der Einsatz des Intel C++-Compilers für plattformübergreifende Entwicklung sehr einfach: durch die Option –platform=yl13“ Yocto Project* 1.3 wird beispielsweise das Target ausgewählt.
Die Integration in Eclipse über einen Eintrag im Menü Intel Tools bietet Zugriff auf Guided Auto-Parallelism, die Intel C++-Compiler-Auswahl und einen Editor für die Intel C++-Compiler-Umgebungsdatei. Der Editor für die Umgebungsdatei stellt eine in System Studio einzigartige Funktion dar und ermöglicht die Anpassung der Integration des Compilers in eine GNU Cross-Build Toolchain, also nicht nur über den Befehlszeileneditor, sondern auch innerhalb der IDE.
Intel Cilk Plus ist eine Erweiterung der Sprachen C und C++ um drei Schlüsselworte zur einfacheren Entwicklung parallelisierter Anwendungen. Speziell auf Multicore-Systemen und mit vektorisierten Daten kann Cilk Plus überraschend einfach große Steigerungen der Performance ermöglichen.
Die zugrunde liegende Runtime ist sehr skalierbar – Entwickler müssen auf eine Plattform mit mehreren Kernen nicht neu Übersetzen oder Entwickeln. Dieses einfache Beispiel:

void add_doubles(double *src1, double *src2, double *r, int length)
{
  for(i = 0; i < length; ++i) {
    *r = *src1 + *src2;
  }
}

wird in Intel Cilk Plus zu

void add_doubles(double *src1, double *src2, double *r, int length)
{
  r[0:N] = src1[0:N] + src2[0:N];
}

und damit parallelisiert, ganze ohne die Programmierung von Threads usw.

Libraries

Die im System Studio enthaltenen Intel Math Kernel Library (Intel MKL) und Intel Integrated Performance Primitives (Intel IPP) bieten extrem hochoptimierte Routinen für die Daten- und Signalverarbeitung.
Sie werden seit vielen Jahren von Intel-Softwarespezialisten auf Intel-Prozessoren maßgeschneidert, um höchste Performanceansprüche zu erfüllen. Ständig werden die Libraries auf neue Architekturen und um neue Befehle wie Intel Streaming SIMD Extensions (Intel SSE) und Intel Advanced Vector Instructions 2 (Intel AVX 2) erweitert – damit wird Code einfach durch neue Libraries auf neue Hardware gebracht.

Fazit

Mit Intel System Studio wird Embedded-Entwicklern ein mächtiger Werkzeugsatz angeboten, um sichere und stark optimierte Software zu erzeugen. Nur mit solchen integrierten Tool Suites sind die steigenden Herausforderungen an die Softwareentwicklung auch zukünftig zu meistern. Steigende Komplexität und Performanceanforderungen mit geringem Stromverbrauch sind mit dem System Studio lösbarer geworden. Das Intel System Studio ist in Euro z. B. beim Intel-Reseller ho-COMPUTER erhältlich.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -