mikrocontroller.net

Forum: PC-Programmierung Linux-Kernel mit bash kompilieren


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Pascal (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

bei Recherchen im Internet findet sich immer nur "How to compile Linux 
kernel".

Ich hingegen würde gerne außer dem Linux-Kernel, den ich bereits 
kompiliert habe, und dem isolinux bootloader und Hello World! init.c 
noch alles notwendige hinzufügen, um z.B. bash erstmal zum laufen zu 
bekommen.

Also eine textbasierte Shell, eigentlich egal ob bash, dash, bsh, zsh, 
csh, ksh, mksh, lksh,...

Welche Dateien sind dafür notwendig, dem kompilierten Kernel vor dem 
Erstellen des iso Image hinzuzufügen, damit diese Shell auch läuft?

Danke im Voraus
Pascal

P.S. ich kenne mich bisher nicht besonders gut aus, versuche aber durch 
die praktische Erfahrung deutlich mehr zu lernen als Bücher dazu zu 
lesen. War nicht "binutils" an dieser Stelle wichtig?

Autor: Schlaubischlumpf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nenne deine bash einfach init.

Die wird dann mit PID 1 gestartet...

Autor: nocheinGast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im Wesentlichen brauchst du außer dem Kernel nur ein statisch gelinktes 
Programm, das heißt, ein Programm, das von keinen Bibliotheken abhängt. 
Dieses Programm packst du die initial ramdisk, und übergibst beim Booten 
dem Kernel "init=/bash" als Parameter.
Irgendwie kriegt man sicher eine statische Variante der bash o. ä. 
kompiliert. Prüfen kannst du das, indem du Folgendes machst:
~> readelf -a /bin/bash | grep "Req"
      [Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
Wenn die Ausgabe nicht leer ist, weißt du, dass zur Laufzeit noch 
Bibliotheken nachgeladen werden müssen.

Autor: Rolf M. (rmagnus)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Die Shell alleine bringt einem ggf. nicht viel, da man noch einen ganzen 
Stall voll Kommandozeilen-Tools braucht, damit man in der Shell auch was 
tun kann. Die core utilites wird man mindestens auch noch brauchen.
Am einfachsten dürfte da Busybox sein. Da ist das wichtigste schon 
dabei, und es ist alles in ein einziges Executable eingebaut, das auch 
statisch gelinkt werden kann. Es ist genau dafür gemacht, sich ein 
minimalistisches Linux-System zu bauen.
In manchen Distros wird eine Busybox schon mit in die initrd gepackt. 
Auf die Weise hat man ein bedienbares System selbst dann, wenn der 
Kernel es nicht schafft, sein root-Filesystem zu mounten.

: Bearbeitet durch User
Autor: Pascal (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke!
Das heißt, die einfachste Methode, um eine Shell dem Kernel 
hinzuzufügen, und auch nutzbare Funktionen zu haben, ist es, busybox 
statisch gelinkt zu kompilieren und als init auszuführen?

Autor: nocheinGast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja. Wobei das dann immer noch sehr minimalistisch ist und nicht 
ausreicht, damit das System sich selbst reproduzieren kann. Das hier 
kennst du?
http://linuxfromscratch.org/lfs/view/development/

Autor: Pascal (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, kenne ich. Dauert aber sehr lange, bis man was fertig hat. Mit der 
iso funktioniert das eine mit den bashprofilen nicht. Ansonsten ganz ok. 
Aber minimalistisch reicht mir ja. Muss nur beim Starten ein Skript 
ausführen, und dann direkt neustarten. Für das Skript brauche ich eben 
eine Shell.

Autor: Gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Irgendwie musst du es noch schaffen, die ganzen virtuellen Dateisysteme 
einzuhängen, die busybox zum Arbeiten braucht. Sonst scheitert es schon 
daran, /dev/console für die Ausgabe zu finden. Oder kann das 
mittlerweile der Kernel ganz alleine?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.