Sin dispositivo framebuffer: ¿cómo habilitarlo?

23

Estoy tratando de hacer que una tarjeta sintonizadora PCMCIA funcione en mi servidor doméstico sin cabeza, ejecutando Debian Squeeze. Ahora, como tengo grandes problemas para encontrar la línea de comando correcta para capturar, transcodificar y transmitir el video a la red usando VLC, decidí ir paso a paso y trabajar primero en la salida local.

Ahí es donde entra el problema: ¡ parece que no hay ningún dispositivo framebuffer (/ dev / fb0) al que acceder para mostrar gráficos en la pantalla adjunta! Y, de hecho, noté que no tengo la imagen de pingüino de Linux en el arranque (no presté atención antes porque la pantalla está conectada, pero siempre está apagada, y de todos modos la computadora siempre está encendida).

Como no estoy muy familiarizado con los gráficos de Linux, me gustaría entender:

  • ¿Está relacionado con mi hardware en particular (ver más abajo)? ¿O es específico de Debian Squeeze / una versión del núcleo / ...?
  • ¿Hay algún controlador que deba instalar / cargar manualmente?

Ahora algo de información general:

  • La computadora no tiene una tarjeta gráfica dedicada, sino un chipset gráfico integrado (Intel G31 Express), integrado en la placa base (Gigabyte G31M-ES2L)
  • No quiero instalar un servidor X con todas las funciones, solo tengo un dispositivo framebuffer para esta prueba en particular

¿Alguna idea / comentario sobre el tema?

Federico
fuente
1
Una vez que esté listo /dev/fb0y en funcionamiento, asegúrese de aceptar mi respuesta. En raras ocasiones, las personas con experiencia real en un tema menos común se mueven para dar una respuesta de alta calidad. Existen en UNIX-SE, es un tema relativamente poco común, por lo que existen menos expertos.
JM Becker

Respuestas:

36

Puedo abordar su pregunta, habiendo trabajado previamente con Linux FB.

Cómo Linux hace su FB.

  1. Primero necesita tener soporte FrameBuffer en su kernel, correspondiente a su hardware. La mayoría de las distribuciones modernas tienen soporte a través de módulos del núcleo. No importa si su distribución viene preconfigurada con un logotipo de arranque, no uso uno y tengo soporte FB.

  2. No importa si tiene una tarjeta gráfica dedicada, integrada funcionará siempre que se admita el Hardware Framebuffer.

  3. No necesita X, que es el aspecto más atractivo de tener FrameBuffer. Algunas personas no lo saben mejor, por lo que abogaron por alguna forma de X para solucionar sus malentendidos.

  4. No necesita trabajar directamente con el FB, lo que muchas personas suponen incorrectamente. Una biblioteca increíble para desarrollar con FrameBuffer es DirectFBque incluso tiene un soporte básico de aceleración. Siempre sugiero al menos echarle un vistazo, si está comenzando un proyecto basado en FB con todas las funciones (navegador web, juego, GUI ...)

Específico para su hardware

  1. Utilice el Vesa Generic FrameBuffer, se llama a sus módulos vesafb. Puede cargarlo, si lo tiene disponible, con los comandos modprobe vesafb. muchas distribuciones preconfiguran deshabilitado, puede registrarse /etc/modprobe.d/. blacklist vesafbEs posible que deba comentarse con un #, en un blacklist-framebuffer.confu otro archivo de lista negra.

  2. La mejor opción es un controlador KMS específico de hardware. El principal para Intel es Intel GMA, no estoy seguro de cómo se llaman sus módulos. Deberá leerlo al respecto en sus documentos de distribución. Esta es la mejor opción de FB, personalmente siempre iría a KMS primero si es posible.

  3. Utilice los controladores de FB específicos del hardware heredado, no se recomiendan ya que a veces tienen errores. Evitaría esta opción, a menos que sea el último recurso necesario.

Creo que esto cubre todas sus preguntas y debería proporcionar la información para que ese /dev/fb0dispositivo esté disponible. Cualquier cosa más específica necesitaría detalles de distribución, y si tiene algo de experiencia, RTFM debería ser todo lo que necesita. (Después de leer esto).

