2010-03-23 7 views
15

Existe-t-il une documentation sur la façon d'écrire un logiciel utilisant le périphérique framebuffer sous Linux? J'ai vu quelques exemples simples qui disent essentiellement: "ouvrez-le, mmapez-le, écrivez des pixels sur la zone cartographiée." Mais pas de documentation complète sur la façon d'utiliser les différents IOCTLS pour cela. J'ai vu des références à "panning" et d'autres capacités, mais "googling it" donne trop de hits d'informations inutiles.Documentation Framebuffer

Éditer: Est-ce la seule documentation du point de vue de la programmation, pas une documentation de l'utilisateur sur "comment configurer votre système pour utiliser le fb"?

Répondre

0

La source de tout écran de démarrage (c'est-à-dire pendant le démarrage) devrait vous permettre de bien démarrer.

+3

C'est un peu général, pourriez-vous me donner une direction plus précise à regarder? – NoMoreZealots

1

Regardez le code source de l'un des: fbxat, fbida, fbterm, fbtv, bibliothèque directfb, libxineliboutput-FBE, ppmtofb, xserver-fbdev tous sont des applications debian packages. Juste apt-get source de bibliothèques Debian. il ya beaucoup d'autres ...

indice: recherche de framebuffer dans la description du paquet en utilisant votre gestionnaire de paquets préféré.

ok, même si la lecture du code est parfois appelée "documentation Guru", il peut être un peu trop pour le faire réellement.

+0

Pour quelque chose comme ceci où tout le monde écrit ici sa propre version, le problème est que le comportement de l'un à l'autre peut ne pas être le même s'il n'y a pas de documentation pour guider les développeurs. Je regardais la source pour l'implémentation de la PS3 Linux, vous pouvez voir qu'il y a des fonctionnalités qui semblent être implémentées couramment et ignorées. – NoMoreZealots

+0

@NoMoreZealots: Oui, une vraie documentation avec des directives de bonnes pratiques serait une très bonne chose. Je n'en connais pas vraiment une (donc j'ai mis votre question à plat), ma réponse était une sorte de blague ;-) Vous devrez peut-être écrire celui-là ... – kriss

2

- Il semble qu'il n'y ait pas trop d'options possibles de programmation avec le fb de l'espace utilisateur sur un bureau au-delà de ce que vous avez mentionné. C'est peut-être une des raisons pour lesquelles certains docs sont si vieux. Regardez ce howto pour écrivains de pilotes de périphériques et qui est référencé à partir de certains documents officiels linux: www.linux-fbdev.org [slash] HOWTO [slash] index.html. Il ne fait pas référence à trop d'interfaces .. bien que regarder l'arbre source Linux offre des exemples de code plus grands.

