Entwicklungsumgebung ==================== Eclipse benötiget für das Erstellen der Binärdateien einen Compiler für die jeweilige Plattform. Siehe Toolchain Installation von Eclipse ------------------------ Als nächstes erfolgt die Installation von Eclipse (CDT): .. code:: bash # On Ubuntu and other Debian-based operating systems $ sudo apt install eclipse eclipse-cdt # On ArchLinux $ sudo pacman -S eclipse eclipse-cdt Nun fügen wir CDT eine neue Perspektive hinzu, dazu wählen wir am oberen rechten Bildschirmrand *Open Perspective*. Alternativ ist dieser Punkt über das Menü unter *Window* -> *Open Perspective* -> *Other...* erreicht werden. Anschließend wird *C/C++* gewählt. .. image:: images/eclipse-perspective.png Zudem ist es ratsam gleich eine Debug-Perspektive hinzufügen. Plugins für Remote Debugging ---------------------------- Nun benötigen wir noch einige Plugins, dazu öffnen wir den Menüpunkt *Help* -> *Install New Software*. Unter *Work with* wird in der Auswahlbox *All Available Site* ausgewählt. Klappen Sie nun unten den Punkt *Mobile and Device Development* auf, hier werden folgende Pakete zur Installation ausgewählt: * C/C++ GCC Cross Compiler Support * C/C++ GDB Hardware Debugging * c/C++ Memory View Enhancements * C/C++ Remote (over TCF/TE) Run/Debug Launcher * C/C++ Remote Launch * Remote System Explorer End User Runtime * Remote System Explorer User Actions * Target Management Terminal (Core SDK) .. image:: images/eclipse-install-software.png Nach dem Bestätigen der benötigten Lizenzen werden die Pakete heruntergeladen und installiert, das kann ein paar Minuten dauern. Danach sollte Eclipse neu gestartet werden. Projekte verwalten ------------------ Als nächstes brauchen wir ein Projekt an dem wir arbeiten können. Dazu erstellen Sie entweder ein neues Projkt oder importieren eines aus ihrem bestehenden Workspace. .. image:: images/eclipse-import.png Nun kümmern wir um die *Build Configuration*, Dazu öffnen wir die Projekteigenschaften unter *Project* -> *Properties*. Falls ein Cross-Compiler Marke Eigenbau verwendet wird muss der benötigte Pfad unter *Environment* eingetragen werden, wird der Compiler aus den Paketquellen verwendet entfällt dieser Arbeitsschritt. .. image:: images/eclipse-environment.png Unter *Settings* -> *Cross-Settings* wird nun das prefix des Compilers eingetragen, in unserem Fall **arm-linux-gnueabi-**. .. image:: images/eclipse-prefix.png In der Auswahlbox *Dialect* -> *Language Standard* kann der verwendete C-Standard eingestellt werden. Eclipse bietet uns hier die Auswahl zwischen * ISO C90 * ISO C99 * ISO C11 Wenn sie sich nicht sicher sind was sie auswählen sollen, lassen sie das Feld einfach leer und nehmen keine Auswahl vor. Verwenden Sie in Ihrem Project externe Header, können diese unter dem Punkt *Includes* hinzugefügt werden. Diese Pfadangaben werden dem Kompiler später über das Flag *-I* bereitgestellt. Die Punkte *Optimization* bzw. *Debugging* bieten weiterführende Optionen an um den Optimierungsgrad und das Debugging-Level einzustellen. Denkbar wäre, das hier für Debug- oder Release - Konfigurationen unterschiedliche Werte verwendet werden. .. image:: images/eclipse-debug.png Unter dem Punkt *Warnings* legen Sie *All Warnings (-Wall)* fest. Kommen wir nun zum Linker, hier sollte **gcc** eingetragen werden. Unter Libraries können Sie festlegen, gegen welche Bibliotheken ihr Programm gelinkt werden soll, Beispiele hierfür sind *pthread*, *crypto*, oder auch *sqlite3*. Beachten Sie das diese Bibliotheken in der Regel vorher mit dem Cross-Compiler übersetzt werden müssen um Sie verwenden zu können. Target - Feste IP-Adresse ------------------------- Um die Arbeit mit dem Target-System zu vereinfachen sollte dieses eine feste IP-Adresse bekommen. .. code:: bash $ ifconfig eth0 192.168.2.10 netmask 255.255.255.0 up Hosts Eintrag für das Target-System ----------------------------------- Um das Target-System später per Namen (und nicht umständlich per IP-Adresse) aufrufen zu können wird ein Eintrag in */etc/hosts* erstellt. Möglich macht dies die Vergabe einer festen IP-Adresse aus dem vorherigen Abschnitt. .. code:: bash $ 192.168.2.10 target-maschine SSH Key generieren und übertragen --------------------------------- Um die wiederkehrende Eingabe des Pass zu vermeiden, generieren und übertragen wir einen SSH Key mit dem wir uns auf dem Target-System identifizieren können. .. code:: bash # on the build system, generate a key $ ssh-keygen -t rsa -b 4096 -C "my@email.com" # copy the public key to the target $ ssh-copy-id root@target-maschine Debug Configurations -------------------- Um nun erfolgreich Remote-Debuggen zu können sind nun ein paar Konfigurationschritte notwendig. Beginnen wir mit dem Erstellen einer neuen Debug Configuration. Dazu wählen wir im Menu *Run* -> *Debug Configurations*: .. image:: images/eclipse-menu_debug_config.png Nun erstellen Sie mit einem Doppelklick auf **C/C++ Remote Application** eine neue Konfiguration. .. image:: images/eclipse-new_debug.png Danach empfiehlt es sich der Konfiguration unter *Name* einen eindeutigen Namen zu geben. Desweiteren wählen wir im Reiter *Main* das zugeteilte Project aus. Nun wird im Feld *C/C++ Application* die ausführbare Datei ausgewählt die später auf dem Target ausgeführt werden soll. Als nächstes müssen wir eine neue Verbindung einrichten (falls noch nicht geschehen), dazu wählen wir den Button *New* rechts neben *Connection*. Es erscheint eine Auswahlbox in der *Linux* ausgewählt wird. .. image:: images/eclipse-conn1.png Im nächsten Fenster gibt man den Hostnamen oder die IP des Host-Systems an. Da wird bereits in einem vorherigen Punkt den Hostnamen explizit vergeben haben, können wir diesen hier einsetzen. Nach dem Klick auf Next wählen wir unter *Files* **ssh.files** aus: .. image:: images/eclipse-conn2.png Dann **processes.shell.linux**: .. image:: images/eclipse-conn3.png Als nächstes **ssh.shells**: .. image:: images/eclipse-conn4.png und als Letztes **ssh.terminals**: .. image:: images/eclipse-conn5.png Jetzt kann unter dem Punkt *Connection* die konfigurierte Verbindung ausgewählt werden: .. image:: images/eclipse-conn6.png Kümmern wir uns um die nächste Einstellung, wird der Remote Debugger gestartet versucht Eclipse über SFTP die ausführbare Datei an einen bestimmten Ort auf dem Target-System zu übertragen. Diesen Ort müssen wir jetzt festlegen: .. image:: images/eclipse-remote.png Zuletzt müssen wir noch den richtigen Debugger auswählen, dazu öffnen Sie die Registerkarte *Debugger*. Unter *GDB debugger* wählen Sie nun die GDB-Version die für Ihre Remote-Architektur passt: .. image:: images/eclipse-gdb.png Mit *Debug* oder unter dem Debug-Icon in der Symbolleiste können Sie nun ihre Debug-Konfiguration starten und eine neue Session beginnen.