La console initiale de Linux ( initial console )

Présentation…

Le célèbre message « warning: unable to open (an) initial console », apparait souvent lors des débuts sur Linux, quand on ne connais pas encore assez bien le processus de démarrage du noyau, et que l’on ne cerne pas correctement ses dépendances. Cette page vous éclairera enfin sur ce qui se cache derrière ce mystérieux message que même les linuxien(e)s ne savent généralement pas vous expliquer.

Qu’est-ce que la console initiale ( « initial console » )

Sous Linux, la console initiale initial console ) est le premier périphérique d’« entrées/sorties » créé par le noyau. Cette initialisation est effectuée par le noyau juste après le montage du système de fichier racine, et juste avant le lancement du processus initial, le plus souvent nommé init.

Le message « warning: unable to open initial console »

L’existence de cette console se fait parfois durement ressentir, lorsque le noyau ne parviens pas à démarrer le système, et que parmi les messages d’erreur, figure le trop célèbre « warning: unable to open an initial console ».

Contexte d’initialisation

Cette initialisation est effectuée après le montage du système de fichier racine, car pour cela, le noyau Linux a besoin d’accéder au descripteur de périphérique qui se trouve dans le repertoire « /dev ».

Cette initialisation est effectuée juste avant le lancement du processus initiale, car c’est ce sont les hanldes de cette console qui lui seront passé.

Rôle et fonction de la console initiale

Les handles ( type de donnée en C, permettant d’accéder à un système d’entrée sortie, tel qu’un fichier ) de la console initiale, qui sont au nombre de trois, sont passé au processus initial. Celui-ci peut les ignorer et créer ses propres consoles.

Ouverture de la console initiale

Le plus souvent, c’est le périphérique « /dev/console » ou « /dev/tty » ou « /dev/tty1 » qui est employé. Il est possible d’indiquer au noyau d’utiliser un autre périphérique, en employant une option de démarrage du noyau : « console=… » Par exemple « console=/dev/ttyS0 », si l’on veut se contrôler le système par l’intermédiaire d’une console série.

A noter que le système peut démarrer, même si la console initiale n’a pas put être ouverte ( raison pour laquelle Linux se contente alors d’un simple message d’avertissement, « warning » ). Souvent, le processus initial créera lui même la ou les consoles nécessaire à la poursuite des opération, rendant sans conséquences l’échec de sa création par le noyau.

On pourra être étonné que le processus initial puisse créer un console si le noyau y échoue. C’est possible dans certains cas, l’un d’eux étant celui où un mauvais paramètre console a été passé au noyau.

Le plus souvent, un échec d’ouverture de la console est le signe que la racine du système de fichier initial a été mal montée ou que le répertoire « /dev » n’y existe pas, ou qu’il n’est pas remplie avec les bons descripteurs. Si la racine du système de fichier initial n’a pas put être monté, alors aucun autre processus n’aura de chance de créer cette console. Si nous sommes dans le deuxième cas, où le « /dev » n’existe pas ou qu’il est mal remplie populated ), alors le processus initial pourra créer ou remplir le répertoire « /dev », et créer la console.

Depuis la version « 2.4 » de noyau, Linux peut créer lui même le contenu du répertoire « /dev », et le monter sur une entrée de répertoire « /dev » qui doit être présente sur le système de fichier monté. Ceci est possible avec le système de fichier devfs. Si le noyau créé lui-même les entrée, et que vous passer à l’option console un chemin de descripteur qui sera créé par le noyau au démarrage, alors la console initiale pourra être initialisée, malgré un répertoire « /dev » vide.

Paramètres du noyau concernés

Paramètres du noyau
Nom du paramètre Description du paramètre
« root » Influe de manière indirect en spécifiant le répertoire « /dev ». Exemple d’utilisation : « root=/dev/hda1 ».
« rootfstype » Influant de manière indirect, ce paramètre optionnel, peut conditionner l’échec ou le succès du montage du périphérique spécifié par le paramètre « root ». Exemple d’utilisation : « rootfstype=e2fs ».
« console » Le paramètre le plus direct. Exemple d’utilisation : « console=/dev/tty ».