2010-03-23 11 views
15

¿Existe alguna documentación sobre cómo escribir software que utiliza el dispositivo framebuffer en Linux? He visto un par de ejemplos simples que básicamente dicen: "ábralo, mmap it, write pixels to mapped area". Pero no hay documentación completa sobre cómo usar los diferentes IOCTLS para nada. He visto referencias a "panoramización" y otras capacidades, pero "buscar en Google" da demasiados hits de información inútil.Documentación de Framebuffer

Edición: Es la única documentación desde el punto de vista de la programación, no una "Cómo el usuario configura su sistema para usar el fb", ¿documenta el código?

Respuesta

0

La fuente de cualquier pantalla de bienvenida (es decir, durante el arranque) debería darle un buen comienzo.

+3

Eso es un poco general, ¿podría darme una dirección más específica para mirar? – NoMoreZealots

1

consultar el código fuente de cualquiera de: fbxat, fbida, fbterm, fbtv, biblioteca directfb, libxineliboutput-FBE, ppmtofb, servidor X-fbdev todos son debian aplicaciones paquetes. Solo apt-get source de las bibliotecas de Debian. hay muchos otros ...

sugerencia: busque framebuffer en la descripción del paquete con su gestor de paquetes favorito.

bien, aunque leer el código a veces se llama "documentación de Guru" puede ser demasiado para hacerlo.

+0

Para algo como esto donde todos y allí hermano está escribiendo su propia versión, el problema es que el comportamiento de uno a otro puede no ser el mismo si no hay documentación para guiar a los desarrolladores a través de la implementación de la API. Estaba buscando la fuente para la implementación de Linux de PS3, se puede ver que hay funciones que parecen ser comúnmente implementadas que ignoraron. – NoMoreZealots

+0

@NoMoreZealots: Sí, una documentación verdadera con pautas de mejores prácticas sería algo muy bueno. Realmente no sé uno (así que voté a favor de tu pregunta), mi respuesta fue una especie de broma ;-) Puede que tengas que escribir esa ... – kriss

2

- Parece que no hay demasiadas opciones posibles para programar con el fb desde el espacio de usuario en un escritorio más allá de lo que mencionó. Esta podría ser una razón por la cual algunos de los documentos son tan antiguos. Mire este manual para los escritores de controladores de dispositivo y al que se hace referencia desde algunos documentos oficiales de Linux: www.linux-fbdev.org [barra inclinada] HOWTO [barra] index.html. No hace referencia a demasiadas interfaces ... aunque al observar el árbol fuente de Linux ofrece ejemplos de código más grandes.

- opentom.org [barra] Hardware_Framebuffer no es para un entorno de escritorio. Refuerza la metodología principal, pero parece evitar explicar todos los ingredientes necesarios para hacer el cambio de doble buffer "rápido" que menciona. Otro para un dispositivo diferente y que deja algunos detalles clave de almacenamiento en memoria intermedia es wiki.gp2x.org [barra] wiki [barra inclinada] Writing_to_the_framebuffer_device, aunque al menos sugiere que puede usar fb1 y fb0 para activar el doble buffering (en este dispositivo ... aunque para el escritorio, fb1 puede no ser posible o puede acceder a hardware diferente), que usar palabras clave volátiles puede ser apropiado, y que debemos prestar atención a la vsync.

- asm.sourceforge.net [slash] artículos [slash] fb.html rutinas de lenguaje de ensamblado que también aparecen (?) Para simplemente hacer lo básico de consultar, abrir, establecer algunos conceptos básicos, mmap, dibujar valores de píxeles para el almacenamiento y la copia en la memoria fb (supongo que se debe usar un ciclo corto de stosb, en lugar de un enfoque más largo).

