phonenumber +49(0)711 123722-0
|
DE EN

Linux

Linux ist ein Open-Source-Betriebssystem. Das bedeutet, dass der Quellcode des Linux-Kernels selbst und auch der von Tausenden von Userspace-Anwendungen, dem sogenannten Userland, kostenlos zur Verfügung steht. Linux läuft auf den meisten CPU-Architekturen, einschließlich x86 und ARM, aber auch auf vielen anderen Architekturen von kleinen CPUs für IoT-Geräte (Internet-of-Things) bis hin zu großen Main Frames und Hochleistungsrechnern (HPC). Linux ist reich an Funktionen und vollständig skalierbar. Entsprechend vielfältig ist die Zahl der Anwendungen.

● Set-Top-Boxen, Media Player, DVD-/Blue-Ray-Abspielgeräte, Fernseher
● Netzwerkgeräte, Router
● Speichergeräte (NAS)
● Heimautomatisierung
● Industrielle und medizinische Anwendungen

Der Linux-Kernel, einschließlich der Gerätetreiber, bildet die Grundlage für Android. Demnach sind, wenn man so will, alle Android-Geräte, d.h. Smartphones, Tablets usw., auch Linux-Geräte. Tatsächlich benutzen sehr viele Leute bereits Linux-Geräte, möglicherweise sogar ohne es zu wissen.
Diese vielfältigen Anwendungsmöglichkeiten sorgen dafür, dass sich Linux stetig in einem rasanten Tempo weiterentwickelt. Video und Audio Codecs sind oftmals zuerst für Linux verfügbar, ebenso wie WLAN- und Bluetooth-Treiber. De facto ist Linux sogar das erste Betriebssystem, welches für die meisten Systems on Chip (SoC) verfügbar ist. Das liegt daran, dass die SoC Hersteller Linux verwenden, um ihre Hardware zu testen und zu verifizieren. Daraus folgt, dass, sobald ein Chip freigegeben wird, der Öffentlichkeit ab diesem Moment auch eine erste Version aller notwendigen Linux-Gerätetreiber zur Verfügung steht.

Die Linux-Entwicklung wird von der "Community" durchgeführt. Die Community besteht auf der einen Seite aus professionellen Software-Entwicklern, die bei Firmen angestellt sind und ihr Geld mit Linux Softwareentwicklung verdienen. Auf der anderen Seite gibt es viele private Enthusiasten, die
Code zu Linux beisteuern, den sie in ihrer Freizeit entwickelt haben. Auf diese Weise wird, etwa alle neun bis zehn Wochen, eine neue Version des Linux-Kernels veröffentlicht. Das ist der sogenannte Mainline Kernel.
Obwohl also eine Vielzahl an Personen am Kernel arbeiten, ist die Qualität auf einem sehr hohen Niveau. Wenn Sie eine Änderung am Kernel beisteuern wollen, müssen Sie diese zuerst auf einer Mailingliste veröffentlichen. Dort wird der Code von vielen Personen auf Fehler, Mängel und sogar auf den Codierstil überprüft. In den meisten Fällen gibt es noch einige Beschwerden und der Code muss überarbeitet werden. Nicht selten müssen mehrere Iterationen dieser Revisionen durchgeführt werden, bis der Code schließlich den Anforderungen der Kernel-Betreuer genügt und er dann in die nächste Kernel-Version integriert werden kann.
Einer der größten Vorteile von Linux ist die gebotene Vielfalt. Es gibt viele Distributionen mit unterschiedlichen Zielsetzungen, zahlreiche grafische Benutzeroberflächen, diverse Build-Systeme, eine beachtliche Anzahl an Entwicklungsumgebungen und eine überwältigende Menge an Open-Source-Software-Pakete im Linux-Ökosystem. Sie können aus einer riesigen Anzahl von Bibliotheken, Ansätzen, Versionen, Varianten und weiteren Optionen wählen. Die Flexibilität ist gigantisch.

