Come posso aggiungere un dispositivo framebuffer aggiuntivo in Linux?


15

Sto eseguendo Ubuntu 12.04 LTS come server NAS domestico, senza X. Recentemente ho avuto modo di ottimizzarlo per servire anche come dispositivo multimediale per la riproduzione di video. A questo punto potrebbe essere stato più semplice installare X, ma ho deciso di provare mplayer con la riproduzione di framebuffer. Funzionava e tutto andava bene e bene.

Tuttavia, per curiosità e forse anche per conseguenze pratiche, non riesco a smettere di pensare ai framebuffer. Sembra che ci sia un solo dispositivo framebuffer, /dev/fb0. (A proposito. Sto usando il driver vesafs) Se eseguo più programmi che usano framebuffer, ne consegue il caos. Ad esempio, eseguire mplayer da fbterm lo blocca e basta. Curiosamente, il visualizzatore di immagini fbi riesce a visualizzare le immagini in qualche modo. Ovviamente i programmi non possono condividere il dispositivo, dopotutto non esiste un sistema di finestre.

Quindi, il numero di dispositivi (vesa) fb è limitato ai dispositivi di visualizzazione hardware? O potrebbe essercene di più in linea di principio, come se ci fossero più tty? Aggiungendo qualche aiuto in più eseguendo contemporaneamente il software che li utilizza? Come potrei aggiungere altro?

Anche la logica di come i framebuffer sono collegati a ttys non è abbastanza chiara per me ... per esempio, mplayer mostra il suo frame video su ogni tty, ma fbi no. Inoltre, la console predefinita di Ubuntu (fbcon?) Mostra dietro l'overlay video, il che mi rende strano. Che cosa è questa storia?

Risposte:


18

Dal momento che nessuno ha ancora risposto, e dopo ore noiose di ricerca su google e test, ho capito bene l'argomento, risponderò ...

Poiché l'interfaccia del dispositivo framebuffer è piuttosto generale, in linea di principio potrebbero esserci più dispositivi fb. Tuttavia, poiché il driver VESA che ho usato fornisce una connessione diretta tra un determinato dispositivo hardware e il file del dispositivo framebuffer, non ha senso averne più di quanti ne abbia uno reale.

C'è un driver per i dispositivi framebuffer virtuali, vfb. (Nota: diverso da xvfb che è un framebuffer virtuale per X) Non l'ho testato io stesso, ma si potrebbero avere tutti i dispositivi fb quanti si desidera utilizzare il dispositivo virtuale. Penso anche che nulla in linea di principio impedisca di connettere un dispositivo virtuale a un dispositivo framebuffer hardware, consentendo di costruire un multiplexer framebuffer

Informazioni sulla connessione tra framebuffer e tty: non ce n'è. Il framebuffer è semplicemente disegnato sullo schermo, ignorando qualsiasi cosa.

Ciò che mi ha inizialmente confuso è il comportamento del visualizzatore di immagini fbi. Si scopre che controlla abilmente se il tty in cui è in esecuzione è aperto o meno e attira o meno il framebuffer in base a quello. (Ecco perché si rifiuta di correre su SSH, a differenza di mplayer - non accetta uno pseudo terminale.) Ma la funzionalità simil-multiplexer non ha nulla a che fare con il framebuffer stesso.

Se ci sono più processi che scrivono su framebuffer, non si bloccano a vicenda . Si scopre che i miei problemi precedenti (crash e simili) utilizzando più programmi fb contemporaneamente non riguardavano nemmeno il framebuffer. Prendi il terminale fbterm ed esegui mplayer da esso: nessun problema. I terminali fbterm e fbcon e il visualizzatore di immagini fbi attingono al buffer solo quando qualcosa viene aggiornato, quindi il mplayer domina lo schermo praticamente il 100% delle volte. Ma se provi a far girare due mplayer, otterrai una vista che sfarfalla mostrando i frame dell'uno e dell'altro, mentre provano a disegnare sul buffer con una condizione di gara.

Alcuni link utili:

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

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


Se hai un piccolo display LCD secondario come secondario (pensa a 320x240 pixel, 3 pollici) usando fb1 ha senso. Ho un piccolo Adafruit adafruit.com/product/1601 uno che usa (solo) fb1. Il loro software è open source, ma la loro immagine del sistema operativo tenta di eseguire Linux con una GUI in 320x240 e fallisce miseramente. Come secondo dispositivo potrebbe essere OK, non lo uso da un paio d'anni. Vedi man mknod.
Alan Corey,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.