GNU/Linux >> Tutoriels Linux >  >> Linux

Remballer l'image du système de fichiers à partir de vmlinux.bin (initramfs intégré) sans reconstruire ?

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 PLUS section initramfs qui est chargée AU-DESSUS de l'adresse virtuelle maximale du fichier ELF. Le champ "Taille de la mémoire" de l'en-tête de programme (PHeader) doit également être modifié, afin de refléter la plus grande section initramfs ajoutée après la fin de l'ancien espace d'adressage virtuel.

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.


Linux
  1. Comment extraire uniquement le contenu brut d'une section ELF ?

  2. Comment supprimer X octets à la fin d'un gros fichier sans lire tout le fichier ?

  3. La différence entre initrd et initramfs ?

  4. Comment utiliser les gorgées au terminal pour redimensionner une image, sans upscaling ?

  5. Je souhaite modifier le DPI avec ImageMagick sans modifier la taille réelle en octets des données d'image

Redimensionner une image depuis le terminal Linux

Qu'est-ce qu'une image dorée ?

Microsoft Azure Series - Création d'une machine virtuelle Linux à partir d'une image personnalisée

Quelle est la différence entre les termes Makefile du noyau suivants :vmLinux, vmlinuz, vmlinux.bin, zimage &bzimage ?

Qu'est-ce que le système de fichiers NSFS ?

Autoriser l'accès à un hôte virtuel Apache à partir du réseau local uniquement