Oui, c'est possible mais changer la taille et les adresses de la section .init.ramfs ne suffit pas car l'exécutable ELF du noyau est lié statiquement à l'adresse virtuelle du début et de la fin de la section initramfs.
Dans les sources Linux, le code correspondant se trouve dans le fichier source iniramfs.c :
void __init populate_rootfs(void)
{
char *err = unpack_to_rootfs(__initramfs_start, __initramfs_end - __initramfs_start, 0);
...
}
Vous devez donc également modifier ces deux décalages dans le code machine de l'invocation de la fonction unpack_to_rootfs(), qui se trouve dans la section .init.text. (faites attention aux entrées pertinentes dans la table de relocalisation ! ... s'il en existe une)
De plus, en référence à la réponse d'Icarus, la manipulation de la taille de la section initramfs, du décalage de fichier et de l'adresse virtuelle de départ, ainsi que de ces deux décalages susmentionnés (arguments de la fonction unpack_to_rootfs()), vous permet d'ajouter votre propre
P.S.Le "trou" dans l'espace d'adressage virtuel du noyau restant après le déplacement de la section init.ramfs d'origine vers une nouvelle adresse virtuelle de départ élevée, ne nuit en rien car la mémoire associée est ensuite libérée par la fonction free_initmem(void) définie dans le fichier source init.c.