Erhalten Sie Zugang zu diesem und mehr als 300000 Büchern ab EUR 5,99 monatlich.
Embedded-Linux-Kernel erzeugen Treiber und Kernelmodule entwickeln Praxisbeispiele mit LED-Matrix und LC-Displays Raspberry Pi, BeagleBone Black, CubieBoard und Co. haben dazu beigetragen, das Interesse an Embedded Linux sowie dessen Programmierung und Nutzung für alltägliche Dinge zu wecken. Es wird verstärkt immer mehr auch im industriellen Umfeld eingesetzt. Dieses Buch vermittelt die Grundlagen, die für den produktiven Einsatz von Embedded Linux notwendig sind. Ralf Jesse führt am Beispiel des beliebten Minicomputers Raspberry Pi in die Handhabung und Weiterentwicklung von Embedded Linux ein. Er behandelt alle Schritte, die für die Entwicklung von Embedded-Linux-Systemen wichtig sind: Aufsetzen und Nutzen einer sogenannten Cross-Development-Plattform auf der Basis eines in einer virtuellen Maschine ausgeführten Desktop Linux Übertragen der entwickelten Software auf das Zielsystem Grundlagen von Shellscripts für komfortablere Softwareentwicklung Vermittlung der für den Bau eines Kernels und des root-Dateisystems benötigten Kenntnisse Einfaches Starten und Testen des Kernels unter Einsatz des Bootmanagers „Das U-Boot“ instieg in die Entwicklung von Gerätetreibern und Kernelmodulen Das Buch richtet sich an alle, die „mehr“ aus ihrem Embedded System herausholen wollen. Die dafür erforderlichen Linux-Kenntnisse sind keine Voraussetzung, sondern werden im Buch erarbeitet. Alternative Ansätze auf der Basis anderer Minicomputer werden ebenfalls aufgezeigt. Somit ist das Buch für alle relevant, die Embedded Linux als Betriebssystem einsetzen wollen, unabhängig von der verwendeten Hardware. Aus dem Inhalt: Linux-Grundlagen Shell-Programmierung Netzwerkanbindung Aufbau einer Cross-Entwicklungsumgebung Erstellen eines Embedded-Linux-Kernels Erzeugen eines root-Dateisystems Der Bootprozess für verschiedene Embedded PCs: Raspberry Pi, BeagleBone Black und Cubieboard Einstieg in die Entwicklung von Treibern und Kernelmodulen Template für eigene Treiber Ansteuerung von Hardware Praxisbeispiele: Schieberegister, Ansteuerung von 8x8-LED-Matrizen, Steuerung von textbasierten LC-Displays
Sie lesen das E-Book in den Legimi-Apps auf:
Seitenzahl: 463
Veröffentlichungsjahr: 2016
Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:
Ralf Jesse
Bibliografische Information der Deutschen Nationalbibliothek
Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über <http://dnb.d-nb.de> abrufbar.
ISBN 978-3-95845-063-9
1. Auflage 2016
www.mitp.de
E-Mail: [email protected]
Telefon: +49 7953 / 7189 - 079
Telefax: +49 7953 / 7189 - 082
© 2016 mitp Verlags GmbH & Co. KG
Dieses Werk, einschließlich aller seiner Teile, ist urheberrechtlich geschützt. Jede Verwertung außerhalb der engen Grenzen des Urheberrechtsgesetzes ist ohne Zustimmung des Verlages unzulässig und strafbar. Dies gilt insbesondere für Vervielfältigungen, Übersetzungen, Mikroverfilmungen und die Einspeicherung und Verarbeitung in elektronischen Systemen.
Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem Werk berechtigt auch ohne besondere Kennzeichnung nicht zu der Annahme, dass solche Namen im Sinne der Warenzeichen- und Markenschutz-Gesetzgebung als frei zu betrachten wären und daher von jedermann benutzt werden dürften.
Lektorat: Sabine Schulz
Sprachkorrektorat: Irmgard Böger
Coverbild: © Dolnikov – fotolia.com
electronic publication: III-satz, Husby, www.drei-satz.de
Dieses Ebook verwendet das ePub-Format und ist optimiert für die Nutzung mit dem iBooks-reader auf dem iPad von Apple. Bei der Verwendung anderer Reader kann es zu Darstellungsproblemen kommen.
Der Verlag räumt Ihnen mit dem Kauf des ebooks das Recht ein, die Inhalte im Rahmen des geltenden Urheberrechts zu nutzen. Dieses Werk, einschließlich aller seiner Teile, ist urheberrechtlich geschützt. Jede Verwertung außerhalb der engen Grenzen des Urheherrechtsgesetzes ist ohne Zustimmung des Verlages unzulässig und strafbar. Dies gilt insbesondere für Vervielfältigungen, Übersetzungen, Mikroverfilmungen und Einspeicherung und Verarbeitung in elektronischen Systemen.
Der Verlag schützt seine ebooks vor Missbrauch des Urheberrechts durch ein digitales Rechtemanagement. Bei Kauf im Webshop des Verlages werden die ebooks mit einem nicht sichtbaren digitalen Wasserzeichen individuell pro Nutzer signiert.
Bei Kauf in anderen ebook-Webshops erfolgt die Signatur durch die Shopbetreiber. Angaben zu diesem DRM finden Sie auf den Seiten der jeweiligen Anbieter.
Embedded Linux hat nicht zuletzt durch die Artikel in Spiegel Online (2012) und Focus Online (2013) einen sehr hohen Bekanntheitsgrad erlangt. Dass Embedded Linux Programmierern, »Makern« und professionellen Hard- und Softwareentwicklern bereits bekannt war, kann man getrost voraussetzen. Anders ist dies bei »normalen« Anwendern: Dass die Hersteller aktueller Blueray-Disk-Player oder des neuen Smart-TV sowie von Wasch- und Geschirrspülmaschinen oder Wäschetrocknern Embedded Linux sehr häufig für die Steuerung der Elektronik und die Benutzerführung einsetzen, war der Allgemeinheit vor Erscheinen dieser Artikel vermutlich nicht geläufig. Dass Android, das Betriebssystem für Smartphones, ebenfalls einen (Embedded-)Linux-Kern hat, war vielen Anwendern wahrscheinlich ebenfalls unbekannt.
Die sehr beliebten Mini-Computer Raspberry Pi, BeagleBone Black und »Kollegen« haben dazu beigetragen, das Interesse an den Grundlagen von Embedded Linux sowie dessen Programmierung und Nutzung für alltägliche Dinge zu wecken, wie die Steuerung von Markisen und der Wohnraum-Beleuchtung oder die Regelung von Heizungsanlagen während der Abwesenheit: Viele Anwender, die früher nicht daran gedacht haben, sich mit diesem – zugegebenermaßen – komplexen Thema zu befassen, haben in dieser Beschäftigung ein interessantes Hobby und möglicherweise den Einstieg in eine neue berufliche Herausforderung gefunden.
Dieses Buch soll Ihnen unter Einsatz des Raspberry Pi den Einstieg in die Welt von Embedded Linux ebnen. Da die vermittelten Grundlagen allgemeingültig sind, können Sie die Erkenntnisse ebenfalls auf andere Embedded PCs übertragen. Sie werden erfahren, wie Sie eine Cross-Entwicklungsumgebung aufsetzen, wie Sie Daten zwischen dem Entwicklungs-PC und dem Zielgerät (dem Embedded PC) austauschen, wie Sie den Entwicklungsaufwand durch den Einsatz von »Das U-Boot« weiter reduzieren und optimieren können, und Sie lernen den Einstieg in die Treiberprogrammierung kennen. Ein vereinfachter Einstieg in die Shellprogrammierung zeigt Ihnen die Nutzung der wichtigsten Systemkommandos, sodass Sie in die Lage versetzt werden, eigene Shellscripts zu entwickeln bzw. bereits vorhandenes Wissen aufzufrischen. Das Ende jedes Kapitels umfasst eine Übersicht über ausgewählte weiterführende Literatur zum behandelten Stoff, sodass Sie die erworbenen Kenntnisse problemlos entsprechend Ihren eigenen Wünschen und Vorstellungen vertiefen können.
Als zwingend werden mittlere bis gute Kenntnisse der Programmiersprache C und der englischen Sprache vorausgesetzt. Die Gründe hierfür sind, dass der Kernel von Embedded Linux zu einem bedeutenden Teil in dieser Programmiersprache geschrieben wurde und wesentliche weiterführende Literatur – auch in Form von Datenblättern – nur in englischer Sprache verfügbar ist. Ebenfalls vorausgesetzt wird, dass Sie wissen, wie Ihr Mini-Computer in Betrieb genommen wird: Informationen zur Beschaffung und Installation des Betriebssystems vermittelt dieses Buch nicht!
Besondere Kenntnisse der Elektronik werden nicht vorausgesetzt, obwohl gewisse Grundlagen hier sehr hilfreich sind! Sie werden später beispielsweise Leuchtdioden sowohl direkt (Kapitel 4) als auch unter Einsatz von Schieberegistern ansteuern (Teil IV, Praxisteil I): Dass ohmsche Widerstände den elektrischen Strom begrenzen und somit eine Überlastung der GPIO-Leitungen oder hieran angeschlossener elektronischer Komponenten vermeiden, sollte als Basiswissen vorhanden sein.
Dieses Buch richtet sich an alle, die »mehr« aus ihrem Embedded System herausholen wollen. Diese Gruppe umfasst mit Ausnahme »echter« Linux-Profis alle Anwender vom Hobbyisten und interessierten Laien über Studenten aller technischen Fachrichtungen bis hin zu denjenigen, die ihr Geld mit der Programmierung von Computern oder der Entwicklung elektronischer Schaltungen verdienen, sich aber bisher noch nicht vertiefend mit Linux oder Embedded Linux beschäftigt haben.
An der Definition der Zielgruppe für dieses Buch erkennen Sie, dass Linux-Kenntnisse nicht erforderlich sind: Die erforderlichen Grundlagen für einen erfolgreichen Einsatz sowie für die Einarbeitung in vertiefende Aspekte werden in diesem Buch erarbeitet.
Das Buch ist in vier Teile gegliedert, von denen der erste Teil einen »sanften« Einstieg in die Embedded-Linux-Welt darstellt.
In Kapitel 1 werden Sie den Unterschied zwischen sogenannten Bare-Metal-Mikrocontroller-Systemen und Mikrocontroller-Systemen mit Betriebssystem sowie den Unterschied zwischen dem Kernel »Linux« und Linux-Distributionen kennenlernen. Sie erfahren hier auch den Unterschied zwischen Mikroprozessoren und Mikrocontrollern. Im Anschluss erhalten Sie – ebenfalls noch in Kapitel 1 – einen Überblick über die grundlegende Architektur von Linux und Embedded Linux. Den Abschluss von Kapitel 1 bildet eine Beschreibung der Parallelinstallation von Linux Mint zu einem bereits vorhandenen Windows-Betriebssystem bzw. der Installation von Linux Mint in einer virtuellen Maschine. Die Durchführung einer dieser Varianten ist sehr empfehlenswert, da die »Rechenpower« des Raspberry Pi im Vergleich zu Standard-PCs – gelinde gesagt – unterdurchschnittlich ist: Wenn es später im Buch darum geht, einen eigenen Kernel zu entwickeln, werden Sie die Vorteile des sogenannten Cross-Developments zu schätzen wissen.
Kapitel 2 befasst sich im ersten Schritt mit der Installation und der Basiskonfiguration von Samba. Hierdurch lässt sich der Mini-Computer in ein bereits vorhandenes (Heim-)Netzwerk integrieren. Dies ist nicht immer erwünscht oder erforderlich. Es muss dann aber eine andere Möglichkeit vorhanden sein, um die Software vom Host auf das Target zu übertragen und dort zu testen. Für diese Anforderung liefert Kapitel 2 ebenfalls eine Antwort. Der überwiegende Teil von Kapitel 2 beschreibt die Verzeichnisstruktur eines typischen Unix- oder Linux-Betriebssystems, also auch die eines Embedded Linux.
In Kapitel 3 steht die Programmierung der Shell im Vordergrund. Die Shell ist ein wesentlicher Aspekt für die Beherrschung von Linux/Embedded Linux. Steht auf einem Desktop-Linux in der Regel eine grafische Benutzeroberfläche auch für die Systemverwaltung zur Verfügung, so existiert diese Möglichkeit auf Embedded-Systemen in der Regel aufgrund der stark eingeschränkten Ressourcen (CPU-Taktung, Mangel an Arbeitsspeicher, Festplattenspeicher etc.) nicht. Dieses Kapitel liefert eine grundlegende Einführung in die wichtigsten Aspekte der Shell-Programmierung.
Bevor der Einstieg in die Shell-Programmierung erfolgt, werden aber zunächst die Programme man und info vorgestellt, da sie sehr ausführliche Informationen zu den einzelnen Kommandos zur Verfügung stellen. Darüber hinaus geht es vorher um die Ein- und Ausgabeumlenkung. Im Anschluss werden dann aber endlich die wichtigsten Features zum Einsatz der bash beschrieben. Hierzu zählen Shell-Variablen, die Programmierung von Alternativen (if-then-elif-else-fi sowie case-esac) bzw. Abfragen sowie die Programmierung von Schleifen.
Kapitel 4 beschreibt den Aufbau einer Cross-Entwicklungsumgebung für Software, die später auf dem Embedded PC ausgeführt werden soll. Ich habe mich hier für Code::Blocks entschieden, einer integrierten Entwicklungsumgebung, die für Windows-, Linux- und Mac-OS-X-Systeme verfügbar ist. Der besondere Charme dieser Entwicklungsumgebung liegt darin, dass sie vollständig in der Programmiersprache C++ geschrieben wurde, sodass die Abhängigkeit von weiterer Software entfällt, wie einer Java-Laufzeitumgebung: Durch die Installation von systemspezifischer Software, die grundsätzlich immer für die Softwareentwicklung benötigt wird, sind alle Abhängigkeiten automatisch erfüllt. Der Brite Gordon Henderson hat für den Raspberry Pi die Bibliothek wiringPi entwickelt und als Open-Source-Software der Community zur Verfügung gestellt. Kapitel 4 beschreibt die Beschaffung dieser Bibliothek und bietet darüber hinaus einen ersten Einstieg in ihre Nutzung.
Kapitel 5 beschreibt, wie Sie einen eigenen Embedded-Linux-Kernel bauen und in Betrieb nehmen. Hierbei handelt es sich um einen Standardkernel ohne weitere Modifikationen. Wenn Sie zu einem späteren Zeitpunkt einen eigenen Kernel entwickeln wollen, so zeigt Ihnen dieses Kapitel, worauf Sie zu achten haben. Diese Beschreibung liegt in einer Schritt-für-Schritt-Form vor, sodass Sie sie auch als eine Art Checkliste betrachten können. Dass auch Alternativen für die meisten der erforderlichen Schritte erläutert werden, erweitert den Horizont und zeigt, dass im Regelfall immer mehrere Varianten zum gewünschten Ergebnis führen.
In Kapitel 6 wird gezeigt, wie Sie ein root-Dateisystem von Hand erzeugen können. Mit dem Wissen aus Kapitel 3, dem Verstehen des Shellscripts mkrpi aus Kapitel 5 sowie der in diesem Kapitel beschriebenen Vorgehensweise sollten Sie in der Lage sein, die hier durchgeführten Schritte selbst mit einem Shellscript zu automatisieren. Der Fokus liegt hierbei auf dem als Debootstrap bezeichneten Verfahren. Zum Schluss des Kapitels wird mit Buildroot noch eine Alternative zur Erzeugung eines root-Dateisystems von Hand aufgezeigt.
Kapitel 7 beschreibt den Bootprozess eines Embedded Linux. Hier geht es um die derzeit am meisten verbreiteten Embedded PCs Raspberry Pi A/B/B+/2, den BeagleBone Black sowie um die verschiedenen Cubieboards. Stellt dieser Teil noch einen eher theoretischen Überblick dar, wird im weiteren Verlauf der Bootloader Das U-Boot praktisch eingesetzt. Detaillierte Anleitungen liefern Vorschläge zum Booten eines Kernels von einer SD-Karte und anschließend von einem TFTP-Server. Insbesondere der zweite Teil – das Booten eines Kernels über das Netzwerk – stellt eine sehr interessante und weit verbreitete Vorgehensweise dar, da das permanente Wechseln der SD-Karte beim Entwickeln von Kernel-Images und Treibern der Lebensdauer der SD-Karte und des Kartenslots nicht gerade zuträglich ist. Darüber hinaus beschleunigt dies die Entwicklung enorm.
Die Kapitel 8, 9 und 10 befassen sich mit den Grundlagen der Entwicklung von Treibern und Kernelmodulen. In Kapitel 8 werden die minimalen Grundlagen gelegt. Die Entwicklung von Gerätetreibern und -modulen ist nicht schwierig – und viele Tutorials, die in großer Anzahl im Internet zu finden sind, zeigen Beispiele zur Vorgehensweise. Nur die wenigsten der Tutorials gehen auf die Grundlagen in dem Maße ein, die das Schreiben eigener Treiber vereinfacht.
In Kapitel 9 werden die Grundlagen aus Kapitel 8 erweitert und miteinander in Verbindung gesetzt. Zwar ist es nicht möglich in einem Buch, das sich nicht ausschließlich mit der Entwicklung von Treibern befasst, »in große Tiefen abzutauchen«: In diesem Buch wird aber angestrebt, die Zusammenhänge aufzuzeigen, und es nennt zusätzliche Informationsquellen, die mit zunehmender Erfahrung immer wichtiger werden.
Kapitel 10 fasst die Erkenntnisse der beiden vorangegangenen Kapitel zusammen. Auf dieser Basis wird eine Schablone (Template) entwickelt, die Sie später für die Entwicklung eigener Treiber einsetzen können. Zudem bietet Ihnen Kapitel 10 einige Tipps und Hinweise, wie die GPIO-Ports korrekt verwendet werden. Dies erfolgt getrennt für digitale Ein- und Ausgänge, wobei in besonderem Maße auf die Sicherheit eingegangen wird, damit weder die verschiedenen Bausteine noch der Mikrocontroller zerstört werden.
Teil IV legt besonderen Wert auf praktische Beispiele, welche die Entwicklung von Gerätetreibern bzw. Modulen verdeutlichen.
Kapitel 11 verwendet hierfür das serielle 8-Bit-Schieberegister SN74HC595 von Texas Instruments, das (hier) für die Ansteuerung von acht Leuchtdioden mit nur einem GPIO-Port genutzt wird. Hier wird die Funktionsweise des Bausteins beschrieben sowie ein kompletter Schaltplan entwickelt. Entsprechende Hinweise erläutern, worauf beim Einsatz dieses Bausteins zu achten ist. Der wichtigste Part dieses Kapitels ist die Entwicklung der vollständigen Treibersoftware, die auf Basis der Schablone aus Kapitel 10 entwickelt wurde, sowie die User-Space-Anwendung, die das Modul dann nutzt. Auszüge aus dem Datenblatt des SN74HC595 von Texas Instruments runden dieses Kapitel ab.
In Kapitel 12 wird mit dem MAXIM 7219 ein Schieberegister eines anderen Herstellers verwendet. Dieser Baustein eignet sich in besonderem Maße zur Ansteuerung von LED-Matrizen, wobei – abgesehen von der 8 x 8-LED-Matrix – nur ein zusätzlicher Widerstand benötigt wird. Auch hier wird das Treibermodul mitsamt der User-Space-Anwendung von Grund auf entwickelt.
Kapitel 13 liefert einen bereits recht komplexen Treiber zur Ansteuerung eines LC-Displays zur Anzeige von Texten (also kein grafisches Display!). Als besonderes Highlight wird hier nicht die eigentliche Funktionalität des Treibers betrachtet – sie unterscheidet sich nicht wesentlich von den anderen Treibern in diesem Buch. Wichtiger ist hier, dass sich das Verhalten des Treibers durch die User-Space-Anwendung steuern lässt. In der User-Space-Anwendung können Sie beispielsweise festlegen, in welcher Zeile des Displays Text angezeigt werden soll. Ebenfalls von außen können Sie bestimmen, ob Sie einen Cursor anzeigen wollen. Ist dies gewünscht, so können Sie entscheiden, ob der Cursor statisch angezeigt werden oder blinken soll. Weitere Funktionen, wie die Festlegung der Textausrichtung (links- oder rechtsbündig bzw. zentriert) oder ein Textticker, wurden vorbereitet, sind aber noch nicht implementiert. Anhand der Beispielimplementierung der übrigen Funktionen sollte es Ihnen aber nicht allzu schwer fallen, diese Funktionen selbst zu implementieren. Als »Endausbau« wäre denkbar, diese »Komfortfunktionen« in einer Bibliothek zusammenzufassen und sie der Allgemeinheit zur Verfügung zu stellen.
Zu diesem Buch wurde eine E-Mail-Adresse eingerichtet, über die ich für Ihre Fragen zum Buch, Hinweise auf Fehler oder Wünsche nach Verbesserungen und Unterstützung erreichbar bin. Schreiben Sie einfach an
Am Zusatz ralf-jesse.de erkennen Sie, dass ich bereits eine Internet-Domäne reserviert habe, auf der ich die interessantesten Fragen, Projekte und Ideen in unregelmäßigen Abständen veröffentlichen möchte. Derzeit ist die Domäne http://www.ralf-jesse.de noch ohne Inhalt.
Ralf Jesse ist Diplom-Ingenieur der Elektrotechnik mit fast 30 Jahren beruflicher Praxis im Einsatz von Mikroprozessoren und -controllern. Nach drei Jahren im industriellen Maschinenbau im Bereich der Anlagensicherheit folgten mehr als 20 Jahre Tätigkeit als Entwicklungs- und Supportingenieur in einem großen japanischen Konzern. Seit zwei Jahren ist Ralf Jesse in der Entwicklung und im Support industrieller Feldbusse tätig.
Der erste Teil bietet einen sanften Einstieg in die Welt der Mikrocontroller. Dabei erfahren Sie den Unterschied zwischen sogenannten Bare-Metal-Systemen und solchen Systemen, die über ein eigenes Betriebssystem verfügen. Da Embedded Systeme aufgrund eingeschränkter Ressourcen komfortables Arbeiten nahezu unmöglich machen, wird hier auf der Basis einer VirtualBox-Installation von Linux Mint eine Cross-Development-Umgebung eingerichtet. Um die auf diesem System entwickelte Software auf das Embedded System übertragen zu können, gibt es eine kurze Einführung in Samba. Ebenfalls zu den Grundlagenkenntnissen gehört die Shellprogrammierung. Auf die Auffrischung bekannter Grundlagen geht Kapitel 3 ein. Kapitel 4 befasst sich dann mit der konkreten Installation meiner Cross-Development-Umgebung.
Kapitel 1
Embedded Linux
Kapitel 2
Netzwerkanbindung
Kapitel 3
Shell-Programmierung
Kapitel 4
Cross-Toolchains
