GNU/Linux >> Znalost Linux >  >> Linux

Znovu zabalit obraz souborového systému z vmlinux.bin (vložený initramfs) bez opětovného sestavení?

Ano, je to možné, ale změna velikosti a adres sekce .init.ramfs nestačí, protože spustitelný soubor ELF jádra je staticky propojen s virtuální adresou začátku a konce sekce initramfs.

Ve zdrojích Linuxu je příslušný kód umístěn ve zdrojovém souboru iniramfs.c:

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

Musíte tedy také změnit tyto dva offsety ve strojovém kódu vyvolání funkce unpack_to_rootfs(), která se nachází v sekci .init.text. (pozor na všechny relevantní položky v tabulce přemístění! ...pokud nějaká existuje)

Také, s odkazem na Icarusovu odpověď, manipulace s velikostí sekce initramfs, offsetem souboru a počáteční virtuální adresou, stejně jako tyto dva výše uvedené offsety (argumenty k funkci unpack_to_rootfs()), vám umožní přidat vlastní VĚTŠÍ sekce initramfs, která se načítá NAD maximální virtuální adresu souboru ELF. Pole "Velikost paměti" v záhlaví programu (PHeader) je také nutné upravit, aby odráželo větší sekci initramfs připojenou za konec starého virtuálního adresového prostoru.

P.S."Díra" ve virtuálním adresovém prostoru jádra, která zůstala po přesunutí původní sekce init.ramfs na novou vysokou počáteční virtuální adresu, nic nezkazí, protože související paměť je později uvolněna funkcí free_initmem(void) definovanou ve zdrojovém souboru init.c.


Linux
  1. Linux – Obsahuje hlavička Vmlinux délku obrazu jádra?

  2. Jak extrahovat pouze surový obsah sekce ELF?

  3. Jak odstranit X bajtů z konce velkého souboru bez přečtení celého souboru?

  1. Rozdíl mezi initrd a initramfs?

  2. Chci změnit DPI pomocí ImageMagick bez změny skutečné velikosti bajtů obrazových dat

  3. Co je to souborový systém NSFS?

  1. Jak zploštit obrázek .pdf z příkazového řádku?

  2. Je možné zavést linuxové jádro bez vytvoření obrazu initrd?

  3. Neočekávané oprávnění exec od mmap při zahrnutí souborů sestavy do projektu