Vorwort | 5 |
Inhaltsverzeichnis | 7 |
1 Einleitung | 11 |
2 Gut zu wissen | 19 |
2.1 Die Architektur eingebetteter Systeme | 21 |
2.1.1 Hardware | 21 |
2.1.2 Software | 24 |
2.1.3 Auf dem Host für das Target entwickeln | 29 |
2.2 Arbeiten mit Linux | 31 |
2.2.1 Die Shell | 33 |
2.2.2 Die Verzeichnisstruktur | 34 |
2.2.3 Editor | 35 |
2.3 Erste Schritte mit dem Raspberry Pi | 36 |
2.3.1 System aufspielen | 37 |
2.3.2 Startvorgang | 39 |
2.3.3 Einloggen und Grundkonfiguration | 40 |
2.3.4 Hello World: Entwickeln auf dem Raspberry Pi | 40 |
3 Embedded von Grund auf | 43 |
3.1 Der Linux-Kernel | 44 |
3.2 Das Userland | 51 |
3.2.1 Systemebene | 53 |
3.2.2 Funktionsbestimmende Applikationen | 69 |
3.3 Cross-Development für den Raspberry Pi | 74 |
3.3.1 Cross-Generierung Kernel | 74 |
3.3.2 Cross-Generierung Userland | 77 |
3.3.3 Installation auf dem Raspberry Pi | 81 |
3.4 Bootloader »Das U-Boot« | 86 |
3.4.1 Kernel von der SD-Karte booten | 90 |
3.4.2 Netzwerk-Boot | 94 |
3.5 Initramfs: Filesystem im RAM | 96 |
4 Systembuilder Buildroot | 105 |
4.1 Überblick | 105 |
4.2 Buildroot-Praxis | 109 |
4.2.1 Installation auf der SD-Karte | 111 |
4.2.2 Netzwerk-Boot per U-Boot | 114 |
4.3 Systemanpassung | 120 |
4.3.1 Postimage-Skript | 121 |
4.3.2 Postbuild-Skript | 123 |
4.4 Eigene Buildroot-Pakete | 141 |
4.4.1 Grundstruktur | 141 |
4.4.2 Praxis | 147 |
4.5 Hinweise zum Backup | 151 |
5 Anwendungsentwicklung | 153 |
5.1 Cross-Development | 154 |
5.2 Basisfunktionen der eingebetteten Anwendungsprogrammierung | 157 |
5.2.1 Modularisierung | 158 |
5.2.2 Realzeitaspekte | 160 |
5.3 Hardwarezugriffe | 165 |
5.3.1 Systemcalls für den Hardwarezugriff | 166 |
5.3.2 GPIO-Zugriff über das Sys-Filesystem | 172 |
6 Gerätetreiber selbst gemacht | 177 |
6.1 Einführung in die Treiberprogrammierung | 178 |
6.1.1 Grundprinzip | 179 |
6.1.2 Aufbau eines Gerätetreibers | 180 |
6.1.3 Generierung des Gerätetreibers | 183 |
6.2 Schneller GPIO-Treiberzugriff | 186 |
6.2.1 Digitale Ausgabe | 187 |
6.2.2 Digitale Eingabe | 195 |
6.2.3 Programmierhinweise zum Hardwarezugriff | 202 |
7 Embedded Security | 207 |
7.1 Härtung des Systems | 209 |
7.1.1 Firewalling | 210 |
7.1.2 Intrusion Detection and Prevention | 222 |
7.1.3 Rechtevergabe | 223 |
7.1.4 Ressourcenverwaltung | 229 |
7.1.5 Entropie-Management | 234 |
7.1.6 ASLR und Data Execution Prevention | 235 |
7.2 Entwicklungsprozess | 236 |
7.3 Secure-Application-Design | 239 |
7.3.1 Sicherheitsmechanismen in der Applikation | 240 |
7.3.2 Least Privilege | 241 |
7.3.3 Easter Eggs | 243 |
7.3.4 Passwortmanagement | 243 |
7.3.5 Verschlüsselung | 245 |
7.3.6 Randomisiertes Laufzeitverhalten | 246 |
8 Ein komplettes Embedded-Linux-Projekt | 247 |
8.1 Hardware: Anschluss des Displays | 248 |
8.2 Software | 250 |
8.3 Systemintegration | 259 |
Anhänge | 267 |
A Crashkurs Linux-Shell | 269 |
A.1 Elementare Kommandos zur Dateiverwaltung | 271 |
A.2 Systemkommandos | 274 |
A.3 Grundlegende Befehle zum Netzwerkmanagement | 277 |
B Crashkurs vi | 279 |
C Git im Einsatz | 283 |
C.1 Unterschiedliche Git-Bereiche | 283 |
C.2 Dateizustände | 284 |
C.3 Änderungen anzeigen | 285 |
C.4 Branching und Merging | 285 |
C.5 Remote-Repository | 286 |
D Die serielle Schnittstelle | 289 |
Literaturverzeichnis | 293 |
Stichwortverzeichnis | 297 |
www.dpunkt.de | 1 |