Diese Vielfalt bringt jedoch auch ein Problem mit sich. Viele Menschen vermissen den roten Faden, der sie direkt zum Ziel führt. Gerade Linux-Einsteiger stehen oft hilflos vor einem riesigen Berg an Möglichkeiten und wissen nicht, wo sie anfangen sollen. Diese Hilflosigkeit ist nur sehr mühsam zu überwinden. Man braucht einen gewissen Erfahrungsschatz. Wenn Sie erfolgreich mit Linux arbeiten möchten, müssen Sie damit rechnen, viel zu lesen, zu forschen und zu vergleichen. Da man jedoch in den meisten Fällen Code findet, welcher wiederverwendbar ist, ist dieser Aufwand gut investiert. Letztendlich spart man sich dadurch, auf lange Sicht, viel Zeit und Mühe und mit etwas Durchhaltevermögen finden Sie Ihren individuellen Weg durch den Linux-Dschungel.

F&S bietet Ihnen auf diesem Weg vielfältige Unterstützung an. Wir stellen Workshops, Dokumentationen und ein Supportforum zur Verfügung. Diese Workshops und die sorgfältige Lektüre der Dokumentation können Ihnen einige Stunden Zeitersparnis einbringen. Wenn es zudem noch unbeantwortete Fragen oder unangesprochene Themen gibt, dann können Sie diese in unserem Forum ansprechen. Unsere Software- und Hardware-Ingenieure werden Ihnen gerne, zügig und kompetent, Rede und Antwort stehen.

chain

Entwicklungskette Embedded Linux Distribution

Was ist Embedded Linux?

Ein Embedded-Linux-System unterscheidet sich grundsätzlich nicht von einem regulären Desktop-Linux-System. Es verwendet den gleichen Quellcode, die gleichen Compiler und Software-Werkzeuge, sowie die gleichen Userland-Pakete. Es gibt jedoch in der Regel einige Einschränkungen, die beachtet werden müssen.

● Embedded Systeme haben normalerweise weniger RAM. Er wird außerdem in Megabyte gezählt, anstatt wie üblich in Gigabyte. Das erfordert, das System klein zu halten und nur diejenigen Hintergrunddienste zu starten, die tatsächlich notwendig sind. Stellenweise wird Software sogar auf Größe optimiert, anstatt auf Geschwindigkeit. Lassen Sie am besten unnötige Teile der Software weg. Wenn Sie zum Beispiel wissen, dass Ihre Anwendung niemals 3D-Funktionen oder Web-Assembly benötigen wird, können Sie eine kleinere Version des Webbrowsers, ohne diese Elemente, kompilieren.

● Embedded Systeme besitzen, in der Regel, kein Festplattenlaufwerk, sondern nur kleine Flash-Medien. Eine ausgewachsene Distribution, die mehrere Gigabyte Speicherplatz benötigt, ist aller Voraussicht nach nicht angemessen. Selbst die Vielzahl an gewöhnlichen Kommandozeilenwerkzeugen nehmen zu viel Platz in Anspruch. Sie werden deshalb oftmals durch ein kompaktes Einzelwerkzeug namens "Busybox" ersetzt.

● Embedded Systeme sind mehrheitlich batteriebetrieben. Daher ist es wichtig, dass alle stromsparenden Funktionen tatsächlich funktionsfähig sind. Sleep-Modi wie Suspend-to-RAM sind unerlässlich und es müssen schnelle Weckfunktionen implementiert werden. Auf einem Desktop hat dies, herkömmlicherweise, nur selten Priorität.

● Embedded Systeme werden oft an industrielle Busse, wie serielle Schnittstellen, SPI, I²C, CAN und ähnliche angeschlossen, haben aber - wenn überhaupt - nur wenige PCI-Lanes. Von PCs bekannte und gängige Hardware-Erweiterungen können nicht verwendet werden. Andererseits haben die, in Embedded Geräten, verbauten SoCs viel eingebaute Peripherie, so dass zusätzliche, externe Hardware nur selten von Nöten ist. Das bedeutet, dass, im Vergleich zu einem standardmäßigen Desktop-PC, unterschiedliche Gerätetreiber erforderlich sind.

● Embedded Geräte sind häufig kopflos. Das heißt, sie haben kein Display. Daher sind andere Mittel notwendig, um die Kommunikation mit dem Gerät herzustellen. Wenn Sie ein Display haben, verwenden Sie höchstwahrscheinlich einen Touchscreen und keine Maus. Daran muss bei der Gestaltung des GUI gedacht werden. Oftmals ist keine Unterstützung für Hochleistungsgrafiken verfügbar, oder diese sind deutlich weniger performant als auf einem Desktop-PC. Das Gleiche gilt für Multimedia Funktionen wie Videowiedergabe oder ähnliches.

