Forum: Mikrocontroller und Digitale Elektronik Buchempfehlung Buildroot / Yocto / Uboot / Busybox


von Billiglohnland (Gast)


Lesenswert?

Könnt ihr zu den genannten Stichworten gute Bücher empfehlen?

Ich merke gerade, dass das Thema Embedded Linux eine ganz andere Welt 
ist als µC ohne bzw. mit einfachem Betriebssystem (RTOS) und man sich 
das nicht ganz so einfach via "Learning by Doing" beibringen kann.

Grüße

von Stefan F. (Gast)


Lesenswert?

Busybox ist nur eine Eingabeaufforderung die ohne weitere Dateien 
auskommt. Das kannst du mit der command.com von DOS vergleichen, falls 
du sie kennst.

Im Gegenzug dazu verwenden normale Linux Systeme (auch Raspberry Pi) 
eine Bash Shell. Diese enthält nur wenige integrierte Befehle, die 
meisten Befehle werden als separates Programm nachgeladen.

Ich denke dass du Linux am Besten Kennenlernen kannst, indem du ein 
normales Linux benutzt. Das kann gerne auch in Form eines Raspberry Pi 
passieren, oder eine Virtuelle Maschine innerhalb von Windows mit Oracle 
VirtualBox oder dem Windows Subsystem für Linux (VirtualBox ist die 
einfachste Option).

Bei Linux wird immer zuerst ein Bootloader gestartet. Seine Aufgabe ist, 
den Kernel in den Speicher zu laden und zu starten. Die Datei die den 
Kernel enthält heißt typischerweise vmlinuz.

Wenn der Kernel von dynamischen Modulen abhängt, die schon zum Start 
gebraucht werden, dann gibt es noch eine zweite Datei namens initrd, die 
der Bootload ebenfalls in den Speicher laden muss. Bei einem PC findet 
man darin zum Beispiel die Treiber für den Mainboard-Chipsatz und die 
Festplatte (bzw. SSD). Man kann Kernel-Module aber auch statisch linken, 
dann befinden sie sich in der Datei vmlinuz. Da diese nicht beliebig 
groß werden darf, hat man das irgendwann mal auf zwei Dateien 
aufgeteilt.

Beim Start öffnet der Kernel das "root" Dateisystem von einem 
Speichermedium. Alle dazu nötigen Treiber müssen entweder statisch im 
Kernel enthalten sein, oder in der initrd. Alle weiteren Treiber, die 
jetzt noch nicht gebraucht werden, können im root Dateisystem liegen. 
Zum Beispiel Grafiktreiber.

Das erste Programm das der Kerne immer automatisch startet ist 
"/sbin/init". Interessanterweise muss das nicht zwingend ein 
ausführbares Programm sein, sondern es kann auch ein Shell Script sein. 
Dann muss der entsprechende Script-Interpreter allerdings auch im root 
Dateisystem liegen. Die erste Zeile im init Script gibt den Pfad des 
Interpreters an.

Alles was danach passiert bestimmt das init Programm bzw. Script.

Detaillierte Doku zu diesen Vorgängen findest du am besten auf den 
Webseiten von SuSE und Arch Linux.

von Alexander S. (alesi)


Lesenswert?

Hallo,

kein Buch und nicht mehr aktuell, aber es gibt die Ausgaben vom 
embedded-projects.net Journal noch als pdf zum download:

http://journal.embedded-projects.net/downloads/EPJ_01_web.pdf
http://journal.embedded-projects.net/downloads/EPJ_02_web.pdf
...
http://journal.embedded-projects.net/downloads/EPJ_25_web.pdf

Die Seite http://journal.embedded-projects.net/ ist abgeschaltet und auf 
http://journal.embedded-projects.net/downloads/ gibt es keinen Zugriff, 
aber man kann sich die pdfs einzeln anschauen bzw. herunterladen oder 
das auch mit wget automatisieren.

von Billiglohnland (Gast)


Lesenswert?

Ich kann mit deiner Antwort ehrlich gesagt nicht so viel anfangen 
(trotzdem danke).

Worum es mir vor allem geht:

1) Wie modifiziere ich Uboot so, dass es auf neuer Hardware läuft für 
die es kein bereits fertiges Uboot gibt (DRAM-Initialisierung, 
Flash-Initialisierung, serielle Konsole, Display Initialisierung)?
2) Wie erstelle ich mit Buildroot / Yocto eine lightweight 
Linux-Umgebung?
3) Wie bekomme ich ein möglichst schnelles Entwicklungssystem (schnell 
im Sinne von automatisiert) bei dem ich meine Anwendungen einfach auf 
das Linux-System übertragen und ausführen ggf. debuggen kann (sofern ich 
diese Cross-kompilieren muss / möchte)?

von Billiglohnland (Gast)


Lesenswert?

Danke Alex, das sieht auf den 1. Blick schon mal sehr interessant aus.

von sascha (Gast)


Lesenswert?

