Domanda

C'è qualcosa che il kernel deve ottenere dal boot loader. Di solito il kernel è in grado di richiamare un sistema da zero, quindi perché richiede qualcosa dal bootloader? Ho visto messaggi di avvio dal kernel in questo modo.

"Fetching vars from bootloader... OK"

Quindi quali esattamente sono le variabili che vengono passate? Inoltre, come vengono trasferite le variabili dal bootloader? È attraverso lo stack?

È stato utile?

Soluzione

Il kernel accetta le cosiddette opzioni da riga di comando, che sono basate su testo. Questo è molto utile, perché puoi fare molte cose senza dover ricompilare il tuo kernel. Per quanto riguarda l'argomento che passa, dipende dall'architettura. Su ARM viene eseguito tramite un puntatore a una posizione in memoria o una posizione fissa in memoria.

Ecco come si fa su ARM . Di solito un kernel non è in grado di avviare la macchina da zero. Può essere dal bios, ma poi non è da zero. Ha bisogno di un'inizializzazione, questo è il lavoro del bootloader.

Altri suggerimenti

Ci sono alcuni parametri che il kernel Linux accetta dal bootloader, di cui quello che ora posso ricordare è il parametro vga . Ad esempio:

kernel /vmlinuz-2.6.30 root=/dev/disk/by-uuid/3999cb7d-8e1e-4daf-9cce-3f49a02b00f2 ro vga=0x318

Dai un'occhiata a 10 parametri del tempo di avvio che dovresti conoscere sul kernel Linux che spiega alcuni dei parametri comuni.

Per il kernel Linux, ci sono diverse cose che il bootloader deve dire al kernel. Include cose come la riga di comando del kernel (come già menzionato da molte altre persone), dove nella memoria initrd è stato caricato e le sue dimensioni, se viene utilizzato un initrd (il kernel non può caricarlo da solo; spesso quando si utilizza un initrd, i moduli necessari per accedere ai dispositivi di archiviazione sono all'interno di initrd, e può anche essere necessario alcune configurazioni piuttosto complesse prima di poter accedere allo spazio di archiviazione) e varie probabilità e fini assortiti.

Vedi Documentazione / x86 / boot.txt (collegamento alla versione 2.6.30) per maggiori dettagli sull'architettura tradizionale x86 (sia a 32-bit che a 64-bit), incluso il modo in cui queste variabili vengono passate al codice di setup del kernel.

Il bootloader non usa uno stack per passare argomenti al kernel. Almeno nel caso di Linux, esiste una struttura di memoria piuttosto complessa che il bootloader riempie e che il kernel sa come analizzare. Questo è il modo in cui il bootloader punta il kernel alla sua riga di comando. Vedi Documentaion / x86 / boot.txt per maggiori informazioni.

Linux accetta variabili dal boot loader per consentire l'utilizzo di alcune opzioni. So che una delle cose che puoi fare è farlo in modo da non dover accedere (modalità di ripristino) e ci sono molte altre opzioni. Principalmente consente solo di apportare correzioni in caso di problemi con qualcosa o per la modifica della password. Questo è il modo in cui Ubuntu Live-CD avvia Linux se si sceglie di utilizzare un'altra opzione.

Normalmente i parametri chiamati parametri della riga di comando, che vengono passati al modulo kernel dal boot loader. Bootloader utilizza molti degli interrupt del BIOS per rilevare,

memory
HDD
Processor
Keyboard
Screen
Mouse
ETC...

e tutti i dettagli di harwares saranno rilevati all'avvio, cioè in modalità reale, quindi passano questi parametri a Kernel.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top