Bootimage / Initrd Rootfilesystem für X86 erzeugen
Hat man ein
EmbeddedRootFilesystem erzeugt muss dieses in eine vom Zielsystem benutzbare Ramdisk umgewandelt werden. Im X86 bereich ist dies üblicherweise ein cpio komprimiertes archiv. Für andere Systeme ist ein mit gzip komprimiertes ext2 Filesystem üblich. Da letzteres auch auf X86 funktioniert, bietet es sich an dies überall einzusetzen
Hat man ein rootfilesystem in Ordner
ROOTFS
erzeugt, so benötigt man noch die Knoten in
ROOTFS/dev
. Um solche knoten zu erzeugen braucht man root-rechte. Um dies zu umgehen werden die Knoten nicht im Host Dateisystem erzeugt sondern aus einer Textdatei ausgelesen und erst beim erzeugen des Images generiert.
Anfang einer
rootfs_devices.tab
. Diese würde neben dem dev Verzeichnis, das device console anlegen.
#<name> <type> <mode> <uid> <gid> <major> <minor> <start> <inc> <count>
/dev d 755 0 0 - - - - -
/dev/console c 640 0 0 5 1 - - -
...
Erzeugen ext2 imagefile. Genext2fs ist im ACC Cluster als Teil des eldk installiert.
user@host$ genext2fs -U \
-d $ROOTFS_DIR \
-D $ROOTFS_DEVICES \
-b $ROOTFS_SIZE \
-N $ROOTFS_INODES \
-m $ROOTFS_RESERVED \
$ROOTFS_IMAGE
Hierbei is ROOTFS_DIR, der Ordner der in der Ramdisk landen soll. ROOTFS_DEVICES ist die Textdatei mit den zu erzeugenden Deviceknoten. ROOTFS_SIZE ist die gewünschte Größe der entpackten Ramdisk in kilobyte (z.B. 8192). ROOTFS_INODES ist die Anzahl der Inodes im Dateisystem (entspricht Anzahl der möglichen Dateien, z.B. 1000). ROOTFS_RESERVED ist der für root reservierte Speicherplatz (0 ist ein guter Wert...). Und erzeugt wird das in der Datei ROOTFS_IMAGE.
Dieses image muss noch mit gzip komprimiert werden, fertig ist die initrd
user@host$gzip $ROOTFS_IMAGE
Für PowerPC muss das so erzeugte Image noch
weiter verarbeitet werden.
Wie man dieses Image übers Netz bootet beschreibt
EmbeddedBootPXE.