vollmann engineering gmbh deutsch - english

 
   engineering  training  technische infos  vorträge  artikel   
home
sitemap
Entwicklungstools  

 
 
 

strategie und prozess
design
c++
embedded c++
embedded linux
komplettlösungen
 
 
 
                  
technische informationen
c++ tipps
embedded c++
embedded linux
entwicklungstools
links

Embedded Linux hat den grossen Vorteil, dass das Entwicklungssystem und das Zielsystem dasselbe sind (in gewissen Grenzen). Für viele Entwickler, die bisher unter Windows entwickelt haben, heisst dies allerdings, dass eine neue Entwicklungsumgebung zusammengestellt werden muss. Daher folgt hier eine Aufstellung von Tools die sich in der Entwicklungspraxis bewährt haben. Viele dieser Tools sind OpenSource und kommerzieller Support hierfür schwierig zu finden. Vor allem, wenn eine komplette Umgebung, die aus den verschiedensten Tools zusammengesetzt ist, unterstützt werden soll, ist ein ganzheitlicher Support jedoch wichtig. vollmann engineerining hat sich daher entschlossen, allgemeinen Support für Entwicklungsumgebungen unter Linux anzubieten.

Compiler

Der meist-verbreitete Compiler unter Linux ist der GCC (Gnu Compiler Collection). GCC ist auch als Cross-Compiler verfügbar und deckt alle Plattformen ab, auf denen Linux läuft. Für die Compilierung des Linux-Kernels selber wird inzwischen eine Version ab 3.2 empfohlen, wobei bei Einsatz von GCC 3.4 oder später bei einigen Kernels (vor 2.4.25 und bei einigen Architektur-spezifischen Zweigen auch später) Probleme bereiten kann. Für die Entwicklung in C++ ist mindestens GCC 3.3 empfehlenswert, da dieser Compiler den C++-Standard doch recht gut abdeckt. GCC 4.0 ist in diesem Bereich noch besser, es gibt aber hier insbesondere bei nicht x86-Architekturen zum Teil noch Probleme.
Eine Alternative speziell für C++ bieten der Intel- oder der Como- Compiler. Diese decken den C++-Standard zum Teil noch besser ab und liefern kommerziellen Support. Während der Intel-Compiler nur für x86-Prozessoren verfügbar ist, ist der Como-Compiler auf Anfrage für alle Architekturen einsetzbar (auch als Cross-Compiler).

Standardbibliothek

Die C-Standardbibliothek unter Linux bildet die glibc. Aktuell ist die glibc2, die in der Regel auch eingesetzt wird. In Spezialfällen (z.B. Embedded PowerPC oder sehr knapper Speicherplatz) ist es unter Umständen allerdings nötig, auf die ältere Version glibc5 auszuweichen.
In sehr vielen Fällen ist es sinnvoll, die glibc selber zu konfigurieren und nur die Funktionen zu compilieren, die im gesamten System tatsächlich benötigt werden. Dies bringt meist einen erheblich grösseren Gewinn beim Platzbedarf als das Ausweichen auf eine ältere Version.

Die C++-Bibliothek basiert meist auf der SGI-Implementierung der STL. Die zusätzlichen Klassen, die für eine vollständige C++-Standardbibliothek benötigt werden (vor allem I/O und Strings) wurden allerdings jeweils unterschiedlich implementiert. Die einfachste Variante ist sicher die libstdc++, die mit GCC 3 mitgeliefert wird. Eine weitere Alternative ist die Implementierung von STLport die auf einer Beta-Version der nicht mehr weiterentwickelten SGI-Implementierung basiert. Eine interessante Variante speziell für Embedded Systeme ist die cxxrt von Dietmar Kühl. Sie ist speziell für Systeme mit geringem Speicher entwickelt worden. Als kommerzielle Variante bietet sich die Dinkumware-Library an.

Debugger

Ein ganz wichtiges Entwicklungstool ist der Debugger. Unter Linux ist dies für die normalen Applikationsprozesse immer der GDB. (Für das Kernel-Debugging wird der kdb verwendet.)
GDB ist als Cross-Debugger und Remote-Debugger einsetzbar, d.h. ein PowerPC Target kann von einem x86 Entwicklungs-PC debuggt werden. Der GDB ist allerdings nur via zeilen-orientierter Kommando-Schnittstelle zu bedienen. Daher gibt es eine Reihe von Tools, die ein grafisches Interface auf GDB aufsetzen. Einige davon sind in komplette Entwicklungsumgebungen (IDEs) integriert (s.u.). Das bekannteste Tool aus diesem Bereich ist ddd, das aufgrund seiner hervorragenden Visualisierungsmöglichkeiten auch berücksichtigt werden sollte, wenn eine IDE eingesetzt wird.

