A partire da Linux 2.6:
nocciolo
Dopo essere stato caricato nella RAM, il kernel esegue le seguenti funzioni.
setup()
:
- Costruisci una tabella nella RAM che descriva il layout della memoria fisica.
- Imposta il ritardo e la frequenza di ripetizione della tastiera.
- Inizializza la scheda adattatore video.
- Inizializza il controller del disco con i parametri del disco rigido.
- Verificare il bus IBM Micro Channel.
- Verificare la presenza di dispositivi di puntamento PS / 2 (mouse del bus).
- Verificare il supporto per Advanced Power Management (APM).
- Se supportato, crea una tabella nella RAM che descriva i dischi rigidi disponibili.
- Se l'immagine del kernel è stata caricata in modo insufficiente nella RAM, spostarla in alto.
- Imposta il pin A20 (un hack di compatibilità per gli antichi microprocessori 8088).
- Configurare una tabella descrittiva di interrupt provvisoria (IDT) e una tabella descrittiva globale provvisoria (GDT).
- Ripristinare l'unità a virgola mobile (FPU).
- Riprogrammare i Programmable Interrupt Controller (PIC).
- Passa dalla modalità reale alla modalità protetta.
startup_32()
:
- Inizializza i registri di segmentazione e uno stack provvisorio.
- Cancella tutti i bit nel
eflags
registro.
- Riempi l'area di dati non inizializzati con zeri.
- Invoca
decompress_kernel()
per decomprimere l'immagine del kernel.
startup_32()
(stesso nome, altra funzione):
- Inizializza i registri di segmentazione finali.
- Riempi il
bss
segmento con zeri.
- Inizializza le tabelle delle pagine del kernel provvisorio.
- Abilita paging.
- Impostazione dello stack in modalità kernel per il processo 0.
- Ancora una volta, cancella tutti i bit nel
eflags
registro.
- Riempi l'IDT con gestori di interrupt nulli.
- Inizializza il primo frame della pagina con i parametri di sistema.
- Identificare il modello del processore.
- 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 runlevel
nella 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.