GNU/Linux >> Linux Esercitazione >  >> Linux

Reimballare l'immagine del filesystem da vmlinux.bin (initramfs incorporato) senza ricostruire?

Sì, è possibile ma cambiare la dimensione e gli indirizzi della sezione .init.ramfs non è sufficiente perché l'eseguibile ELF del kernel è staticamente collegato con l'indirizzo virtuale di inizio e fine della sezione initramfs.

Nei sorgenti Linux il relativo codice si trova nel file sorgente iniramfs.c:

void __init populate_rootfs(void)
{
  char *err = unpack_to_rootfs(__initramfs_start, __initramfs_end - __initramfs_start, 0); 
...
}

Quindi è necessario modificare anche questi due offset nel codice macchina dell'invocazione della funzione unpack_to_rootfs(), che si trova nella sezione .init.text. (fai attenzione a eventuali voci rilevanti nella tabella di ricollocazione! ...se ne esiste una)

Inoltre, in riferimento alla risposta di Icarus, la manipolazione della dimensione della sezione initramfs, dell'offset del file e dell'indirizzo virtuale iniziale, oltre a questi due offset sopra menzionati (argomenti della funzione unpack_to_rootfs()), consente di aggiungere il proprio PIÙ GRANDE initramfs che viene caricata SOPRA l'indirizzo virtuale massimo del file ELF. Anche il campo "Memory Size" dell'intestazione del programma (PHeader) deve essere modificato, in modo da riflettere la sezione initramfs più grande aggiunta dopo la fine del vecchio spazio degli indirizzi virtuali.

P.S.Il "buco" nello spazio degli indirizzi virtuali del kernel rimanente dopo aver spostato la sezione init.ramfs originale in un nuovo indirizzo virtuale iniziale alto, non danneggia nulla perché la memoria associata viene successivamente liberata dalla funzione free_initmem(void) definita nel file sorgente init.c.


Linux
  1. Come estrarre solo i contenuti grezzi di una sezione ELF?

  2. Come rimuovere X byte dalla fine di un file di grandi dimensioni senza leggere l'intero file?

  3. La differenza tra initrd e initramfs?

  4. Voglio cambiare DPI con ImageMagick senza modificare la dimensione effettiva in byte dei dati dell'immagine

  5. Come estrarre il nome del file senza l'estensione da un percorso completo?

Ridimensiona un'immagine dal terminale Linux

Cos'è un'immagine d'oro?

Serie Microsoft Azure - Creazione di una macchina virtuale Linux da un'immagine personalizzata

Cos'è il file system NSFS?

Consentire l'accesso a un host virtuale Apache solo dalla rete locale

Smontaggio del filesystem root senza riavviare il server