GNU/Linux >> Linux Esercitazione >  >> Linux

È possibile avviare il kernel Linux senza creare un'immagine initrd?

initrd/initramfs è facoltativo e non obbligatorio. bzImage è la pura immagine del kernel e può essere avviato direttamente dal bootloader. Tuttavia potrebbe essere necessario eseguire alcune attività (caricamento dei moduli del filesystem, driver per l'accesso al disco, montaggio del filesystem di root da alcuni supporti intercambiabili senza nome/percorso fisso, ecc.) che normalmente richiederebbero l'accesso a un filesystem e agli strumenti dello spazio utente.

Questo è ciò che initramfs è per:è un archivio CPIO che viene collegato all'immagine del kernel (l'immagine del kernel è il contenitore per initramfs non viceversa) nell'immagine del kernel stessa o dal bootloader al momento dell'avvio.

Quell'archivio CPIO contiene un rootfs iniziale con i moduli richiesti per configurare tutti i dispositivi per accedere al filesystem root appropriato e alcuni programmi per identificare quei dispositivi, caricare i moduli, eseguire alcune altre attività di avvio rimontare il filesystem root corretto su / e avviare /sbin /init

initrd è simile, con la differenza principale che è un'immagine del filesystem, che può essere e di solito è compressa. Il kernel deve avere il supporto per il filesystem utilizzato integrato e monterà questa immagine come /.

iniziale

Poiché CPIO è più semplice di diversi ordini di grandezza, initramfs è preferito a initrd, in quanto ciò risparmia sia il requisito per qualsiasi modulo del filesystem da incorporare sia rende anche più facile la creazione di initramfs. Invece di dover creare un'immagine ext2, montare loopdevice e popolarla, si riduce a una semplice creazione di un archivio, non diversamente dall'uso di tar.

Tuttavia, se compili il tuo kernel con tutti i driver e i moduli richiesti incorporati nell'immagine del kernel e il tuo dispositivo del file system root ha un nome fisso nel sistema, non hai bisogno di un initramfs poiché il kernel può fare le cose da solo allora.


Esempio minimo di QEMU + Buildroot

Ecco un minimo esempio concreto che mostra che initrd non è obbligatorio:https://github.com/cirosantilli/linux-kernel-module-cheat/tree/0b4f156b1b536a89c90882ed8ce551abcd3780af#initrd

Con questa configurazione, possiamo facilmente eseguire due comandi QEMU funzionanti di tipo:

qemu-system-x86_64 -drive file=rootfs.ext2

e:

qemu-system-x86_64 -initrd rootfs.cpio

Dove:

  • rootfs.ext2 e rootfs.cpio sono fondamentalmente lo stesso filesystem root, ma in formati diversi
  • il primo comando ha un disco rigido e nessun -initrd
  • il secondo comando un -initrd ma nessun disco rigido

In entrambi i casi, Linux si avvia correttamente, tranne che nel -initrd system, le scritture dei file non sono persistenti poiché tutto è in memoria.


Linux
  1. I moduli del kernel Linux di cui non possiamo fare a meno

  2. Il kernel Linux:le 5 migliori innovazioni

  3. Il ciclo di vita dei test del kernel Linux

  4. In attesa della configurazione della rete Linux nel ramdisk iniziale (initrd)

  5. Linux – Partecipare alla mailing list del kernel?

Come controllare la versione del kernel in Linux

Come modificare la schermata iniziale di avvio di Linux

Storia delle patch live del kernel Linux

Ridimensionamento della partizione di avvio

Come visualizzare i parametri della riga di comando del kernel Linux forniti per l'avvio corrente?

In che modo Linux carica l'immagine "initrd"?