vide en ligne depuis 02.10.1998

Lenteur lors du démarrage de Debian/Ubuntu/Mint

KMS c'est le bonheur mais quand votre shipset vidéo n'est pas supporté, c'est le drame qui se manifeste par un temps de démarrage de la bécane pour le moins longué...

Je me suis rendu compte du problème avec un upgrade de ma Debian 5.0 (Lenny), noyau 2.6.26 vers une Debian 9 (Stretch), noyau 4.9 sur un portable HP 6710b.

Après une installation sans problème, au boot, la bête mettait 5 bonnes minutes pour afficher le logo de la distro puis 2 autres minutes pour me rendre la main !

La première chose à faire dans ces cas là c'est de rebooter la machine ! Mais non, je déconne bien sur !
La première chose à faire donc, c'est de jeter un oeil sur les logs et on commence par /var/log/dmesg.log...

Bingo ! Nous avons une belle erreur drl_kms_helper

[ 13.280057] [drm:drm_atomic_helper_wait_for_flip_done [drm_kms_helper]] *ERROR* [CRTC:34:pipe A] flip_done timed out

et si l'on regarde plus loin dans le fichier, nous retrouvons une multitude d'erreurs du même type.

[ 54.240058] [drm:drm_atomic_helper_wait_for_dependencies [drm_kms_helper]] *ERROR* [CRTC:34:pipe A] flip_done timed out
[ 64.480057] [drm:drm_atomic_helper_wait_for_dependencies [drm_kms_helper]] *ERROR* [PLANE:28:plane A] flip_done timed out

Pas de doute, kms nous fait des miséres et nous allons vérifier que notre chipset graphique est bien reconnu et monté (*ERROR* [CRTC:34:pipe A]) !

Nous allons commencer par identifier notre carte graphique en entrant ces commandes dans un terminal :

$ lspci -nnk | egrep -iA3 "VGA"

qui en retour nous affichera quelque chose du style:

00:02.0 VGA compatible controller [0300]: Intel Corporation Mobile GM965/GL960 Integrated Graphics Controller (primary) [8086:2a02] (rev 0c)
Subsystem: Hewlett-Packard Company Compaq 6710b [103c:30c0]
Kernel driver in use: i915
Kernel modules: i915, intelfb

$ sudo lshw -c video

qui à son affichera quelque chose comme:

*-display:0
description: VGA compatible controller
produit: Mobile GM965/GL960 Integrated Graphics Controller (primary)
fabriquant: Intel Corporation
identifiant matériel: 2
information bus: pci@0000:00:02.0
version: 0c
bits: 64 bits
horloge: 33MHz
fonctionnalités: msi pm vga_controller bus_master cap_list rom
configuration: driver=i915 latency=0
ressources: irq:16 mémoire:e4600000-e46fffff mémoire:d0000000-dfffffff portE/S:4000(taille=8) mémoire:c0000-dffff
*-display:1 NON-RéCLAMé
description: Display controller
produit: Mobile GM965/GL960 Integrated Graphics Controller (secondary)
fabriquant: Intel Corporation
identifiant matériel: 2.1
information bus: pci@0000:00:02.1
version: 0c
bits: 64 bits
horloge: 33MHz
fonctionnalités: pm bus_master cap_list
configuration: latency=0
ressources: mémoire:e4700000-e47fffff

Nous sommes donc en présence d'une carte graphique Intel model GM965 et dont Linux utilise le driver i915 !

C'est le bonheur car coté Linux tout est OK. Le problème concerne le kernel qui semble-t-il ne serait pas compilé avec un driver compatible GM965 et on va tout simplement le lui faire savoir en désactivant le port SVIDEO lors du boot en modifiant le fichier de configuration de grub !

Pour ajouter un paramètre de démarrage au noyau, procéder comme suit:

$ sudo nano /etc/default/grub

Modifier la ligne :

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

par

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash video=SVIDEO-1:d"

Sauvegarder puis mettez à jour grub:

$ sudo update-grub

