Depuis Linux 2.6:
Noyau
Une fois chargé dans la RAM, le noyau exécute les fonctions suivantes.
setup()
:
- Construisez une table en RAM décrivant la disposition de la mémoire physique.
- Définissez le délai et la fréquence de répétition du clavier.
- Initialisez la carte adaptateur vidéo.
- Initialisez le contrôleur de disque avec les paramètres du disque dur.
- Recherchez le bus IBM Micro Channel.
- Vérifiez les périphériques de pointage PS / 2 (souris bus).
- Vérifiez la prise en charge de la gestion avancée de l'alimentation (APM).
- Si pris en charge, créez une table en RAM décrivant les disques durs disponibles.
- Si l'image du noyau a été chargée bas dans la RAM, déplacez-la vers le haut.
- Définissez la broche A20 (un hack de compatibilité pour les anciens microprocesseurs 8088).
- Configurez une table de description d'interruption provisoire (IDT) et une table de description globale provisoire (GDT).
- Réinitialisez l'unité à virgule flottante (FPU).
- Reprogrammer les contrôleurs d'interruption programmables (PIC).
- Passez du mode réel au mode protégé.
startup_32()
:
- Initialisez les registres de segmentation et une pile provisoire.
- Effacez tous les bits du
eflags
registre.
- Remplissez la zone de données non initialisées avec des zéros.
- Invoque
decompress_kernel()
pour décompresser l'image du noyau.
startup_32()
(même nom, autre fonction):
- Initialisez les registres de segmentation finaux.
- Remplissez le
bss
segment de zéros.
- Initialiser les tableaux de pages du noyau provisoires.
- Activez la pagination.
- Configurez la pile en mode noyau pour le processus 0.
- Encore une fois, effacez tous les bits du
eflags
registre.
- Remplissez l'IDT avec des gestionnaires d'interruptions nulles.
- Initialisez le premier cadre de page avec les paramètres système.
- Identifiez le modèle du processeur.
- Initialisez les registres avec les adresses du GDT et de l'IDT.
start_kernel()
: Presque tous les composants du noyau sont initialisés par cette fonction, ce ne sont que quelques-uns.
- Planificateur
- Zones mémoire
- Allocateur de système Buddy
- IDT
- SoftIRQs
- Date et l'heure
- Allocateur de dalle
- Créer le processus 1 (
/sbin/init
)
La "liste" complète est disponible dans les sources sur linux / init / main.c
Init
Init démarre tout le processus utilisateur nécessaire pour amener le système dans l'état souhaité, cette routine dépend fortement de la distribution et du niveau d'exécution invoqué.
Tapez runlevel
dans la console, cela vous donne le niveau d'exécution actuel de votre système.
Jetez un œil à /etc/rcX.d/
(ou /etc/rc.d/rcX.d/
), en remplaçant le X par votre niveau d'exécution.
Ce sont des liens symboliques classés par priorité d'exécution. S01....
signifie que ce script est démarré très tôt, tandis qu'il S99....
s'exécute à la toute fin du processus de démarrage. Les KXX....
liens symboliques font la même chose mais pour la séquence d'arrêt.
Généralement, ces scripts gèrent les disques, la mise en réseau, la journalisation, le contrôle des périphériques, les pilotes spéciaux, l'environnement et de nombreuses autres séquences requises.