Où sommes nous ?

Gestion des ecrans en 3.x

Comment gérer la résolution des écrans en mode légacy

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+).

Activer le ou les écrans

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]

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

[lcd0_para]

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_para]

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é.

Les résolutions

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

Résolutions disponibles sur l'écran connecté

# 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.

Le mode actuel

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.

Scaller

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

a10disp

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 voilà.

Conclusion

Et bien ça marche très bien :


Visitez :
La liste de nos voyages
Nos sorties Ski et rando
Copyright Laurent Faillie 2001-2020
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 Nombre de visites au total.

Vous pouvez laissez un commentaire sur cette page.