Auf original /boot/initrd.img- kernel_ver binwalk
wird diese Struktur angezeigt :
Von 0 bis 22528 Bytes gibt es ein CPIO-Archiv, das nur die Firmware GenuineIntel.bin in einer bestimmten Ordnerhierarchie enthält.
Ab 22528 Bytes gibt es gzip archiwe enthält das entsprechende Dateisystem und dieses gzip wird auch mit CPIO archiviert
Wie kann ich nach dem Entpacken und Ändern initrd.img auf dieselbe Weise komprimieren (mit derselben Ordnerhierarchie)? wie diese ursprüngliche Struktur:
Nach Vorschlag aus Kommentar:
find . | cpio --quiet --dereference -o -H newc | lzma -7 > ../cusotm.initrd.lz
binwalk
::
Dies ist eine völlig andere Struktur.
find . | cpio --quiet --dereference -o -H newc | lzma -7 > ../cusotm.initrd.lz
Wenn diese Prozedur nicht funktioniert, klären Sie, welche Befehle Sie ausgeführt haben und welche nicht.Antworten:
Ich habe herausgefunden, wie man genau das gleiche
initrd.img
Archiv erstellt.Die Antwort von Bodhi.zazen wird wahrscheinlich funktionieren, da dies eine allgemein bekannte Lösung ist:
aber die Frage war anders. Diese Antwort wäre gut, wenn es im cpio-Archiv ein komprimiertes Dateisystem gibt, aber in dieser Situation gibt es auch Intel-Firmware in einer bestimmten Ordnerstruktur, die ich behalten möchte.
Um die gleiche Ordnerhierarchie beizubehalten, sind drei Schritte erforderlich:
quelle
find . | cpio -o | gzip -9 >> new_initrd.img
cpio -id < initrd.img-kernel_ver
;dd if=initrd.img-4.4.0-22-generic of=image.gz bs=22528 skip=1
- Passen Sie Ihren initrd.img-Dateinamen und die Blockgröße an.gunzip image.gz
;;cpio -i < image
Sie verpacken mit
Mit dem zweiten Befehl wird die initrd umbenannt. Sie geben die initrd an, die beim Booten in grub verwendet werden soll.
Ich schlage vor, dass Sie die benutzerdefinierte initrd testen (booten), bevor Sie sie verschieben oder umbenennen.
Zusätzliche Informationen aus der Diskussion in den Kommentaren:
Erstens glaube ich nicht, dass Sie die Rolle von cpio / tar verstehen. Sowohl cpio als auch tar nehmen eine Reihe von Dateien und / oder Verzeichnissen und machen sie zu einer Datei oder einem Archiv.
Zweitens glaube ich nicht, dass Sie die Rolle der Komprimierung verstehen. Durch die Komprimierung wird das resultierende Archiv einfach kleiner. Sie können jedes gewünschte Werkzeug für die Komprimierung verwenden.
Sehen
https://wiki.ubuntu.com/CustomizeLiveInitrd
https://wiki.gentoo.org/wiki/Initramfs/Guide
Drittens verwendet der Linux-Kernel eher cipo als tar.
Sehen
https://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt
Siehe "Warum CPIO statt Teer?" Sektion
quelle
Ich bin kürzlich auf dieselbe Frage gestoßen, und meine Websuche hat mich zu diesem Thread geführt. Falls dies anderen hilft, in diese Fußstapfen zu treten, finden Sie hier eine Antwort auf eine alte Frage aus dem Jahr 2018 ...
Es scheint, dass in "aktuellen" Kerneln die Datei initrd.img ein unkomprimiertes cpio-Archiv enthalten kann (dh Mikrocode-Aktualisierungen enthält), das dem (komprimierten) cpio-Archiv vorangestellt ist, das den normalen initramfs-Verzeichnisbaum enthält.
Dies wird auf der Debian-Wiki-Seite kurz erläutert:
https://wiki.debian.org/initramfs#How_to_inspect_initramfs
. Genaueren Code zum Parsen dieser Art von initrd.img-Datei finden Sie jedoch in der
splitinitramfs()
Funktion innerhalb desunmkinitramfs
Befehls in derinitramfs-tools-core
Paket (z . B. https://git.launchpad.net/ubuntu/+source/initramfs-tools/tree/unmkinitramfs ).Ich habe nicht versucht, diese Art von initrd.img-Datei selbst neu zu erstellen, aber basierend auf dieser Wiki-Seite scheint es, dass man das GenuineIntel-Archiv überhaupt nicht entpacken möchte, um die Boot-Skripte von initramfs zu bearbeiten. Stattdessen können Sie das cpio-Archiv einfach so wie es ist irgendwo separat aufbewahren, dann das zweite (komprimierte) Archiv entpacken, den Verzeichnisbaum ändern und das komprimierte cpio-Archiv neu erstellen und dann das gespeicherte Mikrocode-Archiv mit dem neu generierten verketten.
(Der Code, der ursprünglich dieses "vorangestellte" Archiv generiert hat, befindet sich in
/usr/share/initramfs-tools/hooks/intel_microcode
.)quelle
in Ubuntu
initrd.img
ist das in gzip komprimiert, ich möchte dies beim Bearbeiten beibehalten. das ist wie:Extrakt:
komprimieren:
quelle