Pour information, le fichier de configuration /boot/grub/grub.cfg est généré automatiquement par update-grub, il est inutile d’éditer ce fichier car à chaque update-grub il sera régénéré.

Les paramètres sont situés uniquement dans le fichier /etc/default/grub et dans le dossier /etc/grub.d/.

Fichier /etc/default/grub

Dans ce fichier, on peut activer ou désactiver un paramètre en le commentant / dé-commentant avec le caractère dièse "#".

paramètres présents par défaut

GRUB_DEFAULT=0 : correspond au menu qui sera sélectionné par défaut.
#GRUB_HIDDEN_TIMEOUT=0 : avec le "#", le menu de grub sera visible. Sans le "#", le menu de grub sera invisible.
GRUB_HIDDEN_TIMEOUT_QUIET=false De pair avec ‘GRUB_HIDDEN_TIMEOUT’.
GRUB_TIMEOUT=10 : est la durée en secondes de l’affichage du menu avant de se lancer sur le menu sélectionné par défaut.
GRUB_DISTRIBUTOR=`` : est la ligne qui définit la syntaxe des titres du menu
GRUB_CMDLINE_LINUX_DEFAULT="" et GRUB_CMDLINE_LINUX="" on y met les paramètres à ajouter lors de la détection automatique des systèmes (ex: radeon.modeset=1, logo.nologo,..).
#GRUB_GFXMODE=640x480.
#GRUB_INIT_TUNE="480 440 1" : sans le "#", on aura un bip à l’affichage du menu Grub.

paramètres qu'on peut ajouter

GRUB_GFXPAYLOAD=1024x768 : définit la résolution d’affichage entre Grub et celle définie dans la distribution (pour le splash screen par exemple). Défini à 'keep' par défaut.
GRUB_GFXPAYLOAD_LINUX=auto : définit la résolution d’affichage par défaut du Linux lancé FIXME
GRUB_BACKGROUND="/boot/grub/images/fjord.jpg" : pour mettre une image en fond d'écran
GRUB_DISABLE_OS_PROBER="true" : si on souhaite désactiver la recherche d'autres systèmes à chaque update-grub (inutile si on les lance autrement)
GRUB_OS_PROBER_SKIP_LIST="…" : liste de partitions à ne pas inclure dans la recherche automatique de systèmes.
GRUB_DISABLE_LINUX_RECOVERY="true" : on mettra ce paramètre si on ne veut plus avoir la possibilité de lancer les systèmes en mode 'maintenance'
GRUB_DISABLE_SUBMENU=y : si on souhaite voir directement une entrée de menu par noyau Linux disponible
LANG=fr_FR : pour définir la langue utilisée pour l'édition du menu depuis Grub ou le mode 'ligne de commande'
GRUB_TERMINAL_INPUT=at_keyboard : nécessaire pour paramétrer le clavier français (pour ne plus avoir à chercher les ()[]= .. du clavier Qwerty).
GRUB_THEME="/boot/grub/themes/ubuntu-mate/theme.txt" : chemin vers le fichier de configuration du thème (mode graphique).


Dossier /etc/grub.d/

Ce dossier contient tous les scripts qui seront utilisés (en respectant l'ordre de numérotation) par update-grub pour créer le fichier grub.cfg.

00_header : script gérant les paramètres définis dans /etc/default/grub.
05_debian_theme : script pour gérer le thème en mode texte (fonds d'écran et couleurs).
10_linux : contient le script de lancement du système sur lequel on est.
20_memtest86+ : script permettant de générer les entrées memtest ; semble absent de certaines installations EFI
20_linux_xen : script pour Xen Linux et Xen Hypervisor.
30_os-prober : contient le script de recherche des autres systèmes installés.
30_uefi-firmware FIXME
40_custom : configuration personnelle (systèmes à lancer en configuration manuelle, paramètres qui n'existent pas pour /etc/default/grub,..)
41_custom : identique à 40_custom (si on le renomme par exemple 07_custom, on pourra y mettre le lancement de Windows en premier sur la liste).