|
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 |
|