● Embedded Systeme basieren oft nicht auf x86-CPUs, sondern auf ARM oder anderen SoCs.
Demnach braucht man sowohl Cross-Compilierung, als auch verschiedene Bibliotheken.

● Eingebettete Geräte werden nicht selten in rauen Umgebungen eingesetzt. Diese können zum Beispiel im Freien sein, wo es sehr kalt, sehr heiß oder sogar nass sein kann. Außerdem ist es möglich, dass die Stromversorgung instabil ist oder der Strom einfach, durch Ziehen des Steckers, abgeschaltet wird. Diese Gegebenheiten erfordern sehr robuste Dateisysteme und Wiederherstellungsfunktionen. Eventuell müssen sogar normale Dateisysteme schreibgeschützt sein, was bei regulären Distributionen nicht möglich ist.


Ein Embedded-Linux-System ist daher einem regulären Desktop-Linux-System sehr ähnlich, nur
die Gewichtung der einzelnen Ziele ist unterschiedlich.

linux

Buildroot und Yocto

Wenn Sie Linux auf einem Desktop verwenden, arbeiten Sie in der Regel mit einer bestimmten
Linux-Distribution, wie Ubuntu, Debian, Suse, Fedora, et cetera. Es sind mehr als 100
Distributionen verfügbar. Die meisten davon dienen einem bestimmten Zweck. Dieser ist zum Beispiel eine optimale Hardware-Unterstützung, eine möglichst einfache Installation oder eine möglichst stabile Software. Mit Distribution ist in diesem Fall gemeint, dass jemand eine große Software-Sammlung zusammengestellt, und die gesamte Software in kleine Pakete unterteilt hat. Anschließend werden diese Pakete als Software-Repository zur Verfügung gestellt. Sie können nun entscheiden, welche Pakete Sie verwenden möchten. Außerdem können Sie zu einem späteren Zeitpunkt beliebig viele. zusätzliche Pakete herunterladen und installieren. Ungenutzte Pakete können wieder deinstalliert werden. Die Distribution bietet Updates an, um - zum Beispiel - Sicherheitsprobleme zu beheben oder um neuere Versionen mit zusätzlichen Funktionen bereit zu stellen.
Das Ergebnis ist ein sehr flexibles und universelles System, welches für nahezu jeden Zweck geeignet ist. Wenn Sie jedoch ein embedded System verwenden möchten, haben Sie, höchstwahrscheinlich, eine spezifische Anwendung im Sinn. In einem solchen Fall bringt eine umfangreiche Distribution jedoch auch diverse Nachteile mit sich:

● Eine Distribution ist hauptsächlich für Desktops gedacht. Das bedeutet Installation, Konfiguration
und die Benutzung verlangen meistens ein Display, beziehungsweise implizieren viele Komponenten zumeist, dass sie auf einer graphischen Benutzeroberfläche (GUI) ausgegeben werden können.

● Dies bedeutet, dass alle Komponenten eine sehr umfangreiche Konfiguration verwenden. Ein Webbrowser unterstützt beispielsweise 3D, Web Assembly, Multimedia und ähnliches, was zu einer ziemlich großen Binärdatei führt. Diese Binärdatei bringt eine Menge Bibliotheken mit sich und damit auch viele zusätzliche Pakete. Selbst wenn Sie wissen, dass Sie 3D nicht benötigen werden, können Sie das 3D-Bibliothekspaket nicht deinstallieren, da man den Browser ohne diese Bibliothek nicht starten kann. Der Paketmanager der Distribution wird daher automatisch das Browser-Paket deinstallieren, wenn Sie die 3D-Bibliothek deinstallieren. Daraus folgt, dass eine Distribution nicht einfach auf ein kleines System reduziert werden kann, das speziell auf Ihre Applikation ausgerichtet ist. Sie müssen eine Menge zusätzlichen Ballast mit sich herumschleppen, der zusätzliche Sicherheitsprobleme verursachen kann, obwohl wenn Sie ihn nie benutzen.

