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
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.
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)?
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!
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.
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.htmlhttps://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
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.
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.
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
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
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.
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.
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.