GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Packen Sie das Dateisystem-Image von vmlinux.bin (eingebettetes initramfs) neu, ohne es neu zu erstellen?

Ja, es ist möglich, aber das Ändern der .init.ramfs-Abschnittsgröße und -Adressen reicht nicht aus, da die ausführbare ELF-Datei des Kernels statisch mit der virtuellen Adresse von Start und Ende verknüpft ist der initramfs-Sektion.

In den Linux-Quellen befindet sich der entsprechende Code in der Quelldatei iniramfs.c:

void __init populate_rootfs(void)
{
  char *err = unpack_to_rootfs(__initramfs_start, __initramfs_end - __initramfs_start, 0); 
...
}

Daher müssen Sie diese beiden Offsets auch im Maschinencode des Aufrufs der Funktion unpack_to_rootfs() ändern, die sich im Abschnitt .init.text befindet. ( Achten Sie auf relevante Einträge in der Umzugstabelle! ...falls vorhanden )

In Bezug auf die Antwort von Icarus ermöglicht Ihnen die Manipulation der Größe des initramfs-Abschnitts, des Datei-Offsets und der virtuellen Startadresse sowie dieser beiden oben genannten Offsets (Argumente für die Funktion unpack_to_rootfs()) das Hinzufügen Ihrer eigenen benutzerdefinierten GRÖSSER initramfs-Abschnitt, der ÜBER der maximalen virtuellen Adresse der ELF-Datei geladen wird. Das "Memory Size"-Feld des Programm-Headers (PHeader) muss ebenfalls geändert werden, um den größeren initramfs-Abschnitt widerzuspiegeln, der nach dem Ende des alten virtuellen Adressraums angehängt wird.

P.S.Das "Loch" im virtuellen Adressraum des Kernels, das nach dem Verschieben des ursprünglichen init.ramfs-Abschnitts auf eine neue hohe virtuelle Startadresse verbleibt, schadet nichts, da der zugehörige Speicher später durch die definierte free_initmem(void)-Funktion freigegeben wird in der Quelldatei init.c.


Linux
  1. Linux – Enthält der Vmlinux-Header die Länge des Kernel-Images?

  2. Möglichkeit, ein .pdf-Bild von der Befehlszeile aus zu reduzieren?

  3. Ist es möglich, den Linux-Kernel zu booten, ohne ein initrd-Image zu erstellen?

  4. Wie verwenden Sie sips am Terminal, um die Größe eines Bildes ohne Hochskalierung zu ändern?

  5. Ich möchte DPI mit ImageMagick ändern, ohne die tatsächliche Bytegröße der Bilddaten zu ändern

Ändern Sie die Größe eines Bildes über das Linux-Terminal

Was ist ein goldenes Bild?

Microsoft Azure Series – Erstellen einer virtuellen Linux-Maschine aus einem benutzerdefinierten Image

Was ist der Unterschied zwischen den folgenden Kernel-Makefile-Begriffen:vmLinux, vmlinuz, vmlinux.bin, zimage &bzimage?

Zugriff auf einen virtuellen Apache-Host nur aus dem lokalen Netzwerk zulassen

Unmounten des Root-Dateisystems ohne Neustart des Servers