Build-Tool

Das Standard-Build-Tool, auch um umfangreiche und komplexe Systeme zu generieren, ist unter Linux GNU make. Mit etwas Disziplin lassen sich damit auch auf viele Teil-Module verteilte Systeme mit wenigen Änderungen an zentraler Stelle für ein neues System generieren. Eventuell kann make mit autoconf und automake kombiniert werden; für Embedded Systeme ist dies aber in aller Regel nicht notwendig. Bei Einsatz einer IDE wird make meist durch die IDE konfiguriert und aufgerufen.

Versionsverwaltung

Als Standardtool für die Versionenverwaltung hat sich im Linux-Bereich CVS etabliert. CVS kann sowohl Source- als auch Binärdateien verwalten und erlaubt beliebig viele Entwicklungszweige und kann diese auch wieder zusammenführen. CVS wird üblicherweise zentral auf einem Server installiert und kann dann von verschiedenen Clients angesprochen werden. Unter den Client-Programmen gibt es auch solche mit grafischem User-Interface oder der Client ist sogar in die IDE integriert.

IDE

Eine IDE (Integrated Development Environment) fasst meist Editor, Build-Tool, Compiler und Debugger unter einer gemeinsamen Bedien-Oberfläche zusammen. Teilweise ist auch der Zugriff auf CVS oder ein Klassen-Browser für C++ integriert.

(X)Emacs

Alte Unix/Linux-Kenner werden wahrscheinlich Emacs oder XEmacs verwenden.
Ursprünglich als Editor entwickelt, ist Emacs offene Umgebung, in die nahezu alles integriert werden kann: vom Web-Browser über Rechtschreibkontrolle bis zum Debugger. Da Emacs in Linux-Entwicklerkreisen sehr verbreitet ist, sind alle notwendigen Entwicklungstools bereits integriert.
Emacs ist mit seinen Tastaturkürzeln etwas gewöhnungsbedürftig, auch wenn vor allem XEmacs auch weitgehend mit der Maus zu bedienen ist. Ernsthafte Linux-Entwickler kommen wohl auf Dauer nicht um (X)Emacs herum, aber als Einstieg bzw. für Umsteiger von Windows ist es weniger zu empfehlen.

Kdevelop

Kdevelop wurde als Klon von Visual C++ entwickelt. Es ist daher vor allem für Umsteiger von Windows ideal. Kdevelop integriert den Editor, CVS, automake, autoconf und make als Build-Tool, einen beliebigen Compiler (im Normalfall gcc und g++) und GDB als Debugger. Allerdings liegt der Schwerpunkt von Kdevelop auf der Entwicklung von GUI- (speziell KDE-) Applikationen und integriert hierfür sogar einen GUI-Builder. Zur Verwendung für die Entwicklung von Embedded Applikationen (ggf. mit einem Cross-Compiler) muss Kdevelop etwas angepasst werden (da Kdevelop OpenSource ist, ist dies jedoch recht einfach möglich).

SourceNavigator+Insight

SourceNavigator wurde spezifisch für die Entwicklung von Embedded Systemen entwickelt (ursprünglich von Cygnus, dann von RedHat übernommen). Die Stärken liegen vor allem (wie der Name andeutet) in der Navigation durch den Sourcecode grosser, komplexer Systeme, während vor allem die Konfiguration des Build-Systems (speziell für Cross-Compilierung) ziemlich hakelig ist. Als Debugger dient Insight, das zwar eigentlich ein eigenständiges Tools ist, aber gut in SourceNavigator integriert ist. Insgesamt ist die Bedienung etwas gewöhnungsbedürftig, sollte aber Windows-Umsteigern leichter fallen als z.B. Emacs. Und die Umgebung ist deutlich ausgereifter und fehlerfreier als Kdevelop.

SNIFF+

