Passées les premières impressions, il est temps de préparer le terrain en vue de customiser le système ou d'en adapter un autre au Gdium en identifiant les particularités du système.
Le firmware utilisé est PMON2000. On peut l'interrompre lors du démarrage en appuyant sur "Del" et ainsi le configurer. Il est capable de booter sur du mass-storage USB et le réseau. Sa configuration par défaut (à garder pour pouvoir continuer à booter une G-Key) va rechercher un filesystem ext2 à l'emplacement de la G-Key, sur lequel il récupèrera un kernel /boot/vmlinux.32 et un ramdisk /boot/initrd.gz. Le kernel reçoit les options suivantes:
console=tty1 root=/dev/sda2 rootwait video=sm501fb:1024x600 init=/sbin/finit-mdv rd_start=0x84000000 rd_size=0x331d36
(à vérifier: les deux derniers arguments ne sont pas dans la ligne de commande lorsqu'on consulte la configuration de PMON2000.
Le kernel est en versin 2.6.25.4, fait 1.7 MB et prend quelques secondes pour être chargé par PMON2000. Il a l'air de contenir tout le nécessaire puisque les modules dans le ramdisk sont inexistants. Il est compil&eactue; en 64 bits.
Le ramdisk fait 3.2 MB compressés et donc devrait être plus long à charger que le kernel. Le gros de cet espace vient de son répertoire /usr/lib (> 2 MB), plus particulièrement de libfreetype, libglib, libparted (que fait-elle là?) et libjpeg, ainsi que des fichiers de la GLIBC 2.7 dans /lib (environ 2.5 MB). Il y a donc quelques secondes de boot facilement gagnables, éventuellement au prix d'un peut d'esthétisme dans le boot, en remplaçant la GLIBC par uClibc, et en supprimant splashy et ses dépendances. Le ramdisk ne contient aucun module pour le kernel. L'initialisation du système se fait via /init, qui est un script shell. On y note le lancement de gdium-wear-levelling (contenu dans le ramdisk) et le montage du filesystem, identifié par son label (mips) et son type (ext3).
Selon la configuration de PMON2000, c'est /sbin/finit-mdv qui est lancé. finit est un remplacement d'init conçu pour les netbooks. Sa configuration est beaucoup plus simple que l'init classique et se fait dans /etc/finit.conf. Il a reçu en argument les paramètres rd_start et rd_size que le kernel avait préalablement reçus. finit.conf est donc très simple:
user julien
host gdium
check /dev/sda2
check /dev/sda3
startx xinit /usr/bin/startgdiumwm -- /usr/bin/X -dpi 75 -br -deferglyphs all -nolisten tcp
Rien de bien compliqué donc. startgdiumwm est un simple script shell. C'est làve qu'on aura plus de détails sur l'interface graphique.
En regardant dans les sources de finit, on voit qu'il lance /usr/sbin/services.sh, qui lui-même à son tour lance (entre autres) les services du runlevel 5 (/etc/rc5.d/S*).
Attention donc en configurant son démarrage: même si certaines choses sont faites pour que ça fonctionne comme avec l'init classique, ce n'est pas le cas pour tout.
startgdiumwm lance donc l'interface graphique. Il permet une certaine flexibilité en sourcant le fichier .xinitrc de l'utilisateur s'il existe. L'opération est réalisée avant la définition des variables d'environnement et autres initialisations. Tout peut donc ne pas fonctionner si on utilise cette possibilité sans précautions. startgdiumwm se trouve dans /usr/bin et d'autres scripts start* sont disponibles pour GNOME, KDE, Icewm WindowMaker et EvilWM.
La variable SDL_VIDEODRIVER y reçoit la valeur "x11". C'est sans doute l'option kivabien mais pas optimale. Un xhost +localhost est aussi exécuté. Outch! Heureusement que la machine est mono-utilisateur.
Le fond d'écran est auss mis en place. Sa valeur est reprise depuis les paramètres de GNOME. Bizarre, d'autant plus que le dialogue de configuration du fond d'écran n'a pas l'air d'être celui de GNOME. (à confirmer). Mais en fait, on dirait bien qu'un GNOME presque complet est installé. randr est initialisé via le wrapper /usr/bin/xrandr-display.sh (sans doute utilisé par ailleurs pour changer la sortie vidéo ou la résolution) et le gnome-settings-daemon lancé en arrière-plan. Sont aussi lancés diverses applets via les fichiers de /etc/X11/xinit.d, plus génériques que ce que le système semble proposer et pourtant avec l'air d'avoir été adaptés. LXDE n'est pas dans les dépôts, mais KDE et GNOME bien. La suite est lancée en parallèle:
On a donc une explication au temps de démarrage: certains composants sont simplement démarrés plus tard, soit pour s'assurer que leurs dépendances soient prêtes, soit pour pouvoir commencer à travailler plus tôt, je ne sais pas. On note aussi plusieurs cas de polling, par exemple pour attendre le moment de lancer les desklets.
Quant à l'initialisation du système avant le démarrage du kernel, elle n'est pas instantanée non plus et pourrait ètre significativement avec un ramdisk plus petit (j'estime cette phase de chargement et décompression à 15 secondes).
Une session gnome permet de démarrer le Gdium en un peu moins de 110 secondes. Nautilus semble compilé sans le support du bureau, sans doute pour permettre son utilisation sans interférer avec l'environnement par défaut. Il faut également lui ajouter tray_reboot dans la session pour facilement arrêter le Gdium, et à l'occasion retirer les fonctions inutiles (via gnome-session-properties).
Julien De Bona - http://debona.dyndns.org - e-mail: julien(chez)bawet(point)org - Jabber: julien@debona.dyndns.org