Ich versuche etwas über initrd zu lernen. Ich habe dieses Tutorial befolgt , um meine eigene Initrd von Grund auf neu zu erstellen, und ich habe Busybox darauf installiert. Dann habe ich mit isolinux eine .iso daraus gemacht, damit ich sie in virtualbox testen kann. Es funktioniert super!
Ich habe die grundlegenden Befehle von Busybox, also wollte ich ein Dateisystem mounten. Das Verzeichnis / dev ist jedoch fast leer (kein sda), mit Ausnahme einiger Dateien, die ich im Anschluss an das Lernprogramm erstellt habe. Ich habe etwas über udev gelernt und ich denke, das ist was ich brauche. Ich bin mir jedoch nicht sicher, wie ich das anstellen soll.
Sollte ich einfach den neuesten Quellcode von udev holen, ihn kompilieren und zu meiner initrd hinzufügen? Und dann / bin / udev oder so etwas in meinem Init-Skript aufrufen? Oder gibt es eine andere / bessere Möglichkeit, das Verzeichnis / dev zu füllen?
Bearbeiten: Einige zusätzliche Informationen und Updates zu dem, was ich bereits getan habe.
- Ich teste alles in einer virtuellen Box. Ich habe gerade ubuntu minimal in der virtuellen Box installiert, eine ISO-Datei von meinem initrd erstellt und dann von der ISO in der virtuellen Box gestartet.
- Ich habe die vmlinuz verwendet
/lib/modules
, die auf einer debian-businesscard.iso vorhanden waren, und diese auf meine initrd kopiert, die ich erstellt habe, indem ich dem zuvor verlinkten Tutorial gefolgt bin. - Kernel hat
CONFIG_DEVTMPFS=y
- Einige Geräte werden in
/dev
tty0-tty63 und andere angezeigt, aber kein sda / hda. - Lief
lspci -k
in meinem aktuell laufenden Betriebssystem und in einer virtuellen Box, um zu überprüfen, welche Module verwendet werden.SATA Controller
sagt, es wirdahci
als Modul verwendet. - Wenn ich ausführen
modprobe -v ahci
es viel über „unbekanntes Symbol: ata_some_stuff“ beklagt, aber danach ist es wieder so etwas wieSCSI Subsystem initialized
,ATA-6: VBOX HARDDISK
undDirect-Access ATA VBOX HARDDISK
. Es wurden jedoch noch keine Festplattengeräte in gefunden/dev
.
Mein aktuelles /init/
Skript lautet wie folgt:
#!/bin/ash
mount -t devtmpfs none /dev
mount -t proc /proc /proc
mount -t sysfs none /sys
modprobe -v ahci
echo "Hello world"
exec /bin/ash --login
Hat jemand eine Idee, was ich falsch mache und was ich stattdessen tun sollte?