back

kernel/head.S fa alcune inizializzazioni (tra cui copia anche i parametri della command line) e la prima CPU chiama start_kernel() che si trova in init/main.c (che è scritta in C).

init/main.c ( __init start_kernel(void) ) chiama le seguenti routine per fare alcune operazioni (riporto le principali chiamate seguendone l'ordine):

1. Si assicura che solo una CPU abbia il controllo.

2. Esegue alcune operazioni hardware.

3. Stampa a video il banner di Linux.

4. Inizializza i trap.

5. Inizializza gli IRQ.

6. Inizializza lo scheduler.

7. Inizializza i timers.

8. Inizializza i softirq.

9. Fa il parsing della linea di comando (che ricordo è stata copiata fino a qui).

10. Inizializza la console.

11. Inizializza il sottosistema di caricamento dei moduli.

12. Abilita gli interrupt.

13. Chiama mem_init() che calcola alcuni valori della memoria e stampa a video il messaggio "Memory: ...".

14. kmem_cache_init(), inizializza la cache del kernel.

15. Chiama il fork_init.

16. Prepara alcuni buffer per il VFS, ecc.

17. Se supportato inizializza il procfs.

18. Fa il fork di init e inizializza il massimo numero di threads in base alla memoria disponibile.

19. Controlla se ci sono delle patch specifiche per il processore, bus, ecc. su cui il kernel è in esecuzione.

20. crea un kernel thread init () che esegue un programma passato via init= boot parametre o prova ad eseguire uno dei seguenti programmi /sbin/init, /etc/init, /bin/init, /bin/sh.

back