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.