Hast Du denn schon eine Hardware im Auge? Die Yocto-Lernkurve ist 
ziemlich steil, aber im Prinzip wäre es günstig die Grundlagen (aus 
welchen Teilen besteht Dein embedded System: kernel, devicetree, rootfs, 
bootloader) zu verstehen.
Wie Du richtig schon bemerkt hast, ist Yocto dazu da um dir diese Teile 
zu "bauen" d.h. auf einem Host-System kompilierst Du die Programme / den 
Code, der dann auf der Hardware laufen soll. Dann brauchst Du halt noch 
die Art, wie Du das Paket auf Dein Board bekommst (SD-Karte? Nand?)
Vielleicht ist es eine gute Idee, Dir ausgehend von der Hardware ein 
Buildsystem aufzubauen. In Yocto gibt es poky - eine 
Beispieldistribution und wenn Du Glück hast dann liefert der Hersteller 
Deines Boards gleich noch Doku und Layer für Yocto mit, unter Nutzung 
derer Du gleich starten kannst.
Buch .. naja ich finde die Yocto-Doku ( 
https://www.yoctoproject.org/docs/current/mega-manual/mega-manual.html ) 
immer hilfreich. Ich hatte mir damals das Buch hier geholt: "Embedded 
Linux Systems with the Yocto Project " von Rudolf J. Streif
Viel Erfolg ... und lass' Dich nicht entmutigen!

von Billiglohnland (Gast)


Lesenswert?

Danke Sascha.

Geht um ein STM32MP1 Dev-Board. Ich habs geschafft, das Board mit einem 
fertigen Image von STM zu booten aber beim selbstkompilierten mit einer 
buildroot-Vorlage aus dem Internet bricht der Bootprozess irgendwann ab.

Generell würd ich mehr über Uboot verstehen wollen aber ich weiß nicht, 
wo man da ansetzt.

von Pinguin (Gast)


Lesenswert?


von sascha (Gast)


Lesenswert?

Naja, ich weiß nicht, ob es Dir hilft ... oder ob das für Dich eine 
Motivation ist... aber: BLEIB' DRAN!

Der erste Schritt mit Dev-Board und fertigem Image hat geklappt. Der 
nächste Versuch mit Buildroot schlug fehl. Entscheide nun: Bleibst Du 
auf dem Weg oder suchst Du vielleicht nach Alternativen? Du kannst genau 
herausfinden, an welcher Stelle der Bootvorgang abgebrochen ist. Und 
dann weiterhangeln... was die Ursache sein könnte...

Ich habe mit dem Board noch nichts gemacht, aber schnell ein paar Links 
gefunden, hast Du die schon gesehen?

https://st-onlinetraining.s3.amazonaws.com/STM32MP1-Ecosystem-OpenSTLinux_Distribution/index.html
https://wiki.st.com/stm32mpu/wiki/STM32MP1_Distribution_Package

Wow: Schau mal hier: 
https://bootlin.com/blog/yocto-project-training-course-available-on-stm32mp1-platform/ 
dort gibt es richtig Futter (PDF: slides, labs genau mit dem Board) - 
das würde ich als geeignet sehen, um einen Fuß in die Tür zu bekommen...

Also wenn Dich das Thema wirklich interessiert, kann ich Dir nur 
empfehlen, hartnäckig dran zu bleiben. Der Einstieg ist nicht so leicht 
wie "Arduino-IDE installieren und LED blinken lassen" - aber es warten 
viele spannende Konzepte und Möglichkeiten auf Dich...

Viele Grüße,
Sascha

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Stefan ⛄ F. schrieb:
> Busybox ist nur eine Eingabeaufforderung die ohne weitere Dateien
> auskommt. Das kannst du mit der command.com von DOS vergleichen, falls
> du sie kennst.

Naja, Busybox ist schon ein wenig mehr. Man kann Shell Befehle wie z.B. 
cd, mkdir, pwd, chmod, und so gut wie alle andere Befehle, die für ein 
Embedded Linux nützlich sein können, in busybox rein kompilieren und hat 
dann ein Binary mit vielen eingebauten Befehlen. Ein korrektes build 
baut symlinks und stellt damit auf der Shell die kompilierten Befehle 
bereit. Da busybox dabei viele Sachen mehrfach benutzen kann, spart es 
jede Menge Overhead ein und man hat nur ein kompaktes Binary.

von No Y. (noy)


Lesenswert?

Ggf findest du mir etwas suchen die Trainingsunterlagen zu den 
Seminaren/Workshops von Robert Berger.

von Stefan F. (Gast)


Lesenswert?

Matthias S. schrieb:
> Naja, Busybox ist schon ein wenig mehr
> ... und hat dann ein Binary mit vielen eingebauten Befehlen

Habe ich das nicht geschrieben? Zumindest war es meine Absicht, genau 
dieses besondere Merkmal hervor zu heben.

von Daniel F. (foxi_the_daywalker)


Lesenswert?

Hi,

ich habe die Bücher "Embedded Linux Systems with Yocto Project" Rudolf 
J. Streif und "Embedded Linux Development Using Yocto Project Cookbook" 
von Alex González auf dem Schreibtisch liegen.

Yocto ist schon nicht so ohne.

Viel Erfolg!

Daniel

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Billiglohnland schrieb:
> 1) Wie modifiziere ich Uboot so, dass es auf neuer Hardware läuft für
> die es kein bereits fertiges Uboot gibt (DRAM-Initialisierung,
> Flash-Initialisierung, serielle Konsole, Display Initialisierung)?

