¿Cómo puedo agregar un dispositivo framebuffer adicional en Linux?

15

Estoy ejecutando un Ubuntu 12.04 LTS como un servidor NAS doméstico, sin X. Recientemente me puse a punto para que también sirviera como dispositivo de reproducción de video. Podría haber sido más fácil en este punto instalar X, pero decidí probar mplayer con la reproducción de framebuffer. Funcionó, y todo estuvo bien y bien.

Sin embargo, por curiosidad y quizás también por consecuencias prácticas, no puedo dejar de pensar en framebuffers. Parece que hay solamente un dispositivo de framebuffer /dev/fb0. (Por cierto, estoy usando el controlador vesafs) Si ejecuto varios programas que usan framebuffers, se produce el caos. Por ejemplo, ejecutar mplayer desde fbterm simplemente lo bloquea. Curiosamente, el visor de imágenes del FBI se las arregla para ver imágenes de alguna manera. Obviamente los programas no pueden compartir el dispositivo, después de todo no hay un sistema de ventanas.

Entonces, ¿el número de dispositivos (vesa) fb está limitado a dispositivos de visualización de hardware? ¿O podría haber más en principio, como si hubiera múltiples ttys? ¿Agregaría más ayuda para ejecutar simultáneamente el software que los usa? ¿Cómo podría agregar más?

Además, la lógica de cómo los framebuffers están conectados a ttys no me queda del todo clara ... por ejemplo, mplayer muestra su cuadro de video en cada tty, pero fbi no. Además, la consola predeterminada de Ubuntu (fbcon?) Se muestra detrás de la superposición de video, lo que me sorprende. ¿Qué es todo esto?

GolDDranks
fuente

Respuestas:

18

Como nadie ha respondido todavía, y después de tediosas horas de googlear y probar, entendí el tema, voy a responderlo ...

Dado que la interfaz del dispositivo framebuffer es bastante general, en principio podría haber más dispositivos fb. Sin embargo, como el controlador VESA que utilicé proporciona una conexión directa entre un determinado dispositivo de hardware y el archivo del dispositivo framebuffer, no tiene sentido tener más de ellos que uno con dispositivos reales.

Hay un controlador para dispositivos virtuales framebuffer, vfb. (Nota: diferente de xvfb, que es un framebuffer virtual para X) No lo he probado yo mismo, pero uno podría tener tantos dispositivos fb como quiera usando el dispositivo virtual. También creo que, en principio, nada impide que uno conecte un dispositivo virtual a un dispositivo de framebuffer de hardware, lo que permite construir un multiplexor de framebuffer

Sobre la conexión entre framebuffers y tty's: no hay ninguno. El framebuffer simplemente se dibuja en la pantalla, sin tener en cuenta nada.

Lo que originalmente me confundió es el comportamiento del visor de imágenes del FBI. Resulta que verifica inteligentemente si el tty en el que se está ejecutando está abierto o no, y atrae al framebuffer o no de acuerdo con eso. (Es por eso que se niega a correr sobre SSH, a diferencia de mplayer, no acepta un pseudo terminal). Pero la funcionalidad de multiplexor no tiene NADA que ver con el framebuffer en sí.

Si hay varios procesos que escriben en framebuffer, no se bloquean entre sí . Resulta que mis problemas anteriores (bloqueos y demás) al usar múltiples programas fb simultáneamente ni siquiera se referían al framebuffer. Tome la terminal fbterm y ejecute mplayer desde ella: no hay problema. Los terminales fbterm y fbcon y el visor de imágenes fbi solo se almacenan en el búfer cuando se actualiza algo, por lo que mplayer domina la pantalla prácticamente el 100% del tiempo. Pero si intentas ejecutar dos mplayers, obtendrás una vista que parpadea mostrando fotogramas de uno y otro, mientras intentan atraer al búfer con una condición de carrera.

Algunos enlaces útiles:

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

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

GolDDranks
fuente
Si tiene una segunda pantalla LCD pequeña secundaria (piense en 320x240 píxeles, 3 pulgadas) usando fb1 tiene sentido para eso. Tengo un pequeño Adafruit adafruit.com/product/1601 que usa (solo) fb1. Su software es de código abierto, pero su imagen del sistema operativo intenta ejecutar Linux con una GUI en 320x240 y falla miserablemente. Como segundo dispositivo podría estar bien, no lo he usado en un par de años. Ver hombre mknod.
Alan Corey