Espero haberte ayudado, ¡tienes suerte de que estés preguntando sobre uno de mis temas! Este es un tema descuidado en UNIX-SE, ya que no todos (a sabiendas) usan Linux FrameBuffer.

NOTA: UvesaFB o VesaFB?

Es posible que haya leído que la gente usa uvesafbmás vesafb, ya que tuvo un mejor rendimiento. Esto fue generalmente cierto, pero no en una distribución moderna con hardware moderno. Si su hardware de gráficos admite el modo protegido VESA (VESA> = 2.0), y tiene un núcleo algo reciente, vesafbahora es una mejor opción.

JM Becker
fuente
1
Muchas muchas gracias por tu respuesta !!! ¡Es mucho más de lo que esperaba en términos de profundidad y calidad! ¡Realmente aprecio cuando puedo encontrar publicaciones / respuestas como la suya porque no solo dan soluciones sobre el tema específico, sino que lo más importante es que brindan información general sobre el trabajo interno que puede ser útil para otros para las mismas situaciones o situaciones relacionadas !!
Federico
1
Con respecto a mi problema, lo investigaré en función de sus comentarios e informaré aquí tan pronto como obtenga resultados satisfactorios ...
Federico
3
Así que intenté modprobe vesa(lo cual recuerdo haber intentado antes de hacer la pregunta aquí) que falla porque el módulo no existe en mi sistema ( FATAL: Module vesafb not found.) -> tendré que entender si esto está relacionado con mi hardware o mi distribución de Linux (Debian Squeeze ) La buena noticia es que modprobe uvesafbfunciona y crea el /dev/fb0dispositivo. Sin embargo, ahora que he leído su respuesta, intentaré configurar las cosas de la manera correcta y encontrar el controlador KMS ...
Federico
1
¡Voté sus comentarios, estoy emocionado de poder ser de ayuda! Para abordar su último comentario, está incorrecto acerca de la solución 2. ABSOLUTAMENTE puede obtener un KMS sin X, pero como dije, las respuestas reales literalmente se están ahogando en la basura. Se llama el nombre del módulo de hardware correcto inteldrmfb, lo descubrí haciendo una investigación rápida. Siempre tengo ATI, por lo que el soporte relacionado con Intel GPU no es mi punto más fuerte. Es posible que deba instalar un paquete, pero veré si puedo averiguarlo.
JM Becker
1
O espere, cometí un error ... Acabo de revisar mi netbook Intel y el módulo es i915, pero carga el Framebuffer conocido como inteldrmfb. Es posible que deba instalar el paquete libdrm-intel1o verificar si está instalado.
JM Becker
10

¡Finalmente encontré la solución a mi problema!

En primer lugar, muchas gracias a todos los que contribuyeron y, en particular, a TechZilla y a la explicación detallada que brindó, ¡sin la cual creo que me habría rendido hace mucho tiempo!

Básicamente, todo lo que hay que hacer es habilitar modesetting ( modeset=1) cuando i915se carga el módulo del kernel. Esto se puede hacer de la manera habitual:

  • a través del parámetro del núcleo de GRUB,
  • a través de un archivo de configuración en /etc/modprobe.d
  • o en la línea de comando:

    # rmmod i915
    # modprobe i915 modeset=1
    

De hecho, no necesita hacer nada si instala el paquete xserver-xorg-video-intel, que crea /etc/modprobe.d/i915-kms.confcontenido options i915 modeset=1. Sin embargo, si alguien no quiere instalar X (como en mi caso), entonces KMS no está habilitado automáticamente, lo que explica por qué no se creó el dispositivo FrameBuffer ...

