GNU/Linux >> Tutoriales Linux >  >> Linux

¿Reempaquetar la imagen del sistema de archivos de vmlinux.bin (initramfs integrado) sin reconstruir?

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 MÁS GRANDE sección initramfs que se carga POR ENCIMA de la dirección virtual máxima del archivo ELF. El campo "Tamaño de la memoria" del encabezado del programa (PHeader) también debe modificarse para reflejar la sección initramfs más grande que se agrega después del final del antiguo espacio de direcciones virtuales.

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.


Linux
  1. ¿Forma de aplanar una imagen .pdf desde la línea de comandos?

  2. ¿Es posible arrancar el kernel de Linux sin crear una imagen initrd?

  3. Quiero cambiar DPI con ImageMagick sin cambiar el tamaño de byte real de los datos de la imagen

  4. ¿Cuál es la diferencia entre los siguientes términos del Kernel Makefile:vmLinux, vmlinuz, vmlinux.bin, zimage y bzimage?

  5. ¿Qué es el sistema de archivos NSFS?

Cambiar el tamaño de una imagen desde la terminal de Linux

¿Qué es una imagen dorada?

Serie Microsoft Azure:creación de una máquina virtual Linux a partir de una imagen personalizada

cambiar el formato del sistema de archivos de xfs a ext4 sin perder datos

Permitir el acceso a un servidor virtual Apache solo desde la red local

Desmontar el sistema de archivos raíz sin reiniciar el servidor