Forum: PC-Programmierung Linux-Kernel mit bash kompilieren


von Pascal (Gast)


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?

von Schlaubischlumpf (Gast)


Lesenswert?

Nenne deine bash einfach init.

Die wird dann mit PID 1 gestartet...

von nocheinGast (Gast)


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:
1
~> readelf -a /bin/bash | grep "Req"
2
      [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.

von Rolf M. (rmagnus)


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
von Pascal (Gast)


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?

von nocheinGast (Gast)


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/

von Pascal (Gast)


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.

von Gerhard (Gast)


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?

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.