Federico
fuente
2
Todavía debe aceptar mi respuesta, porque "¿cómo enciendo KMS con Squeeze" no era su pregunta inicial. Creo que respondí a tu pregunta inicial y te indiqué el camino previsto. La otra razón, solo obtienes puntos por otorgar respuestas a 'otras' personas. Aunque es bueno auto-premiarse si nadie se acerca, en este caso no tiene sentido. Sin embargo, está bien mantener su respuesta publicada o integrar la información en cuestión. De cualquier manera estaría bien. ¡Realmente me alegro de haber ayudado! Estoy muy contento de que haya funcionado la solución KMS, ya que debería ser más rápida que VESA.
JM Becker
1
¡Acabo de cambiar la respuesta aceptada a la tuya! Al ser un poco nuevo aquí, no sabía exactamente qué hacer: poner la solución en la pregunta misma, en un comentario a su respuesta aceptada, o publicarla como una nueva respuesta. Pensé que al crear una nueva respuesta aceptada, la gente leería primero la pregunta, luego su respuesta que aparece en la parte superior ya que tiene más votos a favor y luego mi respuesta ...
Federico
Si bien la otra respuesta es exhaustiva, esta debería ser la respuesta aceptada. Independientemente de cuán elocuentemente suplica el autor.
Moog
-2

Puede probar un framebuffer virtual como Xvfb (X virtual framebuffer).

Descripción del paquete xvfb en squeeze

artifex
fuente
1. Este es un FrameBuffer 'virtual', no un FrameBuffer de hardware directo real. 2. Es un servidor X, y específicamente la pregunta no solicitó X.
JM Becker
-2

Mientras se trate de una instalación Debian estándar sin nada sofisticado y un kernel estándar, debería poder obtener una consola VGA contratada que use el dispositivo framebuffer con un parámetro de kernel como "vga = 792" (que es 24 bits 1024 × 768 ) Claro que el kernel lo informa como obsoleto, pero funciona.

Ver http://www.kernel.org/doc/Documentation/kernel-parameters.txt para los parámetros del kernel. Curiosamente, el parámetro "vga =" no se muestra como obsoleto.

Asegúrese de volver a ejecutar update-grub (2) y los Me gusta después del cambio.

También eche un vistazo a http://packages.debian.org/squeeze/svgalib-bin , no es perfecto, pero le permite hacer algunas cosas gráficas elegantes en una consola.

aseq
fuente
3
No, ya no funciona, en MUCHAS circunstancias. Esta es la respuesta que siempre estoy hablando. Si usa GRUB2, esto solo funciona al arrancar con las 16desaceleraciones heredadas . También está en desuso, lo que al menos reconoces, pragmáticamente, lo que significa que NO HAGAS NUEVAS CONFIGURACIONES CON ELLO. La vga=basura vieja no se iniciará si tiene sus módulos de hardware deshabilitados /etc/modprobe.d/y muchas distribuciones vienen preconfiguradas como tales.
JM Becker
Entonces, el siguiente problema es que svgalib-bin es una biblioteca, no un dispositivo '/ dev / fb0'. Cualquier cosa que quiera svgalib, debe desarrollarse con svgalib. Se puede usar para reemplazar un FB, pero no reemplaza 'literalmente' el FB. De hecho, cometí un error en el último comentario, cuando dije "no arrancar", quise decir "no cargar FB, probablemente volverá a vga estándar"
JM Becker
3
Esto realmente ni siquiera es tu culpa, nuestra comunidad deja documentación horriblemente desactualizada. Todo el mundo simula respuestas antiguas en Internet, lo que dificulta la comprensión moderna de las bestias. Mucha gente incluso simplemente se da por vencida, porque la respuesta real es nueva y está enterrada bajo años de soluciones obsoletas.
JM Becker
1
El parámetro "vga =" funciona cuando se usa squeeze. Simplemente lo sugerí, ya que es una solución rápida y fácil, en lugar de investigar con qué se reemplaza.kernel.org/doc/Documentation/kernel-parameters.txt no muestra "vga =" como obsoleto. La única razón por la que sé es debido a un mensaje de inicio rápido apenas legible por el núcleo ... se produce confusión ... así que de acuerdo con el texto en kernel.org "vga =" NO está en desuso. ¿Qué debemos creer?
aseq
1
Por cierto, mi sugerencia de usar svgalib es porque el usuario no quiere usar X. Entiendo a los culpables de svgalib, pero hay algunas otras opciones.
aseq