● Distributionen starten oftmals viele Hintergrunddienste, die auf einem embedded System nicht benötigt werden. Dies verlangsamt den Bootvorgang und vergrößert unnötigerweise den RAM-Fußabdruck.

● Eine generische Distribution für ARM unterstützt zuweilen nicht die spezifischen Hardware-Features von spezifischen SoC-Varianten. Sie können demnach wahrscheinlich kein hardware-beschleunigtes Video Decoding oder ähnliches verwenden.

● Distributionen gehen davon aus, dass sie über viel RAM und Speicherplatz verfügen. Um zu gewährleisten, dass eine Distribution auf einem embedded System läuft, müssen Sie Boards mit großem Speicher einsetzen. Das führt bei den Geräten zu hohen Preisen.

● Distributionen setzen Swap Space voraus. Dieser ist auf einem embedded System normalerweise nicht verfügbar.

● Distributionen verlassen sich auf einen initrd, was den Boot-Prozess unnötig komplex macht und
den Bootvorgang zusätzlich verlangsamt.

● Distributionen sind sich nicht bewusst, dass sie wahrscheinlich auf Flash-basierenden
Medien laufen. Sie schreiben folglich beliebig oft in Protokolldateien. Das Verzeichnis /tmp befindet sich nicht auf einer RAM-Disk. Distributionen optimieren die Schreibzyklen nicht und sie kümmern sich nicht um das Wear-Leveling. All dies kann die Lebensdauer eines, auf einem Flash-Speicher basierenden, Gerätes erheblich verkürzen.

● Distributionen nehmen an, dass sie auf ordnungsgemäße Weise heruntergefahren werden. 
Wenn sie ein solches Gerät einfach ausschalten, werden sie Daten verlieren. Das Herunterfahren ohne Datenverlust setzt ein schreibgeschütztes gemountetes Root-Dateisystem voraus, was bei regulären Distributionen nicht möglich ist.

● Distributionen verwenden den regulären Satz von Kommandozeilen-Tools. Diese Tools sind an und für sich relativ klein. Wenn man jedoch Hunderte davon hat, ergibt das eine beträchtliche Menge an Speicherplatz und man erhöht unnötigerweise den Speicherbedarf. Distributionen verwenden keine Busybox.

Unter diesen Gesichtspunkten ist eine Distribution nicht die beste Lösung. Sie ist groß (ein kleines System mit Grafiken ist etwa 1 GB groß), langsam und unterstützt möglicherweise keine SoC-spezifische Hardware Beschleunigung. Aber es gibt andere Build-Environments, die diese Probleme tatsächlich angehen. Zwei davon sind Buildroot und Yocto. Beide sind bei F&S Elektronik Systeme erhältlich.
Die Grundidee dieser Umgebungen besteht darin, dass Sie eine eigene kleine Distribution erstellen, die nur die Pakete enthält, welche Sie wirklich benötigen. Diese Pakete sind zusätzlich so gestaltet, dass keine unnötigen Teile enthalten sind. Dies führt zu sehr kleinen Linux-Systemen. Unser Standard Image mit X11 und einem kleinen Window Manager namens matchbox, sowie gstreamer1 für Multimedia, ALSA für Ton, eine Reihe von Tools für den Zugriff auf CAN, I²C und SPI und einem Picture Viewer ist nur etwa 90 MB groß.
Es gibt Releases für Buildroot und Yocto. So können Sie entscheiden, welchen Weg Sie gehen und welche Version Sie herunterladen möchten.
Wenn Sie ein Linux-Starterkit von F&S kaufen, enthält es standardmäßig die neueste Buildroot-Version.
Eine genaue Beschreibung und Links zu den Buildroot/ Yocto Releases finden Sie unter dem jeweiligen Produkt im Linux Tab.

Mono auf F&S Boards

Mono ist eine Open-Source-Implementierung des .Net-Frameworks, die von Microsoft gesponsert wird. Sie unterstützt derzeit die meisten .NET-Bibliotheken bis zur Version 4.7 mit Ausnahme von WPF, WWF und mit eingeschränktem WCF- und eingeschränktem ASP.NET-Asynchronisations-Stack. Ausführliche Informationen zur Kompatibilität finden Sie auf der offiziellen Website des Mono-Projekts.

Dokumentation Mono auf F&S Boards