- opentom.org [barre oblique] Hardware_Framebuffer n'est pas destiné à un environnement de bureau. Il renforce la méthodologie principale, mais il semble éviter d'expliquer tous les ingrédients nécessaires pour faire le double tampon "rapide" de commutation qu'il mentionne. Wiki.gp2x.org [slash] wiki [slash] Writing_to_the_framebuffer_device, bien qu'il suggère au moins que vous pourriez utiliser fb1 et fb0 pour engager un double tampon (sur ce périphérique .. bien que pour le bureau, fb1 peut ne pas être possible ou il peut accéder à du matériel différent), que l'utilisation de mots-clés volatiles pourrait être approprié, et que nous devrions faire attention à la vsync. Les routines de langage d'assemblage qui apparaissent également (?) Pour faire simplement les bases de l'interrogation, de l'ouverture, du réglage de quelques notions de base, mmap, du dessin des valeurs de pixels au stockage, et la copie à la mémoire fb (en veillant à utiliser une courte boucle de stosb, je suppose, plutôt que d'approcher plus longtemps). - Méfiez-vous des commentaires de 16 bpp lors du googling tampon de trame Linux: j'ai utilisé fbgrab et fb2png pendant une session X en vain. Chacun d'eux a rendu une image qui suggérait un instantané de mon écran de bureau comme si l'image du bureau avait été prise en utilisant un très mauvais appareil photo, sous l'eau, puis surexposée dans une pièce sombre. L'image était complètement cassée en couleur, en taille, et manquait de beaucoup de détails (pointillés partout avec des couleurs de pixels qui ne lui appartenaient pas). Il semble que/proc/sys sur l'ordinateur que j'ai utilisé (nouveau noyau avec des modifications mineures ... d'un dérivé de PCLOS) prétendent que fb0 utilise 16 bpps, et la plupart des choses que j'ai googlé indiquaient quelque chose dans ce sens. une conclusion très différente.Outre les résultats de ces deux défaillances des utilitaires de capture de tampon de trame standard (pour les versions détenues par cette distribution) qui ont supposé 16 bits, j'ai obtenu un résultat de test différent avec succès traitant les données de pixel du tampon de trame comme 32 bits. J'ai créé un fichier à partir de données tirées via cat/dev/fb0. La taille du fichier a fini par être 1920000. J'ai alors écrit un petit programme en C pour essayer et manipuler ces données (en supposant que c'était des données de pixels dans certains encodages ou autres). Je l'ai finalement clouée, et le format de pixel correspondait exactement à ce que j'avais obtenu de X lors de la requête (TrueColor RGB 8 bits, pas d'alpha mais matelassé à 32 bits). Notez un autre indice: ma résolution d'écran de 800x600 fois 4 octets donne 1920000 exactement. Les approches 16 bits que j'ai essayées initialement ont toutes produit une image brisée similaire à celle de fbgrap, donc ce n'est pas comme si je n'avais pas regardé les bonnes données. [Laissez-moi savoir si vous voulez le code que j'ai utilisé pour tester les données. Fondamentalement, je viens de lire dans le vidage fb0 entière, puis crachez-le dans le fichier, après avoir ajouté un en-tête "P6 \ n800 600 \ n255 \ n" qui crée le fichier ppm approprié, et en boucle sur tous les pixels manipulant leur ordre ou les expanser, .. avec le résultat final réussi pour moi étant de laisser tomber chaque 4ème octet et commuter le premier et le troisième dans chaque unité de 4 octets. En bref, j'ai transformé l'image BGRA fb0 apparente en un fichier RVB en ppm. ppm peut être consulté avec beaucoup de visionneuses de picots sur Linux.]

- Vous voudrez peut-être reconsidérer les raisons pour lesquelles vous voulez programmer en utilisant fb0 (cela peut aussi expliquer pourquoi il existe peu d'exemples). Vous ne pouvez pas obtenir de gains de performance intéressants par rapport à X (c'était mon expérience, si elle était limitée) tout en abandonnant les avantages de l'utilisation de X. Cette raison peut également expliquer pourquoi il existe peu d'exemples de code.

- Notez que DirectFB n'est pas fb. DirectFB a récemment obtenu plus d'amour que le fb plus âgé, car il est plus axé sur le 3d hw plus sexy. Si vous voulez rendre à un écran de bureau aussi vite que possible sans tirer parti de l'accel de matériel 3d (ou même 2d hw accel), alors fb pourrait être bien mais ne vous donnera pas beaucoup de choses que X ne vous donne pas. X utilise apparemment fb, et le surcoût est probablement négligeable par rapport aux autres coûts que votre programme aura probablement (n'appelez pas X dans une boucle serrée, mais plutôt à la fin une fois que vous avez configuré tous les pixels pour le cadre). D'autre part, il peut être intéressant de jouer avec fb comme il est couvert dans ce commentaire: Paint Pixels to Screen via Linux FrameBuffer

2

Vérifiez les sources MPlayer.

Sous le répertoire /libvo il y a beaucoup de plug-ins de sortie vidéo utilisés par MPlayer pour afficher multimédia. Vous y trouverez le plugin fbdev (vo_fbdev * sources) qui utilise le tampon de trame Linux.

Il y a beaucoup d'appels ioctl, avec les codes suivants:

  • FBIOGET_VSCREENINFO
  • FBIOPUT_VSCREENINFO
  • FBIOGET_FSCREENINFO
  • FBIOGETCMAP
  • FBIOPUTCMAP
  • FBIOPAN_DISPLAY

Ce n'est pas comme une bonne documentation, mais c'est sûrement une bonne application.