Indem du die Infos aus dem Datenblatt deines neuen Prozessors und ueber 
den Aufbau deiner neuen Hardware sinnvoll in die uboot sourcen 
reinbaust...Sinnvollerweise faengst du mit einer HW an, die schon im 
uboot existiert und kuemmerst dich dann um die Unterschiede, die deine 
HW gegenueber der im uboot existierenden HW hat.

> 2) Wie erstelle ich mit Buildroot / Yocto eine lightweight
> Linux-Umgebung?
Keine Ahnung, das ist eben jeweils spezifisch fuer's Buildsystem - ich 
bin kein grosser Fan von all diesen "ich mach dir alles klar mit einem 
Haufen scripten" und "hinten faellt ein Image-mit-alles-und-scharf 
raus"-Buildsystemen.
Meine Erfahrung ist: Wenn nicht alles 100% genau so passt, wie der 
Buildsystementwickler es sich ausgedacht hat, dann bleibt der Kack 
irgendwo mit irgendeiner eigenartigen Meldung stecken und das wars dann 
erstmal. Dann  verzettelt man sich im nachvollziehen was da wohl 
passiert sein koennte...
Ich persoenlich bin eher ein Fan von LFS/BLFS und dem darin vermittelten 
Wissen, aus was fuer Brocken man sich ein GNU/Linux System selber 
zusammenstricken kann.

> 3) Wie bekomme ich ein möglichst schnelles Entwicklungssystem (schnell
> im Sinne von automatisiert) bei dem ich meine Anwendungen einfach auf
> das Linux-System übertragen und ausführen ggf. debuggen kann (sofern ich
> diese Cross-kompilieren muss / möchte)?
Ich arbeite gerne mit einem NFS-Server auf dem EntwicklungsPC. Das 
Target kann dann per nfs mount auf Zeugs vom PC zugreifen; z.b. direkt 
frische auf dem PC crosscompilierte binaries ausfuehren.
Dazu muss auf dem Target halt schonmal ein Kernel+Busybox laufen. 
Netzwerk kann auch nicht schaden. Ich hab' aber auch schon vor Jahren 
nfs mounts via serieller Schnittstelle (ppp auf beiden Seiten) so 
genutzt. Ist halt nix fuer eilige Zeitgenossen, aber deutlich besser als 
nix.

Gruss
WK

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Stefan ⛄ F. schrieb:
> Zumindest war es meine Absicht, genau
> dieses besondere Merkmal hervor zu heben.

Du hast es mit command.com verglichen, und das ist im Gegensatz zu 
busybox ja strohdumm. Das hat keine Befehle eingebaut, sondern kann nur 
externe Befehle aufrufen, denn es ist ja nur die 'Shell' von DOS 
gewesen. Das schöne bei busybox ist ja, das du z.B. auch eine Shell drin 
haben kannst und dazu alle Befehle, die man so braucht, auch die, um das 
FS im RAM zu bauen und die Struktur. (expand, mkdir, cp, etc.)
Deswegen kann ein unvollständiges busybox durchaus verhindern, das so 
ein Embedded Linux richtig startet und ein lauffähiges System aufbaut.

Ich habe das meiste damals durch den uCSimm und die mitgelieferte CD 
gelernt.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Matthias S. schrieb:
> Das hat keine Befehle eingebaut, sondern kann nur
> externe Befehle aufrufen, denn es ist ja nur die 'Shell' von DOS
> gewesen.

Vielleicht irre ich mich, aber die command.com enthält nach meiner 
Erinnerung eine ganze Menge Befehle.

"Die folgenden MS-DOS-Befehle sind in COMMAND integriert:

Break  Echo  Rem
Call  Exit  Rename (Ren)
Chcp  For  Rmdir (Rd)
Chdir (Cd)  Goto  Set
Cls  If  Shift
Copy  Loadhigh (Lh)  Time
Ctty  Mkdir (Md)  Type
Date  Path  Ver
Del (Erase)  Pause  Verfiy
Dir  Prompt  Vol"

https://www.i8086.de/dos-befehle/command.html

Ich hoffe, diese Liste stimmt.

von Nochmal (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Vielleicht irre ich mich, aber die command.com enthält nach meiner
> Erinnerung eine ganze Menge Befehle.

Ja, DOS kennt interne und externe Befehle.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Ja, da hast du recht. Ist einfach zu lange her.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.