Wie man Embedded Linux überlebt – Teil 1 Der Embedded Linux-Entwicklungsprozess
Der Embedded Linux-Entwicklungsprozess
Der Linux-Kernel kann auf vielen verschiedenen Computerarchitekturen ausgeführt werden, von denen die meisten in der Embedded-Welt sehr beliebt sind. Alle Basispakete, die es dem Betriebssystem ermöglichen, die grundlegenden Aufgaben auszuführen, sind für die Cross-Kompilierung geeignet, daher kann Linux so weit verbreitet sein wie Mikrocontroller und Systeme auf Chips (SoCs).
Eine Linux-Distribution ist ein Betriebssystem, das aus einer Softwaresammlung besteht, die auf dem Linux–Kernel und – oft – einem Paketverwaltungssystem basiert. Die Distribution kann als vorkompilierte Binärdateien und Pakete vorliegen, die von den Distributionsbetreuern
zusammengestellt wurden, oder als Quellen, die mit Anweisungen zum (Cross-) Kompilieren gepaart sind.
Da die Hardwareplattform im Embedded-Bereich normalerweise maßgeschneidert ist, zieht es der OS-Designer im Allgemeinen vor, die Distribution ausgehend von Quellen von Grund auf neu zu generieren. Dies gibt dem Designer die absolute Kontrolle darüber, was im
-Produkt landet. Darüber hinaus ändert der Board Support Package (BSP) -Ingenieur den Low-Level-Code, damit die Kernfunktionalität des Betriebssystems auf dem spezifischen Hardwareprodukt funktioniert.
Alle notwendigen Softwarekomponenten zusammenzubringen, um die Linux-Distribution für ein bestimmtes Embedded-Produkt zu generieren, war früher ein Albtraum, aber dies ist dankenswerterweise nicht mehr der Fall.
Viele haben mit der Open-Source-Community die Quellen von Build-Systemen geteilt, die in der Lage sind, alle Softwarekomponenten aus dem Internet abzurufen, zu kompilieren und miteinander zu verknüpfen, bis hin zur Erzeugung von Installations-Images von vollwertigen Betriebssystemen. Einige Unternehmen entwickeln und warten ihr eigenes Build-System, andere kompilieren nur einige der Kernkomponenten und verwenden dann vorgefertigte Binärdateien, um das Betriebssystem fertigzustellen.
Im Jahr 2010 begann eine Arbeitsgruppe der Linux Foundation, sich mit Tools und Prozessen zu befassen, die die Erstellung von Linux-Distributionen für Embedded-Software (auch bekannt als Embedded Linux) ermöglichen. Eine solche Arbeitsgruppe, bekannt als Yocto-Projekt, hat sich an Open Embedded orientiert, einem Framework mit ähnlichen Zielen.
Das Yocto-Projekt ist ein Open-Source-Projekt, dessen Fokus auf der Verbesserung des Softwareentwicklungsprozesses für eingebettete Linux-Distributionen liegt. Das Yocto-Projekt bietet interoperable Tools, Metadaten und Prozesse, die die
schnelle, wiederholbare Entwicklung von Linux-basierten Embedded-Systemen ermöglichen.
Das Yocto-Projekt treibt derzeit die beliebtesten Linux-Distributionen für Embedded-Systeme an, bis zu einem Punkt, an dem die Begriffe „Embedded Linux“ und „Yocto-Projekt“ manchmal leicht als Synonyme verwechselt werden können. Yocto Es ist keine eingebettete Linux-Distribution, es erstellt eine benutzerdefinierte für Sie.
Yoctos Meta-Layer-Layout
Die moderne Version von Yoctos Architektur basiert auf Meta-Layern, Verzeichnissen, die Konfigurationsdateien und Regeln zum Kompilieren und Zusammenstellen von Linux-Distributionen für eingebettete Systeme enthalten.
Normalerweise, aber nicht immer, lebt ein Meta-Layer in seinem eigenen Git-Repository und bietet:
- bb-Dateien),
- Änderungen an Paketen, die von anderen Meta-Layern bereitgestellt werden (.bbappend Dateien),
- Maschinen (.conf-Dateien),
- Konfigurationsdateien (.conf-Dateien),
- gemeinsamer Code (.bbclass-Dateien),
- -Lizenzen,
- und andere kleinere Teile.
Eine einzelne Metaschicht adressiert normalerweise einen bestimmten Zweck. Um ein voll funktionsfähiges System zu erreichen, müssen daher mehr Metaschichten miteinander kombiniert werden.
Versionen auswählen und Abgleichen
Wenn Sie verschiedene Softwarekomponenten zusammenstellen, müssen Sie auf die Version jeder Komponente achten, da die falsche Version möglicherweise nicht gut mit den anderen Komponenten zusammenarbeitet oder sogar das System beschädigt.
Das Yocto-Projekt bietet Releases von Komponenten, von denen bekannt ist, dass sie gut zusammenarbeiten, aber das ist nur der Ausgangspunkt für Ihr Produkt.
Der Linux-Kernel ist ein großer Teil des Codes, der die richtigen Schnittstellen für den Benutzerbereich bereitstellen und die richtigen Treiber enthalten muss, damit das System ordnungsgemäß funktioniert. Daher ist die Rolle des Silizium-Anbieters heutzutage immer wichtiger geworden, da sie normalerweise über eigene Entwicklungs-Repositorys für den Linux-Kernel und den Bootloader verfügen und daher die besten Leute sind, um ein funktionierendes Basissystem auf der Grundlage ihrer Technologie zusammenzustellen.
Googles Repo
Ursprünglich entwickelt, um mit der Vielzahl von Git-Repositorys in einem Android-Projekt fertig zu werden, ist Repo auch bei Yocto-Entwicklern sehr beliebt geworden.
Repo ist ein Tool, das auf Git aufbaut; es verwendet eine „Manifestdatei“, um eine Reihe von Git-Repositorys gleichzeitig zu klonen und abzurufen.
Ein Repo-Manifest ist ein .xml-Dokument, das Verweise auf Git-Repositorys (zusammen mit ihren Versionen) enthält, kann Repo das Manifest verwenden, um ein Verzeichnis mit allen Quellen aus den verschiedenen Git-Repositorys zu füllen, die zum Erstellen eines Projekts erforderlich sind.
Dasselbe Manifest kann auch von Repo verwendet werden, um die Projektquellen zu überprüfen (zu synchronisieren), wenn Upstream Änderungen vornimmt.
Einige Siliziumhersteller bieten heutzutage Manifeste für ihre Entwicklungs- und Release-Zweige an, so dass Designer den Ausgangspunkt für ihre eigenen Produkte leicht überprüfen können.
Yocto-basierte Produktentwicklung
Der BSP-Ingenieur beginnt normalerweise mit dem Silicon Vendor Repo Manifest, um die Version der Software für das Referenzdesign zu überprüfen (dh ein Design, das vom Silicon Vendor selbst oder einem seiner Partner bereitgestellt wird und dasselbe oder ein ähnliches SoC wie das neue Produkt enthält). Der Ingenieur nimmt Änderungen am Bootloader und am Linux-Kernel vor, um sicherzustellen, dass die vom Elektronikingenieur ausgewählte Hardware über eine ordnungsgemäße Low-Level-Softwareunterstützung verfügt (z. B. Gerätetreiber, Gerätebaum, Kernelkonfiguration usw.).
Der Zweck des Produkts besteht darin, eine oder mehrere Anwendungen auszuführen, daher stellt der BSP / OS-Ingenieur sicher, dass alle Abhängigkeiten der Anwendung (en) für das System erstellt werden. Die Ingenieure, die die Anwendung entwickeln, benötigen ein Software Development Kit (SDK), um die Anwendung zu kompilieren und zu verknüpfen, daher wird der BSP / OS Engineer
ihnen ein solches Kit zur Verfügung stellen, und dank Yocto ist dies recht einfach geworden.
Embedded Linux good Practice
Die für die Entwicklung verwendeten Repo-Manifeste enthalten normalerweise Verweise auf Entwicklungszweige, was bedeutet, dass Repo das neueste Commit für diese Zweige abruft.
Wenn Sie dasselbe Manifest verwenden, um das Projekt zu einem späteren Zeitpunkt abzurufen, können Sie eine andere Version des Codes abrufen! Dies ist völlig in Ordnung für die Entwicklung, da Sie bei der neuesten Version Ihres Projekts bleiben möchten, aber eine Ihrer Entwicklungsversionen wird schließlich zu einer Version, und daher müssen Sie „ein Bild“ von dieser genauen Version der Quellen machen, die zum Generieren der Software verwendet werden Release, das auf das Projekt geht. Andernfalls können Sie rechtlichen Problemen ausgesetzt sein, da Sie nicht in der Lage sind, denselben Build ausgehend von Quellen neu zu generieren. Daher können Sie keine Änderung an einer bestimmten Version vornehmen und den Kunden zwingen, das gesamte System erneut zu testen, da Sie gezwungen sind, den Fehler zu beheben oder die neue Funktion zusätzlich zur neuesten Version der Software hinzuzufügen.
Wenn Sie diese Snapshots nicht erstellen, können Sie keine Halbierung der Projektquellen ausführen, um herauszufinden, welcher Commit die Funktionalität beeinträchtigt hat, die Sie so dringend benötigen. Suchen Sie beim Entwerfen Ihres Entwicklungsprozesses nach einer Möglichkeit, Repo-Manifeste automatisch mit genauen Commits zu generieren, damit Sie sie neben Releases speichern können, um dieselben Quellen zu einem späteren Zeitpunkt erneut auszuchecken und alles zu tun, wofür Sie bezahlt werden.
Kopieren Sie Quellen im eigenen Haus
Denken Sie auch daran, dass 99,9% der Quellen, die in Ihrem Produkt enthalten sind, aus der Open-Source-Community stammen. Als Designer müssen Sie sich vor vorgelagerten Änderungen und Fehlern schützen. Bewahren Sie eine Kopie aller relevanten Quellen im Haus auf und finden Sie einen Weg, sie wieder an Ihr Build-System anzuschließen. Möglicherweise möchten Sie auch einige der Repositorys spiegeln, die Sie am häufigsten verwenden, da manchmal Upstream-Git-Server plötzlich nicht mehr verfügbar sind. Wenn Sie keine interne Kopie haben, bleiben Sie stecken, bis die Server wieder online gehen.
Bei ByteSnap haben wir eine vollautomatische Möglichkeit, Yocto-basierte Projekte freizugeben, so dass wir die Quellen, die in ein Release einfließen, wiederherstellen und dasselbe Release zu einem späteren Zeitpunkt neu erstellen können. Wir bewahren Kopien von Open-Source-Paketen automatisch auf, sodass keine Ausfallzeiten durch fehlerhafte Server auf der ganzen Welt auftreten. Darüber hinaus sichern wir jeden Tag alles, so dass wir garantieren können, dass auch im Katastrophenfall vor Ort keine Arbeit verloren geht.
Fabrizio Castro
Fab ist ein leitender Softwareentwickler. Er erwarb seinen Bachelor- und Master-Abschluss am Politecnico di Milano in Mailand, Italien. Er verfügt über 20 Jahre Erfahrung in der umfassenden Softwareentwicklung (Dienstleistungen, Datenbanken, Anwendungen, wissenschaftliche Software, Firmware, RTOS, Gerätetreiber, Linux-Kernel usw.), arbeitete in Wissenschaft und Industrie. Er hat wissenschaftliche Arbeiten und Bücher mitverfasst und an Patenten gearbeitet. Neben Forschung und Entwicklung ist er auf die Entwicklung von Embedded Linux spezialisiert und liefert hochmoderne Designs für erfolgreiche wissenschaftliche, industrielle, kommerzielle und militärische Produkte. Er war auch Dozent und hat Studenten an einigen der renommiertesten Universitäten Europas unterrichtet. Weitere Informationen zum ByteSnap-Design finden Sie unter http://www.bytesnap.co.uk.