Logiciels Libres et Systèmes Embarqués


5.6. Initialisation du noyau Linux

5.6.1. Initialisation de la carte

La première chose que fait la fonction start_kernel est de prendre le verrou global du noyau, afin d'empêcher tout problème de concurrence d'accès entre les processeurs. Ce verrou sera libéré par le processus init une fois que le noyau aura complètement démarré. Vient ensuite l'appel à ppc4xx_setup_arch (à travers le pointeur setup_arch), qui fait simplement appel à la fonction board_setup_arch (qui ne fait rien) :

void __init board_setup_arch(void)
{
    return;
}

5.6.2. Parcours de la ligne de commande

La ligne de commande est ensuite parcourue par parse_options afin d'obtenir les arguments passés au noyau, ainsi que les variables d'environnements (comme pour U-Boot). La différence entre les variables et les arguments est simple : les variables sont de la forme var=value alors que les arguments ressemblent par exemple à noinitrd. Certaines options sont dédiées uniquement au fonctionnement interne du noyau, et ne sont donc pas passées au processus init.

5.6.3. Initialisation du contrôleur d'interruptions

Vient ensuite l'appel à la fonction ppc4xx_init_IRQ (à travers le pointeur init_IRQ). Cette dernière initialise le contrôleur d'interruptions grâce à la fonction ppc4xx_pic_init, comme nous le verrons à la section 5.7. Elle initialise ensuite la table des gestionnaires d'interruptions avec le gestionnaire ppc4xx_pic. Enfin, elle fait appel à la fonction board_setup_irq (qui ne fait rien) :

void __init board_setup_irq(void)
{
    return;
}

Le noyau est encore loin d'avoir fini son initialisation, mais pour ce portage, il ne reste plus rien à écrire, si ce n'est les pilotes de périphériques.