SNIFF+ ist schon lange auf dem Markt, nicht nur für Linux, sondern auch für andere Unix-Systeme und Windows. Ursprünglich von TakeFive entwickelt, wurde es von WindRiver übernommen, wird jedoch auch für Linux weitergepflegt. Sowohl an Funktionalität als auch bei der Bedienung ist SNIFF+ wohl allen anderen Entwicklungsumgebungen überlegen, allerdings muss dies auch relativ teuer bezahlt werden. Obwohl SNIFF+ nicht OpenSource ist, kann es an alle Gegebenheiten relativ leicht angepasst werden, und die Standard-Entwicklungstools unter Linux (gcc, CVS, make, gdb) sind bereits integriert. Weitere Tools (inklusive CASE-Tools) können leicht eingebunden werden.

Kylix

Borland hat die Verfügbarkeit von Kylix für C++ bzw. C++Builder für Linux für Ende 2001 angekündigt. Dies wäre vor allem für Windows-Umsteiger sehr interessant. Allerdings ist nicht bekannt, ob gcc und gdb integriert werden können. Andernfalls wäre es wohl für die Embedded-Entwicklung ziemlich ungeeignet.

CASE

Für komplexe Systeme ist ein explizites Design sinnvoll. Dabei wird als Design-Notation in der Regel UML verwendet. Damit das Design und die Implementierung nicht auseinanderlaufen, ist allerdings ein entsprechendes CASE-Tool notwendig, welches das Roundtrip-Engineering effektiv unterstützt. Solche CASE-Tools sind allgemein selten, und unter Linux ist das Angebot leider noch dünner.

Together Control Center/C++

Together ist wahrscheinlich das CASE-Tool, das das Roundtrip-Engineering-Konzept am besten umsetzt. Da komplett in Java implementiert, läuft es auch unter Linux und wird dafür auch aktiv unterstützt. Es ist wie alle Java-Applikationen aber ziemlich speicherhungrig und langsam. Besonders unterstützt Together das Arbeiten im Team. Leider ist Together relativ teuer.

Rational Rose

Rose ist wahrscheinlich das bekannteste und am meisten verbreitete UML-CASE-Tool, es hat allerdings einige Mängel, die es im Vergleich als eher weniger empfehlenswert erscheinen lassen.

MagicDraw

MagicDraw ist ebenfalls ein Java-basiertes Tool und läuft zwar unter Linux, wird dort aber nicht sehr aktiv unterstützt. MagicDraw ist ein relativ junges Tool und unterstützt laufend zusätzliche Features. Im Augenblick wird das Roundtrip-Engineering allerdings nur unzureichend unterstützt. MagicDraw ist für CASE-Tools relativ günstig, wird aber mit jeder Version teurer.

Dia

Falls es nur darum geht, ein Konzept grafisch darzustellen, ist Dia vielleicht ausreichend. Dia ist ein offenes Grafiktool für alle Arten von Diagrammen. Durch entsprechende Templates ist Dia daher auch für UML-Diagramme geeignet und kann sogar dazu gebracht werden, Code zu generieren. Da Dia OpenSource ist, kann es auch leicht an Spezialaufgaben angepasst werden.

Static Analyzer

Viele Fehler, die aufwendiges Debugging erfordern, könnten bereits durch eine statische Analyse entdeckt werden. Das klassische Tool hierfür ist lint. Viele der Probleme, die in C durch Lint gefunden wurden, werden in C++ bereits durch den Compiler bzw. Linker gefunden. Trotzdem macht eine statische Analyse auch für C++ Sinn. Als günstiges Tool bietet sich hier FlexeLint an. Es gibt weitere Tools, die auch spezifisch an interne Style-Guides anpassen lassen, allerdings sind diese meist sehr teuer.

Regression Tests

Für die iterative Entwicklung, die heute weit verbreitet ist, ist ein Tool für das automatische Testen unabdingbar. Das klassische Tool unter Linux dafür ist dejagnu. Es ist sehr gut an verschiedenste Bedürfnisse anpassbar. Allerdings ist bei Embedded Systemen meist auch ein gewisser Hardwareaufwand nötig, um umfassende Tests durchführen zu können. Dies ist via Software nur eingeschränkt automatisierbar.

Bug-Tracker

Bei langlebigen Projekten ist es wichtig, eine Datenbank über aufgetretene Fehler, deren Ursachen und deren Behebung zu führen. Für dieses Bug-Tracking sind unter Linux vor allem zwei Tools verbreitet: Bugzilla und gnats.
Box Tools
vollmann engineering gmbh
home sitemap engineering beratung coaching training support realisierung technische infos vorträge artikel kontakt
copyright © 2003-2006 vollmann engineering gmbh