Comment puis-je ajouter un périphérique framebuffer supplémentaire sous Linux?

15

J'utilise un Ubuntu 12.04 LTS comme serveur NAS domestique, sans X. Récemment, je me suis mis à le régler pour servir également de périphérique multimédia de lecture vidéo. Il aurait peut-être été plus facile à ce stade d'installer X, mais j'ai décidé d'essayer mplayer avec la lecture de framebuffer. Cela a fonctionné et tout allait bien.

Cependant, par curiosité et peut-être aussi pour des conséquences pratiques, je ne peux pas m'arrêter de penser aux framebuffers. Il semble y avoir un seul dispositif de framebuffer, /dev/fb0. (Btw. J'utilise le pilote vesafs) Si j'exécute plusieurs programmes utilisant des framebuffers, le chaos s'ensuit. Par exemple, l'exécution de mplayer à partir de fbterm le plante. Curieusement, le visualiseur d'images fbi parvient à visualiser les images d'une manière ou d'une autre. De toute évidence, les programmes ne peuvent pas partager l'appareil, il n'y a pas de système de fenêtrage après tout.

Alors, le nombre de périphériques (vesa) fb est-il limité aux périphériques d'affichage matériel? Ou pourrait-il y en avoir plus en principe, comme il y a plusieurs ttys? L'ajout d'un peu plus d'aide pour exécuter simultanément un logiciel qui les utilise? Comment pourrais-je ajouter plus?

De plus, la logique de connexion des tampons d'image aux ttys n'est pas très claire pour moi ... par exemple, mplayer montre que c'est une image vidéo sur chaque tty, mais pas fbi. De plus, la console par défaut d'Ubuntu (fbcon?) Apparaît derrière la superposition vidéo, ce qui me rend étrange. Qu'est-ce que tout cela?

GolDDranks
la source

Réponses:

18

Comme personne n'a encore répondu, et après des heures fastidieuses de recherche et de recherche sur Google, j'ai compris le sujet, je vais y répondre ...

Étant donné que l'interface du périphérique framebuffer est assez générale, il pourrait y avoir plus de périphériques fb en principe. Cependant, comme le pilote VESA que j'ai utilisé fournit une connexion directe entre un certain périphérique matériel et le fichier de périphérique framebuffer, il n'a pas de sens d'en avoir plus d'un que de vrais périphériques.

Il existe un pilote pour les périphériques de framebuffer virtuels, vfb. (Remarque: différent de xvfb qui est un framebuffer virtuel pour X) Je n'ai pas testé cela moi-même, mais on pourrait avoir autant de périphériques fb que l'on veut utiliser le périphérique virtuel. Je pense aussi que rien en principe n'empêche de canaliser un périphérique virtuel vers un périphérique framebuffer matériel, permettant de construire un multiplexeur framebuffer

À propos de la connexion entre les framebuffers et les tty: il n'y en a pas. Le framebuffer est simplement dessiné à l'écran, sans tenir compte de quoi que ce soit.

Ce qui m'a dérouté à l'origine, c'est le comportement du visualiseur d'images fbi. Il s'avère qu'il vérifie intelligemment si le tty dans lequel il fonctionne est ouvert ou non, et dessine ou non sur le framebuffer en fonction de cela. (C'est pourquoi il refuse d'exécuter sur SSH, contrairement à mplayer - il n'accepte pas un pseudo terminal.) Mais la fonctionnalité de type multiplexeur n'a RIEN à voir avec le framebuffer lui-même.

S'il y a plusieurs processus écrivant dans framebuffer, ils ne se bloquent pas . Il s'avère que mes problèmes précédents (plantages et autres) en utilisant simultanément plusieurs programmes fb n'étaient même pas liés au framebuffer. Prenez le terminal fbterm et lancez-y mplayer: pas de problème. Les terminaux fbterm et fbcon et la visionneuse d'image fbi ne sont mis en mémoire tampon que lorsque quelque chose est mis à jour, de sorte que le mplayer domine l'écran pratiquement 100% du temps. Mais si vous essayez d'exécuter deux mplayers, vous obtiendrez une vue qui scintille montrant des images de l'un et de l'autre, alors qu'ils tentent de dessiner dans le tampon ayant une condition de concurrence.

Quelques liens utiles:

http://moi.vonos.net/linux/framebuffer-drivers/

https://www.kernel.org/doc/Documentation/fb/framebuffer.txt

GolDDranks
la source
Si vous avez un petit deuxième écran LCD comme secondaire (pensez à 320x240 pixels, 3 pouces), l'utilisation de fb1 est logique. J'ai un petit Adafruit adafruit.com/product/1601 celui qui utilise (uniquement) fb1. Leur logiciel est open source, mais leur image de système d'exploitation essaie d'exécuter Linux avec une interface graphique en 320x240 et échoue lamentablement. En tant que 2ème appareil, cela pourrait être OK, je ne l'ai pas utilisé depuis quelques années. Voir l'homme mknod.
Alan Corey