Page suivante Page précédente Table des matières

4. Utilisation du tampon de mémoire vidéo sur architecture Intel

4.1 Vesafb, quès acco ?

Vesafb est un gestionnaire de mémoire vidéo sur compatible PC dédié aux cartes cartes graphiques conformes aux spécifications VESA 2.0. Son fonctionnement est lié de près aux gestionnaires de mémoire vidéo génériques du noyau.

Vesafb permet le recours aux modes graphiques sur PC pour l'utilisation des consoles textes en point par point. Vesafb autorise également l'affichage d'un logo et c'est vraisemblablement ce pour quoi vous voulez vous en servir :o)

On ne peut malheureusement pas utiliser vesafb avec des cartes VESA 1.2. En effet, ces cartes n'utilisent pas un adressage linéaire. Par ce terme, on entend que tous les octets de la mémoire vidéo sont accessibles à un instant donné. Historiquement, les anciennes cartes vidéo ne rendaient la mémoire graphique disponible qu'au travers d'une fenêtre de 64 ko qui correspondait à la taille de la plus grande zone de mémoire contigüe gérable directement par le microprocesseur (d'où les limitations des cartes CGA/EGA). Quelqu'un écrira peut-être un gestionnaire de périphériques vesafb12 pour ce type de cartes, mais il consommera une mémoire par ailleurs précieuse pour le noyau et ça restera de toute façon un sale bricolage. :o(

Il existe cependant un moyen détourné d'accéder aux fonctionnalités VESA 2.0 sur une carte VESA 1.2. Peut-être pouvez vous charger depuis le DOS un programme de type TSR qui, utilisé conjointement avec loadlin, aidera à configurer la carte pour les modes graphiques voulus. Cela ne marchera pas toujours. Ainsi, certaines cartes de chez Cirrus Logic, telles les VLB 54xx, se retrouvent à une position en mémoire (par exemple entre 15 et 16 Mo) qui en interdit l'utilisation sur les systèmes munis de plus de 32 Mo de mémoire. Rien de rédhibitoire si on dispose d'un BIOS permettant de ne pas affecter de mémoire entre 15 et 16 Mo ("Memory Hole") mais il m'a semblé comprendre que Linux n'aime pas ça. Si l'expérience vous tente, vous pouvez essayer UNIVBE (disponible sur l'Internet).

Vous pouvez aussi essayer divers patches noyaux. Il en existe notamment pour les anciennes cartes S3 telles la S3 Trio ou la Virge qui se conforment à la norme VESA 1.2. Les patches sont disponibles via : ftp://ccssu.crimea.ua/pub/linux/kernel/v2.2/unofficial/s3new.diff.gz.

4.2 Comment faire fonctionner le gestionnaire vesafb ?

Il vous faudra recompiler le noyau. <!- autant que ce soit clair. G.A.--> A supposer que vous utilisiez menuconfig, vous devrez passer par les étapes suivantes :

Dans le menu "Console drivers" :

Si votre processeur (de type x86) supporte le MTRR, activez le. Il permet d'accélérer les copies entre la mémoire système et la carte graphique. Vous pouvez naturellement le mettre en marche une fois la console opérationnelle. IMPORTANT : pour les noyaux 2.1.x, activez le choix des fonctionnalités expérimentales via le menu ``Code Maturity Level''. Ceci est inutile pour les noyaux 2.2.x.

Le support des composants VGA (en mode texte) - vgafb - appartenait à la liste ci-dessus mais il en a été supprimé en raison de son obsolescence. Il disparaîtra sous peu. Sélectionnez plutôt "VGA Text Console".

Vérifiez bien que le support "Mac variable bpp packed pixel" n'est pas activé. [En 2.1.111/112, il semblerait qu'il le soit si "Advanced Low Level Drivers" l'est. Ce n'est plus le cas en 2.1.113] Les fontes peuvent également être stockées en mémoire mais rien n'y oblige et l'emploi de setfont du paquetage kbd-0.99 reste possible pour charger les fontes adéquates (reportez vous à la section relative aux fontes).

Assurez vous que rien n'est modularisé. [J'ai des doutes quant aux possibilités de modularisation de l'ensemble - corrections bienvenues]

Vous devrez ensuite créer les périphériques associés au gestionnaire de mémoire vidéo dans le répertoire /dev. Pour le premier, il vous suffit de taper


# mknod /dev/fb0 c 29 0

Les suivants doivent être multiples de 32, soit, pour /dev/fb1 :
# mknod /dev/fb1 c 29 32

et ainsi de suite jusqu'au huitième si vous le souhaitez :
# mknod /dev/fb7 c 29 224

Recompilez votre noyau, modifiez l'/etc/lilo.conf de façon à ajouter le paramètre VGA=ASK, lancez lilo. Ceci vous permettra de choisir le mode graphique que vous voulez.

Voici mon lilo.conf personnel :

# LILO configuration file
boot = /dev/hda3
delay = 30 
prompt
vga = ASK # L'utilisateur devra entrer le mode
image = /vmlinuz
  root = /dev/hda3
  label = Linux
  read-only # Les systemes de fichiers autres que UMSDOS doivent etre montes
            # en lecture seule pour la phase de verification

Redémarrez le noyau et essayez comme test d'entrer 0301 au prompt VGA. Vous devriez vous retrouver en 640x480 sur 256 couleurs avec un délicieux petit logo de ping^H^H^H^Hmanchot.

A l'invite LILO, vous DEVEZ fournir un chiffre sous la forme d'un ``0'' suivi de 3 digits sans ``x'' hexadécimal. Si LILO fournit directement l'argument au noyau, ceci n'est pas nécessaire.

Une fois que tout marche convenablement, vous pouvez explorer les différents modes (voir plus bas) et une fois choisi celui qui vous convient, il sera temps de le fixer via le paramètre ``VGA=x'' du fichier de configuration de lilo. La table plus bas vous fournira le nombre correspondant au mode. Par exemple, pour du 1280x1024 en 256 couleurs, vous emploierez ``VGA=0x307'' et relancerez lilo. Le reste se trouve dans les HOWTO relatifs à lilo et à loadlin.

NOTE ! vesafb n'active pas automatiquement le défilement vers l'arrière. Vous devez le préciser au noyau : video=vesa:ypan ou video=vesa:ywrap. Les deux font la même chose mais de façon un peu différente. ywrap est bien plus rapide qu'ypan mais risque de ne pas fonctionner sur des cartes VESA 2.0 ne respectant pas tout à fait les spécifications. L'option n'est disponible qu'à partir du noyau 2.1.116. Les noyaux précédents ne permettent pas le défilement vers l'arrière.


Page suivante Page précédente Table des matières