Cosa succede dopo aver caricato l'immagine del kernel linux nella RAM


9

Voglio solo sapere il flusso di attività che si verificano dopo aver caricato l'immagine del kernel linux nella RAM dopo il processo di avvio.


2
Non dovresti volerlo sapere . Quello che dovresti desiderare è impararlo .
alex,

Risposte:


15

A partire da Linux 2.6:

nocciolo

Dopo essere stato caricato nella RAM, il kernel esegue le seguenti funzioni.

setup():

  1. Costruisci una tabella nella RAM che descriva il layout della memoria fisica.
  2. Imposta il ritardo e la frequenza di ripetizione della tastiera.
  3. Inizializza la scheda adattatore video.
  4. Inizializza il controller del disco con i parametri del disco rigido.
  5. Verificare il bus IBM Micro Channel.
  6. Verificare la presenza di dispositivi di puntamento PS / 2 (mouse del bus).
  7. Verificare il supporto per Advanced Power Management (APM).
  8. Se supportato, crea una tabella nella RAM che descriva i dischi rigidi disponibili.
  9. Se l'immagine del kernel è stata caricata in modo insufficiente nella RAM, spostarla in alto.
  10. Imposta il pin A20 (un hack di compatibilità per gli antichi microprocessori 8088).
  11. Configurare una tabella descrittiva di interrupt provvisoria (IDT) e una tabella descrittiva globale provvisoria (GDT).
  12. Ripristinare l'unità a virgola mobile (FPU).
  13. Riprogrammare i Programmable Interrupt Controller (PIC).
  14. Passa dalla modalità reale alla modalità protetta.

startup_32():

  1. Inizializza i registri di segmentazione e uno stack provvisorio.
  2. Cancella tutti i bit nel eflagsregistro.
  3. Riempi l'area di dati non inizializzati con zeri.
  4. Invoca decompress_kernel()per decomprimere l'immagine del kernel.

startup_32() (stesso nome, altra funzione):

  1. Inizializza i registri di segmentazione finali.
  2. Riempi il bsssegmento con zeri.
  3. Inizializza le tabelle delle pagine del kernel provvisorio.
  4. Abilita paging.
  5. Impostazione dello stack in modalità kernel per il processo 0.
  6. Ancora una volta, cancella tutti i bit nel eflagsregistro.
  7. Riempi l'IDT con gestori di interrupt nulli.
  8. Inizializza il primo frame della pagina con i parametri di sistema.
  9. Identificare il modello del processore.
  10. Inizializza i registri con gli indirizzi di GDT e IDT.

start_kernel(): Quasi tutti i componenti del kernel vengono inizializzati da questa funzione, questi sono solo alcuni.

  • Scheduler
  • Zone di memoria
  • Allocatore di sistema Buddy
  • IDT
  • SoftIRQs
  • Data e ora
  • Allocatore di lastre
  • Crea processo 1 ( /sbin/init)

La "lista" completa è disponibile nei sorgenti su linux / init / main.c

Dentro

Init avvia tutto il processo utente necessario per portare il sistema nello stato desiderato, questa routine dipende fortemente dalla distribuzione e dal runlevel invocato.

Digita runlevelnella console, questo ti dà il runlevel corrente del tuo sistema.

Dai un'occhiata a /etc/rcX.d/(o /etc/rc.d/rcX.d/), sostituendo la X con il tuo runlevel.
Questi sono collegamenti simbolici ordinati per priorità di esecuzione. S01....significa che questo script viene avviato molto presto, mentre S99....viene eseguito alla fine del processo di avvio. I KXX....collegamenti simbolici fanno lo stesso, ma per la sequenza di spegnimento.

In genere, questi script gestiscono dischi, reti, registrazione, controllo dei dispositivi, driver speciali, ambiente e molte altre sequenze richieste.


LXR è una bella interfaccia per leggere il sorgente del kernel Linux. Bella lista, anche se attenzione che molto dipende dall'architettura (questa è la versione per PC).
Gilles 'SO- smetti di essere malvagio' il

1
  • Il kernel assume il controllo del sistema H / W non appena vedi "Uncompressing Linux ..".
  • Il kernel controlla e imposta i registri BIOS delle schede grafiche e il formato di output dello schermo.
  • Il kernel quindi legge le impostazioni del BIOS e inizializza le interfacce hardware di base.
  • Successivamente i driver nel kernel inizializzano l'hardware.
  • Quindi il kernel verifica i partiti
  • Quindi monta il file system di root
  • Quindi il kernel avvia init, che avvia il sistema principale con tutti i suoi programmi e configurazioni.

0

Il boot loader passa al punto di ingresso dell'immagine passando la riga di comando del kernel (se presente) e il kernel gestisce il resto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.