Softwareentwicklung unter Linux 1/ 117
Übersicht Vergleich Betriebsysteme Was ist Linux? Rechtliche Situation Das Linux Dateisystem Aufsetzen des Betriebssystems Installation von Softwarepaketen Werkzeuge The ToolChain 2/ 117
Vergleich Betriebsysteme 3/ 117
Vergleich Betriebsysteme Nur aktuelle Hardware Auch alte Hardware 4/ 117
Vergleich Betriebsysteme Nur aktuelle Hardware Auch alte Hardware Software einzeln installieren Alle Treiber enthalten 5/ 117
Vergleich Betriebsysteme Nur aktuelle Hardware Auch alte Hardware Software einzeln installieren Alle Treiber enthalten Paketverwaltung Software von dubiosen Webseiten 6/ 117
Vergleich Betriebsysteme Nur aktuelle Hardware Auch alte Hardware Software einzeln installieren Alle Treiber enthalten Paketverwaltung Software von dubiosen Webseiten Virenscanner bremst OS Kein Virenscanner nötig 7/ 117
Vergleich Betriebsysteme Nur aktuelle Hardware Auch alte Hardware Software einzeln installieren Alle Treiber enthalten Paketverwaltung Software von dubiosen Webseiten Virenscanner bremst OS Kein Virenscanner nötig Lizenzmanager umständlich Lizenzfreie Nutzung 8/ 117
Vergleich Betriebsysteme Nur aktuelle Hardware Auch alte Hardware Software einzeln installieren Alle Treiber enthalten Paketverwaltung Software von dubiosen Webseiten Virenscanner bremst OS Kein Virenscanner nötig Lizenzmanager umständlich Lizenzfreie Nutzung Eingeschränkt anpassbar Beliebig anpassbar 9/ 117
Vergleich Betriebsysteme Nur aktuelle Hardware Auch alte Hardware Software einzeln installieren Alle Treiber enthalten Paketverwaltung Software von dubiosen Webseiten Virenscanner bremst OS Kein Virenscanner nötig Lizenzmanager umständlich Lizenzfreie Nutzung Eingeschränkt anpassbar Beliebig anpassbar Nur vorgegebene Oberflächen Verschiedene Oberflächen 10/ 117
Vergleich Betriebsysteme Nur aktuelle Hardware Auch alte Hardware Software einzeln installieren Alle Treiber enthalten Paketverwaltung Software von dubiosen Webseiten Virenscanner bremst OS Kein Virenscanner nötig Lizenzmanager umständlich Lizenzfreie Nutzung Eingeschränkt anpassbar Beliebig anpassbar Nur vorgegebene Oberflächen Verschiedene Oberflächen Sicherheitslücken einsehbar Hintertüren eingebaut? 11/ 117
Vergleich Betriebsysteme Nur aktuelle Hardware Auch alte Hardware Software einzeln installieren Alle Treiber enthalten Paketverwaltung Software von dubiosen Webseiten Virenscanner bremst OS Kein Virenscanner nötig Lizenzmanager umständlich Lizenzfreie Nutzung Eingeschränkt anpassbar Beliebig anpassbar Nur vorgegebene Oberflächen Verschiedene Oberflächen Sicherheitslücken einsehbar Hintertüren eingebaut? Große Firmen Große Gemeinschaft 12/ 117
Historie von Linux 1991 begann Linus Torvalds in Helsinki (Finnland) mit der Entwicklung einer Terminal-Emulation, um unter anderem seinen eigenen Computer besser zu verstehen. Mit der Zeit merkte er, dass sich das System immer mehr zu einem Betriebssystem entwickelte und kündigte es daraufhin in der UsenetThemengruppe für das Betriebssystem Minix, comp.os.minix an.[3] Im September desselben Jahres sollte das System dann auf einem Server den Interessierten zur Verfügung gestellt werden. Da der damalige FTP-ServerAdministrator Ari Lemmke mit den von Torvalds vorgesehenen Namen Freax oder Buggix nicht einverstanden war, stellte jener es stattdessen in einem Verzeichnis mit dem Namen Linux zur Verfügung. Torvalds widersetzte sich anfangs dieser Namensgebung, gab seinen Widerstand aber schnell auf, da er nach eigener Aussage eingestehen musste, dass Linux einfach ein besserer Name war. Linux wurde zu dieser Zeit noch unter einer eigenen Lizenz veröffentlicht, welche die kommerzielle Nutzung verbot. Schnell merkte Torvalds aber, dass diese hinderlich war, und entschied sich dazu, allen Entwicklern deutlich mehr Freiraum zu geben. Er und seine Mitautoren stellten daraufhin im Januar 1992 Linux unter die GNU GPL[4]. Somit konnte man Linux in GNU integrieren und dies als das erste freie Betriebssystem vertreiben. Dieser Schritt machte das System für eine noch größere Zahl von Entwicklern interessanter, da es für diese die Modifizierung und Verbreitung vereinfachte. 1996 kündigte Torvalds an, dass er einen Pinguin als Maskottchen für Linux haben wolle, und schrieb einen Wettbewerb aus, aus dem schließlich der populäre Tux hervorging. Quelle: http://de.wikipedia.org/wiki/linux#historische_entwicklung 13/ 117
Was ist Linux? Kernel Das Programm init Shells Benutzerverwaltung Grafische Benutzeroberfläche Anwendungen Distributionen Community 14/ 117
Der Linux Kernel Oberboss im System Lizensiert unter GNU General Public License 2 Komponenten Speicherverwaltung Gerätetreiber Multitasking Scheduler Interprozesskommunikation Paketfilter (Firewall) Quelle: http://kernel.org/ 15/ 117
GNU General Public License 2 Copyleft Prinzip Lizenznehmer: Alle abgeleiteten Werke auch GPL 2 Autor: Darf Werk auch unter anderen Lizenzen veröffentlichen Lizenznehmer muss Quelltext veröffentlichen! Mehrere Gerichtsverfahren gegen Firmen z.b. 2006 Verfahren gegen D-Link http://dejure.org/dienste/vernetzung/rechtsprechung?text=2-6+o+224/06 16/ 117
Zwei Arten der Installation Linux in Virtualisierung Linux läuft im Fenster unter Windows/ MacOS Auf älteren Maschinen langsam Linux als zweites Betriebsystem Benötigt eigene Festplattenpartition Auch auf älteren Rechnern schnell Einfacherer Zugang zu Schnittstellen Evtl. Probleme mit Secure UEFI BIOS 17/ 117
Linux Distro herunterladen 32 Bit Version (x86) optimal für Virtualisierung weniger Speicherbedarf einfacher zu emulieren 64 Bit Version (x64) optimal bei nativer Installation 18/ 117
Linux als zweites OS Linux Distro auf bootbaren USB-Stick Software: unetbootin, usb-creator-gtk Linux Distro auf bootbarer CD/ DVD Rechner von CD/DVD/USB-Stick booten Software gparted verkleinert Partitionen Neue Partition anlegen und nach / mounten Installation sonst wie weiter unten UEFI-Systeme Secure UEFI abschalten Hilfe im Netz suchen 19/ 117
Linux in Virtual Box installieren Wir machen uns die Hände schmutzig! Beispiel anhand Distribution Xubuntu http://xubuntu.org/ Installation in VirtualBox Emulator http://virtualbox.org/ 20/ 117
Virtuelle Maschine erstellen 21/ 117
Namen vergeben 22/ 117
1GB RAM mindestens 23/ 117
Virtual Disk Image 24/ 117
Bootfestplatte erzeugen 25/ 117
Feste Größe ist schneller 26/ 117
20GB reichen zunächst 27/ 117
Zeit für einen Kaffee 28/ 117
ISO Image als virtuelle CD 29/ 117
Start von virtueller CD 30/ 117
Maus befreien: Strg Rechts 31/ 117
Inklusive Online Updates 32/ 117
Manuelle Partitionierung 33/ 117
Neue Partitionstabelle 34/ 117
Partition hinzufügen 35/ 117
Eine / Partition ist Pflicht! 36/ 117
Jetzt installieren 37/ 117
Ohne Swap fortfahren Auslagern auf virtuelle Festplatte langsam! Besser mehr Speicher für Maschine 38/ 117
Anmeldedaten 39/ 117
Ein gutes Passwort wählen GROSS- und kleinbuchstaben Ziffern Sonderzeichen,.! $ % & / ( ) = + Einen leicht zu behaltenen Satz wählen: Mann was der wieder für einen Quatsch sagt Sonderregeln (ein 1, sagen ;) Mwdwf1Q; Insgesamt 8 Zeichen! 40/ 117
Das kann dauern! 41/ 117
Neustart bestätigen 42/ 117
Ein aufgeräumter Desktop 43/ 117
Updates suchen 44/ 117
Updates installieren 45/ 117
Gasterweiterungen Installieren Ermöglichen Gemeinsame Ordner Geteilter Zwischenspeicher 3D Grafikbeschleunigung Größenänderungen des Fensters 46/ 117
Auf einigen Distributionen: Installationsskript ausführen 47/ 117
Alternativ: Shell im Ordner starten 48/ 117
Terminal starten 49/ 117
autorun.sh ausführen 50/ 117
Gasterweiterungen installiert 51/ 117
Rechner herunterfahren 52/ 117
Extension-Pack herunterladen Benötigt um Programmer per USB2 zu erreichen 53/ 117
Extension Pack installieren Doppelklick auf Datei öffnet VirtualBox Virtuelle Maschinen vorher herunterfahren 54/ 117
Fertig! 55/ 117
Das System Linux Systemstart Dateisystem Zugriffsrechte Versteckte Dateien Console und Shell Programme starten Skripte ausführen Werkzeuge 56/ 117
Das Programm /sbin/init Erstes Programm bei jedem Systemstart Startet alle weiteren Programme verwaltet Runlevel 0. System anhalten 1. Einzelbenutzer (meistens root) 2. Mehrbenutzer ohne Netzwerk 3. Mehrbenutzer mit textueller Oberfläche 4. Reserviert/ Unbenutzt 5. Mehrbenutzer mit grafischer Oberfläche 6. Rechner wird neugestartet Befehle (als Superuser) > runlevel > init <N> gibt aktuellen Runlevel aus schaltet in Runlevel <N> 57/ 117
Das Linux Dateisystem Dateisystem ist Zentralbibliothek des Rechners Linux Philosophie: Alles ist eine Datei! Laufwerke immer in Ordner eingehängt / ist die Wurzel von allem alles andere darunter Zugriff auf Hardware über virtuelle Dateien Zugriffsrechte/ Schutzbits Versteckte Dateien 58/ 117
Laufwerke in Ordnern keine Laufwerkbuchstaben! Einhängen eines Laufwerks mittels mount Benötigt oft Superuser Rechte (sudo) sudo mount /dev/sda2 /media/home Anzeige der Mountpoints mittels df oder mount > df -h Dateisystem rootfs devtmpfs tmpfs /dev/sda1 /dev/sda2 Größe Benut 20G 18G 984M 228K 990M 1,4M 20G 18G 54G 46G Verf Ben%% Eingehängt auf 2,9G 86% / 984M 1% /dev 988M 1% /dev/shm 2,9G 86% / 5,2G 90% /home 59/ 117
/ ist die Wurzel Immer ein Laufwerk in / eingehängt => Bei Neuinstallation reicht eine /-Partition alle anderen Datenträger in Unterordnern /-Verzeichnis (Beispiel opensuse) /bin Kommandos für root und normale Benutzer /boot Kernel und für Bootvorgang benötigte Dateien /dev Virtuelles Dateisystem devfs enthält Dateien für Zugriff auf Hardwaregeräte /etc Systemkonfiguration (globale Einstellungen für alle Benutzer) /home Jeder Benutzer für gewöhnlich ein eigenes Verzeichnis /lib Gemeinsam genutzte Programmbibliotheken /media Dynamische Datenträger wie z.b. USB-Sticks, CDROM Laufwerke,... /opt Optional installierte Software (z.b. QtSDK) /proc Virtuelles Dateisystem mit Informationen zum laufenden System /root Das Heimatverzeichnis des Superusers /sbin Befehle zur Systemverwaltung (nur mit Superuser Rechten benutzbar) /sys Virtuelles Dateisystem sysfs eine erweiterte Darstellung von devfs (/dev) /usr Die meisten Anwendungen sind hier installiert /var Variable Informationsdateien und Datenbanken Quelle: http://fibel.org/linux/lfo-0.6.0/node63.html 60/ 117
Der Ordner /dev Hardwaregeräte in Form von Dateien sichtbar Vom Kernel mittels devtmpfs automatisch gefüllt Beispieleinträge Ein Eintrag pro Festplatte und pro Partition /dev/sda Festplatte 1 /dev/sda1 Festplatte 1 Partition 1 Serielle Schnittstellen /dev/ttys0 /dev/ttyusb0 /dev/null interne serielle Schnittstelle erster USB-Seriell Wandler schluckt alle eingehenden Zeichen 61/ 117
Zugriffsrechte/ Schutzbits Für jede Datei drei Gruppen (E) (G) (A) Eigentümer Gruppe Andere Drei Arten von Schutzbits r darf lesen w darf schreiben x darf ausführen Schutzbits in Textdarstellung EEEGGGAAA > ls -l -rw-r--r-- 1 gregor users 43 11. Okt 13:35 Quellen.txt > chmod g+w Quellen.txt > ls -l -rw-rw-r-- 1 gregor users 43 11. Okt 13:35 Quellen.txt 62/ 117
Versteckte Dateien Dateien/ Ordner die mit Punkt beginnen Normalerweise nicht angezeigt Enthalten oft Einstellungen Bei Kopier- /Verschiebeaktionen ignoriert Punkt Einträge anzeigen > ls -al -rw-r--r-- 1 gregor gregor drwx------ 2 gregor gregor 3973 2011-10-12 09:30.springrc 480 2011-08-24 04:18.ssh Punkt Einträge kopieren cp -R \.* Ziel/ Im Dateiimanager versteckte Dateien anzeigen 63/ 117
Console Textuelles Eingabeinterface Erste Console 1991 vom Kernel bereitgestellt Ursprünglich Ausgabe direkt in Grafikkartenpuffer Terminal ist Entsprechung unter grafischer Oberfläche Immer noch erreichbar per Strg+F1,... 64/ 117
Shell Jede Konsole/ Terminal startet eine Shell Shell = Schale die sich um das Betriebsystem legt Interpretiert menschliche Texteingaben Es gibt verschiedene Shells bash, csh, tcsh, (unterschiedliche Kommandosyntax!) Grundfunktionen Starten von Programmen Ausführen von Skripten Vollständige Programmiersprache Umsetzen von Pipe Anordnungen Bereitstellung von Umgebungsvariablen Umleitung von Textausgaben 65/ 117
Shell Jede Konsole startet eine Shell Interpretiert menschliche Texteingaben Es gibt verschiedene Shells bash, csh, tcsh, (unterschiedliche Kommandosyntax!) Grundfunktionen Starten von Programmen Ausführen von Skripten Vollständige Programmiersprache Umsetzen von Pipe Anordnungen Bereitstellung von Umgebungsvariablen Umleitung von Textausgaben 66/ 117
Programme starten Goldene Regel: Dateien immer tabben! Ausführbare Datei finden absoluter/ relativer Pfad geht immer > /bin/less Suche im Suchpfad Variable $PATH zu durchsuchende Verzeichnisse > echo $PATH./:/home/gregor/bin:/bin:/opt/QtSDK/QtCreator/bin/:..../ ist aktuelles Verzeichnis 67/ 117
Ausführen von Skripten Synonym: Batchdatei Erste Zeile definiert Interpreter #!/bin/bash #!/usr/bin/perl x Bit gesetzt: chmod +x DATEI Keine Dateiendungen unter Linux! Oft aktuelles Verzeichnis nicht im Pfad 68/ 117
Shell Programmierung Variablen VARIABLE= WERT echo $VARIABLE Kontrollstrukturen if [ BEDINGUNG ]; then... fi for A in a b c... ; do... done Kein goto in bash! 69/ 117
Umgebungsvariablen Jede Shell erbt Variablen von Umgebung Neue Variablen in Elternshell unbekannt Variablen anzeigen: export (Bash) Nur exportierte Variablen weiter vererbt Variablen sterben mit ihrer Shell permanent durch Eintrag in Startup Skript Zuweisung: VARIABLE= Wert 70/ 117
Textausgaben umleiten Jedes Programm 1 Eingabestrom: STDIN 2 Ausgabeströme: STDOUT, STDERR Eingabe aus Datei: BEFEHL <DATEI Ausgabe in Datei: Zieldatei überschreiben: BEFEHL >DATEI1 2>DATEI2 An Zieldatei anhängen: BEFEHL >>DATEI1 2>>DATEI2 STDERR nach STDOUT umleiten: 2>&1 71/ 117
Shell Startup Skript Bei Start/ Login automatisch ausgeführt /etc/bash.bashrc ~/.bashrc ~/.profile ~/.login Beispiele: Suchpfad zu qtcreator > echo 'export PATH= /opt/qtsdk/qtcreator/bin/:$path' >>~/.bashrc Permanenter alias > echo 'alias ll= ls -lh ' >>~/.bashrc 72/ 117
Werkzeuge man cat less find grep gcc/ g++ make openocd gdb 73/ 117
Befehl man (1) Textbasiertes Anleitungssystem Ausführliche Beschreibungen Praktisch jeder Befehl beschrieben Programmierhandbuch Tastenzuordnungen Pfeiltasten Blättern / nach Text suchen q Beenden Alternative: info 74/ 117
Befehl man (2) Verschiedene Ebenen > man EBENE SCHLÜSSELWORT 1 2 3 4 5 6 7 8 9 Ausführbare Programme oder Shellbefehle Systemaufrufe (Kernelfunktionen) Bibliotheksaufrufe (Funktionen in System-Bibliotheken) Spezielle Dateien (gewöhnlich in /dev Dateiformate und Konventionen, z. B. /etc/passwd Spiele Makropakete und Konventionen, z. B. man(7), groff(7) Systemadministrationsbefehle (in der Regel nur für root) Kernelroutinen [Nicht Standard] > man 1 open > man 2 open 75/ 117
Befehl cat Dateiinhalt ausgeben Oft Start einer Pipe > cat DATEI grep FOO less Here-Skript in Shell-/ Perl-Skript cat << END_OF_TEXT Hello World END_OF_TEXT 76/ 117
Befehl less Zeigt Dateiinhalt an Interaktives bidirektionales Blättern Suchfunktion: / Beenden: q 77/ 117
Befehl find Suchen von Dateien > find STARTPFAD -name MUSTER Viele Optionen zur Suchkonfiguration Verknüpfung mittels -and / -or Expression für jede gefundene Datei Default: -print Externes Programm: -exec BEFEHL {} \; Beispiele: > find /home -name \.* less > find./ -name *.txt -exec less {} \; man find 78/ 117
Befehl grep Universeller Suchbefehl Sucht im Eingabestrom nach Muster Gibt alle Zeilen aus, die Muster enthalten Syntax: grep MUSTER DATEI > grep Hallo HalloWelt.txt > cat HalloWelt.txt grep Hallo Kombination mit find > find./ -name *.h grep -n MUSTER man grep 79/ 117
Pipeanordnungen Idee: Kleine Befehle als Werkzeugkasten Kombination einfacher Befehle ist mächtig Pipe ist Verbindung zweier Befehle Pipesymbol ist senkrechter Strich A B Textausgabe von A ist Texteingabe für B cat hallo.txt grep Welt Lange Pipeketten möglich 80/ 117
Befehl gcc/ g++ Universeller Übersetzer Preprozessor C/ C++ Compiler Linker Assembler Übersetzen: gcc -c DATEI.c Linken: gcc DATEI1.o DATEI2.o -o OUT man gcc (>10000 Zeilen) 81/ 117
Befehl make Führt makefile aus Umsetzung von Abhängigkeiten Einfache Regeln A.x mittels BEFEHL aus A.y erstellt Gegeben A.y, B.y, C.y, Für Ziel Z: Erstelle A.x, B.x, C.x, Ausnutzung Parallelität: make -jn (N = 2x CPU-Kerne) Für C wesentliche Dateiendungen.s.c.h.o Assembler Quelltext C Quelltext C Headerdatei Objektdatei (aus.c oder.s erstellt) 82/ 117
makefile Steuerdatei für make Regeln zur Übersetzung Konfigurationsoptionen Definition von Übersetzungsziele (ZIEL:) Quellverzeichnisse Zu erzeugender Objektdateien Name der Ausgabedatei Übersetzungsoptionen 83/ 117
GNU Make Quellen Official Manual http://www.gnu.org/software/make/manual/make.pdf German Tutorial http://www.ijon.de/comp/tutorials/makefile.html 84/ 117
Software Installieren Superuser Rechte Installtionsskripte Software Pakete Installation aus Quellen 85/ 117
Anwendungen installieren Änderungen am System nur als Superuser (root) Verschiedene Optionen Paketmanager Installationsskripte einzelne Pakete Quelltext 86/ 117
Der Superuser Ich bin /root, ich darf das! Eigenes Homeverzeichnis /root Darf jede Datei verändern Nur zur Systemkonfiguration Superuser werden > sudo su Etwas als Superuser ausführen > sudo reboot -n 87/ 117
Installation per Paketmanager Königlich einfache Bedienung Große Auswahl vorkonfigurierter Softwarepakete Abhängigkeiten automatisch aufgelöst Automatische Updates opensuse: yast, kpackagekit Debian: apt-get, aptitude, synaptic, kpackagekit 88/ 117
Installationsskripte Ähnlich Installation unter Windows OS Ausführbares Programm von Webseite Oft Dateinamensendung.run Datei muss ausführbar gemacht werden chmod +x DATEI Eigenschaften/ Dateizugriff im Dateimanager Oft als Superuser starten sudo./datei Beispiele QtCreator Grafikkartentreiber (NVIDA/ AMD) 89/ 117
Installation einzelner Pakete Für Fortgeschrittene User Per Suchmaschine suchen Muss zur Distribution passen opensuse, RedHat: sudo rpm install FILE.rpm Debian:.deb Format sudo gdebi FILE.deb Keine automatischen Updates! 90/ 117
Installation aus Quellen Pain in the Ass Suchen der richtigen Version neueste Quellen oft instabil Installationsanleitungen oft veraltet Neu kompilieren COMPILE.txt/ INSTALL.txt lesen! Foren durchsuchen Abhängigkeiten von Hand lösen Fehlermeldungen lesen Fehlende Software installieren Installationsscript erstellen (Fortgeschritten) 91/ 117
Übung: Installieren Linux Distribution eigener Wahl installieren opensuse, Ubuntu/ Kubuntu, Debian, in virtueller Maschine oder als Dualboot System Folgende Software installieren: yakuake TheToolChain (http://thetoolchain.com/) 92/ 117
The ToolChain Sammlung Skripte und C-Quelltexte Automatischer Download >500MB Bibliotheken angepasst und übersetzt Mehrere Compilerversionen Verschiedene Programmer/ Debugger Bibliotheken für uc Funktionseinheiten Viel Dokumentation Flexibel erweiterbar Gemeinschaftsprojekt Komplett Open Source 93/ 117
Features ToolChain FreeRTOS Multitasking Scheduler Compiler Suite gcc ARM NONE EABI OpenOCD für In Circuit Programming/ Debugging 3rd party Bibliotheken (Mathematik, Ethernet, ) Verschiedene Entwicklungsboards Bibliothek für Grafische Benutzerschnittstelle Flexible Konfiguration Derselbe Quelltext läuft auf verschiedenen uc Sofort lauffähige Beispiele 94/ 117
Installation The ToolChain Voraussetzungen Rechner / Virtuelle Maschine mit Linux Distribution (opensuse, Kubuntu, ) root Zugang (Superuser Passwort) Schnelle Internet Verbindung (download > 500MB) In Shell ausführen (= Terminal / Console) Finale Version > wget -N http://thetoolchain.com/install_thetoolchain.sh > bash./install_thetoolchain.sh - Letzte Testversion > wget -N http://thetoolchain.com/install_thetoolchain_beta.sh > bash./install_thetoolchain_beta.sh The ToolChain wird installiert nach ~/Source/TheToolChain (~ ist der Heimatordner des aktuellen Benutzers) 95/ 117
Ein neues Projekt erstellen Auf ins Abenteuer! 1. cd ~/Source/TheToolChain 2../createNewProject.pl TEST FOO 3. cd../test 4../qtcreator.sh 5. activate_project.sh anpassen 6. Übersetzen + programmieren 7. Fehlersuche 96/ 117
Skript createnewproject.pl./createnewproject PROJECT AUTHOR Nutzt eine Projektvorlage Erstellt neuen Ordner in ~/Source/ Trägt Projektname und Author ein Aktualisiert Liste aller Erweiterungen Erstellter Projektordner frei verschiebbar 97/ 117
Template Projekt Komplettes, eigenständiges Framework Läuft auf den meisten Cortex M3 Platinen Support für QtSDK Quelltexteditor >./qtcreator.sh Übersetzen und auf uc schreiben >./compile.sh Fehlende ToolChain wird nachgeladen 98/ 117
Makefile In jedem compile.sh Lauf verwendet Legt fest Welche Objektdateien erstellen Wo.c/.h/.s Dateien suchen Welche Konstanten definieren Welche Dateien einbinden Abhängigkeiten zwischen Bauzielen 99/ 117
Configure Makefile (1) (2) (3) (4) (5) (6) (7) (8) (9) Grundlegende Konstanten Wo liegen.h Dateien? Wo liegen.c Dateien? Wo liegen.s Dateien? Sucht benötigte Dateien Legt verwendeten uc fest Welche Kompileoptimierungen Falsche Bauziele Generelle Dateien hinzufügen 100/ 117
Makefile - basic constants Compiler Optimierungen (-O) O0 Og O1 O9 Os keine Optimierungen (für Debugging) Debuggingsymbole hinzufügen Einfache Optimierungen Maximale Geschwindigkeit Kleinstes Programm > man gcc 101/ 117
Makefile wo liegen Headedateien (.h) Header Dateien benötigt für #include gcc Parameter -I definiert einen Includepfad \ am Zeilenende: in nächster Zeile fortfahren $(INCLUDE_DIRS) enhält viele -I Einträge $(INCLUDE_DIRS) direkt an gcc gegeben gcc liest #include Zeile gcc durchläuft Liste der -I Einträge Beispiel Quelltext + makefile 102/ 117
Makefile Wo liegen Quelltexte (.c) C-Quelldatei übersetzt in Objektdatei (.o) vpath.%c enthält Liste von Ordnern Wann immer FOO.o erstellt wird: Make durchsucht alle Ordner in vpath.%c Das zuerst gefundene FOO.c word übersetzt Beispiel makefile 103/ 117
Makefile Wo liegen Assemblertexte (.s).s Dateien enthalten Assemblerquelltexte Oft benutzt für Systemstart vpath %.s enthält Liste von Ordnern Extra Regel definiert Übersetzung.s.o Wann immer FOO.s übersetzt werden soll Alle Ordner in vpath %.s durchsucht Erste gefundene FOO.s wird übersetzt FOO.s FOO.o Beispiel makefile 104/ 117
Makefile ucontroller festlegen STM32 ucs in Klassen unterteilt Klassen unterscheiden sich durch Benötigter Startup Quelltext Anzahl Anschlusspins Größe des Arbeitsspeichers (RAM) Größe des Programmspeichers (FLASH) Funktionseinheiten (GPIOs, Timer, UARTS,..) 105/ 117
Makefile - phony build targets.phony: clean all Lists all Targets which are no files Avoids ambiguity between build targets and files of same name Example: all, clean 106/ 117
Makefile - Objektdateien $(MAIN_OBJS) Liste zu bauender Objekte Jede beteiligte.c Datei benötigt einen.o Eintrag in $(MAIN_OBJS)! Objektdatei hinzufügen MAIN_OBJS += foo.o Liefert Übersetzungsaufruf gcc -c foo.c 107/ 117
TTC Erweiterungen Unterordner im Projektordner extensions/ Alle verfügbaren Erweiterungen Keine projektbezogenen Dateien extensions.local/ Projektbezogene Makefile Fragmente extensions.active/ Verweise extensions/, extensions.local/ alle makefile.* hier automatisch verwendet Verweise erstellt durch activate.*.sh Skripte 108/ 117
Ordner extensions/ Drei Arten von Dateien makefile.nnn_name Makefile Fragment im Rang NNN Liefert zusätzliche Einstellungen wenn aktiviert activate.nnn_name.sh Skript welches eine Erweiterung aktiviert Erstellt einen oder mehrere Einträge in extensions.active/ Einige Skripte entfernen konkurrierende Einträge source.nnn_name.c /.h Quelltext für Autostart Erlaubt automatisches Starten einer Erweiterung Singletaskbetrieb vor Start des Schedulers 109/ 117
Extensions in Rängen Extensions, Makefiles, Activate-Scripts Dateiname mit dreistelliger Rangnummer Hochrangige Erweiterungen basieren auf niederen Rängen Kleinster Rang: Compiler Libraries Höchster Rang: Vollständige Projekte ~/Source/TheToolChain/ InstallData/ReadMe_Ranks.txt Regel: Kein Rang benötigt höheren Rang! Ausnahme: Rang 500 von 450 aus erreichbar 110/ 117 050 System Libraries 100 Board Definitions 200 Compiler Settings 300 Multitasking Scheduler 400 3rd Party Libraries 450 Architektur Treiber 500 The ToolChain 600 Example Codes 999 External Tools
Minimal SetUp >./clean.sh > activate.100_board_olimex_h107.sh > activate.600_example_leds.sh Erstellt aus dem Ei: makefile.100_board_olimex_h107 makefile.190_cpu_cortexm3 makefile.200_cpu_stm32f10x... makefile.500_ttc_interrupt makefile.500_ttc_memory makefile.600_example_leds 111/ 117
Linker Skript Benötigt beim Binden von Referenzen an physikalische Adressen Definiert Speicheradressen und -bereiche im uc Speicher eingeteilt in Bereiche mit Attributen Name Zugriff (r ead, w rite, x ecutable) Startadresse Größe Abschnitte (Sections) definiert mit Attributen Name Alignment (1, 2, 4, 8 Bytes) Zugewiesener Speicherbereich. ist der aktuelle Adresszähler Enthaltene Objekte (bss, heap, stack,...) configs/memory.ld im Projektordner enthält aktuelles Linker Skript 112/ 117
Programmieradapter Programmieradapter ist ein Hardwaregerät Kabelverbindung zwischen Desktop PC/ Laptop und uc Schreibt (flashed) Binärdatei mit Firmware auf uc Erlaubt Fehlersuche im eingebauten uc OpenOCD ist quelloffene Debug Software Bespiel: ARM-USB-TINY-H von Olimex Aktuell verwendeter Adapter Umstellen: activate.350_programmer_*.sh _/flash_current.sh schreibt Binärdatei mit aktuellem Adapter _/debug_current.sh startet Debugging auf aktuellem Adapter Liste unterstützter Programmieradapter ~/Source/TheToolChain/OpenOCD/share/ openocd/scripts/interface/ 113/ 117
compile.sh Aufruf im Projektordner:./compile.sh Fehlende ToolChain automatisch installiert Ruft auf./createlinks.sh./activate_project.sh Übersetzt aktuelles Projekt Aktualisiert QtCreator/PROJEKT.creator Schreibt erzeugte Binärdatei auf uc 114/ 117
Debugging In welchem Schritt tritt Fehler auf? Während Übersetzung (gcc -c) Syntaxerror Includedatei nicht gefunden.c-file makefile Während Binden (Linking) Objektdatei fehlt Fehlender Objektpfad makefile (MAIN_OBJS) makefile (vpath %.c) Während Laufzeit (Assert()) Falscher uc/ Board gewählt Stacküberlauf 115/ 117 Passendes Board aktivieren ttc_task_create() Aufruf
Hausaufgaben Aktuelle Beta Version The ToolChain installieren http://thetoolchain.com/ Wiederholung C für Mikrocontroller Labor Webseite Wichtig: Die Inhalte der Hausaufgabe werden zum Praktikumsbeginn in einem Test abgefragt. Das Bestehen des Tests ist Voraussetzung für die Teilnahme am weiteren Praktikum. 116/ 117
Fragen? 117/ 117