Cette page décrit comment régler l'affichage des écrans avec le kernel 3.x (oui, il est antédiluvien, mais à l'heure où j'écris ces lignes, je ne trouve pas le DTS qui fonctionnerait pour utiliser mon écran 3''5 sur un kernel 4+).
L'A20 qui contrôle notre BananaPI dispose de plusieurs sorties vidéo et peu en utilisé jusqu'à 2 simultanément. Ils s'activent dans le ficher FEX décrit sur le site de SunXI.
disp_init_enable = 1
disp_mode = 2
2 écrans totalement indépendants.
screen0_output_type = 1
L'écran LCD "natif" connecté sur le port LVDS
screen1_output_type = 3
Le second est l'écran HDMI
lcd_used = 1
L'écran est utilisé (dans le cas contraire, il ne sera pas vu par le kernel.
lcd_x = 320
lcd_y = 240
Sa résolution.
Le reste ? Ben hormis peut-être les lcd_max_bright et lcd_min_bright, on n'y touche surtout pas : il s'agit de configuration hardware !
hdmi_used = 1
on l'active ou pas ... et rien d'autre. En fait, toute la configuration sera envoyée par l'écran qui sera connecté.
Nous nous retrouvons donc avec 2 écrans, respectivement fb0 pour le LCD et fb1 pour l'HDMI : c'est avec lui que nous allons jouer.
Les caractéristiques sont exposées dans le répertoire /sys/class/graphics/fb1/
# ls /sys/class/graphics/fb1/
bits_per_pixel bl_curve cursor device modes pan rotate stride uevent
blank console dev mode name power state subsystem virtual_size
# cat /sys/class/graphics/fb1/modes
U:720x480p-60
D:1920x1080p-50
D:1280x720p-50
D:1920x1080i-50
D:1920x1080i-60
D:720x576p-50
V:1280x1024p-75
V:1024x768p-70
V:1024x768p-60
V:800x600p-75
V:800x600p-72
V:800x600p-60
V:800x600p-56
V:640x480p-75
V:640x480p-72
V:640x480p-60
D:800x480p-60
Attention : toutes les résolutions ne sont pas natives. Par exemple, celle de l'écran actuellement connecté est en 720x480, les autres sont interpolées avec un résultat qui dépendra de la qualité de la dalle et de l'électronique derrière.
On peut changer le mode actif en écrivant dans le fichier /sys/class/graphics/fb1/mode
# echo "D:1280x720p-50" > /sys/class/graphics/fb1/mode
Attention : les changements de fréquences se font lorsqu'aucune application n'accède à l'écran sinon ... boom !
Le CPU et le GPU partagent le même bus donc plus la résolution sera grande, plus le nombre de bits par points (couleurs) sera important, plus les applications seront pénalisées.
virtual_size quand à lui contient ... la taille virtuelle de l'écran : en effet, on peut lui créer une surface de travail qui est différente de la taille réel de l'écran. Par exemple pour faire du double buffering ... ou lui faire simuler une résolution qu'il ne connait pas.
/sys/class/graphics/fb1 # echo "1366,768" > virtual_size
/sys/class/graphics/fb1 # cat virtual_size
1366,1440
A noter que je n'ai pas réussi à changer la hauteur : il est obligatoire de le fournir, mais elle ne sert à rien.
L'une des caractéristiques intéressantes du GPU de l'A20 est qu'il peut appliquer une sorte de mise à l'échelle de l'écran et ainsi faire croire aux applications qu'il accepte une résolution qu'en fait il est incapable d'afficher.
Un exemple sera plus simple : l'écran qui affiche le tableau de bord de ma domotique à une résolution de 1366x768 ... et comme vous pouvez le voir ci-dessus, l'écran connecté ne connait pas cette résolution. Nous avons donc précédemment
étendu virtuellement à la résolution souhaitée, 1366x768
Il ne reste donc plus qu'à appliquer la loupe.
Ici, nous sortons des fonctionnalités de base de Linux et cette fameuse loupe n'est pas exposée dans SysFS : il faut donc discuter directement avec le driver vidéo, avec un programme dédié, a10disp.
La ligne que nous utiliserons est :
./a10disp --screen 1 rescale 1366 768 1280 720
avec
Et bien ça marche très bien :
Visitez : Nos sorties Ski et rando |
Copyright Laurent Faillie
2001-2023
N'oubliez pas d'entrer le mot de passe pour voir aussi les photos perso. |
Contactez moi si vous souhaitez réutiliser ces photos et pour les obtenir avec une plus grande résolution. |
Visites durant les 7 derniers jours
|
Vous pouvez
laissez un commentaire
sur cette page.