- Tenga cuidado con 16 comentarios de bpp al buscar en el búfer de cuadros de Linux: Usé fbgrab y fb2png durante una sesión de X sin ningún resultado. Cada uno de ellos representaba una imagen que sugería una instantánea de la pantalla de mi escritorio como si la imagen del escritorio hubiera sido tomada usando una cámara muy mala, bajo el agua y luego sobreexpuesta en una habitación oscura. La imagen estaba completamente rota en color, tamaño y faltaba mucho detalle (salpicada de colores de píxeles que no pertenecían). Parece que/proc/sys en la computadora que utilicé (kernel nuevo con como mucho modificaciones menores ... de un derivado de PCLOS) afirman que fb0 usa 16 bpp, y la mayoría de las cosas que busqué en Google establecieron algo similar, pero los experimentos me llevaron a una conclusión muy diferente.Además de los resultados de estas dos fallas de las utilidades estándar de captura de búfer de cuadros (para las versiones contenidas en esta distribución) que pueden haber asumido 16 bits, tuve un resultado de prueba exitoso diferente al tratar los datos de píxeles del búfer de cuadros como 32 bits. Creé un archivo a partir de datos obtenidos a través de cat/dev/fb0. El tamaño del archivo terminó siendo 1920000. Luego escribí un pequeño programa en C para tratar de manipular esos datos (suponiendo que eran datos de píxeles en alguna codificación u otra). Finalmente me clavé, y el formato de píxeles coincidía exactamente con lo que había obtenido de X cuando me lo preguntaron (TrueColor RGB 8 bits, sin alfa pero con relleno de 32 bits). Observe otra pista: mi resolución de pantalla de 800x600 veces 4 bytes da exactamente 1920000. Los enfoques de 16 bits que probé inicialmente produjeron una imagen rota similar a fbgrap, por lo que no es como si no hubiera estado buscando los datos correctos. [Avíseme si quiere el código que usé para probar los datos. Básicamente acabo de leer todo el volcado de fb0 y luego escupirlo de vuelta al archivo, después de agregar un encabezado "P6 \ n800 600 \ n255 \ n" que crea el archivo PPM adecuado y mientras se repiten todos los píxeles que manipulan su orden o expandiéndolos, .. con el resultado final exitoso para mí de caer cada 4to byte y cambiar el primero y el tercero en cada unidad de 4 bytes. En resumen, convertí el aparente BGRA fb0 dump en un archivo RGB ppm. ppm puede verse con muchos visores de imágenes en Linux.]

- Puede que desee reconsiderar las razones para querer programar usando fb0 (esto también podría explicar por qué existen pocos ejemplos). Es posible que no consigas ningún rendimiento que valga la pena en comparación con X (esta fue mi experiencia, si es limitada) mientras que renuncias a los beneficios de usar X. Esta razón también podría explicar por qué existen pocos ejemplos de código.

- Tenga en cuenta que DirectFB no es fb. DirectFB últimamente ha recibido más amor que el anterior, ya que está más enfocado en la aceleración 3D más atractiva. Si quieres renderizar en una pantalla de escritorio lo más rápido posible sin aprovechar la aceleración de hardware en 3D (o incluso 2d hw de aceleración), entonces fb podría estar bien, pero no te dará mucho de lo que X no te da. X aparentemente usa fb, y la sobrecarga es probablemente insignificante en comparación con otros costos que su programa probablemente tendrá (no llame a X en un bucle cerrado, sino al final una vez que haya configurado todos los píxeles para el fotograma). Por otro lado, puede ser bueno jugar con fb como se describe en este comentario: Paint Pixels to Screen via Linux FrameBuffer

2

Verifique las fuentes MPlayer.

En el directorio /libvo hay muchos plugins de salida de video utilizados por Mplayer para mostrar contenido multimedia. Allí puede encontrar el complemento fbdev (vo_fbdev * sources) que utiliza el búfer de cuadros de Linux.

Hay una gran cantidad de llamadas ioctl, con los siguientes códigos:

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

No es como una buena documentación, pero esta seguramente es una buena implementación de aplicación.

Cuestiones relacionadas