Sí, es posible, pero cambiar el tamaño y las direcciones de la sección .init.ramfs no es suficiente porque el ejecutable ELF del Kernel está vinculado estáticamente con la dirección virtual del inicio y final. de la sección de initramfs.
En las fuentes de Linux, el código relevante se encuentra en el archivo fuente iniramfs.c:
void __init populate_rootfs(void)
{
char *err = unpack_to_rootfs(__initramfs_start, __initramfs_end - __initramfs_start, 0);
...
}
Por lo tanto, también debe cambiar estos dos desplazamientos en el código de máquina de la invocación de la función unpack_to_rootfs(), que se encuentra en la sección .init.text. (¡cuidado con las entradas relevantes en la tabla de reubicación! ... si existe)
Además, en referencia a la respuesta de Icarus, la manipulación del tamaño de la sección de initramfs, el desplazamiento del archivo y la dirección virtual inicial, así como estos dos desplazamientos antes mencionados (argumentos de la función unpack_to_rootfs()), le permite agregar su propio
P.D.El "agujero" en el espacio de direcciones virtuales del Kernel que queda después de mover la sección init.ramfs original a una nueva dirección virtual de inicio alta, no daña nada porque la memoria asociada se libera más tarde mediante la función free_initmem(void) definida en el archivo fuente init.c.