Como posso adicionar um dispositivo buffer de estrutura adicional no Linux?

15

Estou executando um Ubuntu 12.04 LTS como um servidor NAS doméstico, sem o X. Recentemente, comecei a ajustá-lo para servir também como um dispositivo de reprodução de vídeo. Talvez fosse mais fácil instalar o X, mas decidi tentar o mplayer com a reprodução de buffer de quadros. Funcionou, e tudo estava bem e bem.

No entanto, por curiosidade e talvez também por consequências práticas, não consigo parar de pensar em framebuffers. Parece haver apenas um dispositivo buffer de quadro /dev/fb0,. (Btw. Estou usando o driver vesafs) Se eu executar vários programas que usam framebuffers, o caos se instala. Por exemplo, rodar o mplayer a partir do fbterm apenas o trava. Curiosamente, o visualizador de imagens do fbi consegue visualizar as imagens de alguma forma. Obviamente, os programas não podem compartilhar o dispositivo, afinal não há sistema de janelas.

Então, o número de dispositivos (vesa) fb é limitado a dispositivos de exibição de hardware? Ou poderia haver mais em princípio, como existem vários ttys? Adicionaria mais alguma ajuda para executar simultaneamente o software que os utiliza? Como eu poderia adicionar mais?

Também a lógica de como os framebuffers estão conectados ao ttys não é muito clara para mim ... por exemplo, o mplayer mostra seu quadro de vídeo em todos os ttys, mas o fbi não. Além disso, o console padrão do Ubuntu (fbcon?) Aparece por trás da sobreposição de vídeo, o que me parece estranho. O que é isso tudo?

GolDDranks
fonte

Respostas:

18

Como ninguém respondeu ainda, e depois de horas tediosas de pesquisar e testar, entendi o assunto, vou responder ...

Como a interface do dispositivo framebuffer é bastante geral, pode haver mais dispositivos fb em princípio. No entanto, como o driver VESA que usei fornece uma conexão direta entre um determinado dispositivo de hardware e o arquivo do dispositivo framebuffer, não faz sentido ter mais deles do que os dispositivos reais.

Existe um driver para dispositivos virtuais de buffer de quadros, vfb. (Nota: diferente do xvfb, que é um buffer de estrutura virtual para o X) Eu não testei isso sozinho, mas é possível ter tantos dispositivos fb quanto desejar usando o dispositivo virtual. Eu também acho que nada, em princípio, impede alguém de canalizar um dispositivo virtual para um dispositivo de buffer de estrutura de hardware, permitindo construir um multiplexador de buffer de estrutura

Sobre a conexão entre framebuffers e tty's: não existe. O framebuffer é simplesmente atraído para a tela, desconsiderando qualquer coisa.

O que me deixou originalmente confuso é o comportamento do visualizador de imagens do fbi. Acontece que ele habilmente verifica se o tty em que está sendo executado está aberto ou não, e atrai para o buffer de quadros ou não de acordo com isso. (É por isso que ele se recusa a executar o SSH, diferentemente do mplayer - ele não aceita um pseudo terminal.) Mas a funcionalidade semelhante ao multiplexador não tem NADA a ver com o buffer de quadros propriamente dito.

Se houver vários processos gravados no framebuffer, eles não se bloquearão . Acontece que meus problemas anteriores (travamentos e coisas assim) usando vários programas fb simultaneamente não eram sobre o framebuffer. Pegue o terminal fbterm e execute o mplayer a partir dele: não há problema. Os terminais fbterm e fbcon e o visualizador de imagens fbi são armazenados em buffer somente quando algo é atualizado; portanto, o mplayer domina a tela praticamente 100% do tempo. Mas se você tentar rodar dois mplayers, terá uma visão que pisca mostrando os quadros de um e de outro, enquanto eles tentam atrair o buffer com uma condição de corrida.

Alguns links úteis:

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

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

GolDDranks
fonte
Se você tem um pequeno 2º monitor LCD secundário (pense em 320x240 pixels, 3 polegadas) usando fb1, isso faz sentido. Eu tenho um pouco de Adafruit adafruit.com/product/1601 que usa (apenas) fb1. Seu software é de código aberto, mas sua imagem do sistema operacional tenta executar o Linux com uma GUI em 320x240 e falha miseravelmente. Como um segundo dispositivo, pode ser bom, não o uso há alguns anos. Veja man mknod.
Alan Corey