Ce que je veux faire, en gros, c’est d’autoriser la plupart des applications graphiques framebuffer standard (du moins, tout support prenant en charge le périphérique / dev / fb * à utiliser, ou pouvant en déduire que le VT à partir duquel il est lancé utilise ) pour fonctionner sur un moniteur spécifique dans un système multi-moniteurs. Ceci est en fait trivial avec fbcon si vous avez un système avec plusieurs cartes graphiques ... Mais je veux le faire fonctionner avec des cartes zaphod, ce qui n’est pas possible pour le moment (au moins 3 jours de recherche au moins moi) sans code personnalisé. Je veux dire, cela pourrait être possible pour les cartes nvidia, je ne le saurais pas, mais radeondrmfb ne crée définitivement qu'un framebuffer linux pour la carte entière, les trois moniteurs affichant la même sortie.

La solution théorique à laquelle je suis arrivé est la suivante: j’utilise un code similaire à ce qui est trouvé ici: http://betteros.org/tut/graphics1.php#dumb peaufiné un tas, puisqu'il ne s'agit que de code de démonstration pour vous montrer comment utiliser kms / drm d'une manière semblable à un framebuffer, et créer un tampon correspondant à chaque connecteur signalant qu'il est actif et connecté, en fonction des dimensions de l'écran (éventuellement). deux fois la taille, pour permettre la double mise en tampon y-pan), puis vous enregistrez avec le noyau en tant que pilote de périphérique, en créant un descripteur de fichier / dev / fb {n} pour chaque mémoire tampon.

Ensuite, implémentez un code qui permet au pilote de se présenter au noyau comme s’il s’agissait d’un périphérique framebuffer (c’est effectivement le cas, et je suppose que c’est ainsi que radeondrmfb fonctionne, mais je n’ai pas complètement analysé radeon_fb.c de la source du noyau pour le moment, alors je suppose), tout en implémentant toutes les fonctions standard attendues du framebuffer linux via kms / drm.

À ce stade, le noyau standard grub / syslinux arg fbcon = map: devrait permettre de placer des consoles de framebuffer pour des numéros VT spécifiques sur des consoles spécifiques (par exemple, si mon pilote parvient à allouer / dev / fb1, / dev / fb2 et / dev / fb3, puis fbcon = map: 123 devrait faire en sorte que tty1 apparaisse sur le moniteur associé à / dev / fb1, tty2 sur / dev / fb2, etc.). À ce stade, le lancement des applications de framebuffer les mieux écrites, telles que fbi, devrait les lancer attachées au framebuffer dans lequel se trouve l'instance fbcon qui les a appelées.

Aucune garantie, et des applications de framebuffer mal écrites risquent de capturer / dev / fb0 et de gâcher votre journée (Et je soupçonne que quoi que ce soit qui utilise directfb puisse causer des choses horribles et horribles), mais en théorie, cela devrait me permettre de visualiser 3 fonctionne simultanément sans X, ou exploite 3 applications de framebuffer graphiques simultanément, sur mes 3 moniteurs passant tous par ma seule carte triple tête.

Maintenant, je suis complètement hors de ma profondeur ici, et je plonge dans les profondeurs, écrivant effectivement un pilote de périphérique ici ... Donc, toute personne ayant de l'expérience avec ce genre de choses capable de me dire si mon hypothèse est solide / ou me donner un conseil? Mis à part: "Vous êtes cinglé, utilisez simplement X!" bien sûr.

GammaPaladin
la source