Como posso adicionar um dispositivo framebuffer adicional no Linux?

13

Estou executando um Ubuntu 12.04 LTS como um servidor NAS doméstico, sem X. Recentemente, eu comecei a sintonizá-lo para servir como dispositivo de reprodução de vídeo também. Pode ter sido mais fácil instalar o X, mas decidi tentar o mplayer com a reprodução do framebuffer. 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 de framebuffer, /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 do fbterm apenas trava. Curiosamente, o visualizador de imagens fbi consegue visualizar 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 múltiplos ttys? Acrescentaria mais alguma ajuda para executar simultaneamente software que os utiliza? Como eu poderia adicionar mais?

Além disso, 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 cada tty, mas o fbi não. Além disso, o console padrão do Ubuntu (fbcon?) Mostra por trás da sobreposição de vídeo, o que me deixa estranho. O que é isso tudo?

    
por GolDDranks 01.11.2013 / 05:58

1 resposta

16

Como ninguém respondeu ainda, e depois de tediosas horas pesquisando e pesquisando, eu 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 eu usei fornece uma conexão direta entre um determinado dispositivo de hardware e o arquivo de dispositivo framebuffer, não faz sentido ter mais deles do que um dispositivo real.

Existe um driver para dispositivos virtuais de framebuffer, o vfb. (Nota: diferente do xvfb que é um framebuffer virtual para o X) Eu não testei isso sozinho, mas pode-se ter tantos dispositivos fb quanto se queira usar o dispositivo virtual. Eu também acho que, em princípio, nada impede que alguém canalize um dispositivo virtual para o dispositivo framebuffer de hardware, permitindo construir um multiplexador framebuffer

Sobre a conexão entre framebuffers e tty's: não há nenhum. O framebuffer é simplesmente desenhado na tela, desconsiderando qualquer coisa.

O que me confundiu originalmente é o comportamento do visualizador de imagens fbi. Acontece que ele inteligentemente verifica se o tty em execução está aberto ou não, e desenha para o framebuffer ou não de acordo com isso. (É por isso que ele se recusa a executar o SSH, ao contrário do mplayer - ele não aceita um pseudo terminal.) Mas a funcionalidade do tipo multiplexador não tem nada a ver com o framebuffer em si.

Se houver vários processos gravando no framebuffer, eles não bloquearão um ao outro . Acontece que meus problemas anteriores (travamentos e outros) usando vários programas fb simultaneamente não eram nem mesmo sobre o framebuffer. Pegue o terminal fbterm e rode o mplayer: não há problema. Os terminais fbterm e fbcon e o visualizador de imagem fbi são desenhados para buffer somente quando algo é atualizado, então o mplayer domina a tela virtualmente 100% do tempo. Mas se você tentar rodar dois mplayers, verá que os flickers mostram frames de um e de outro, enquanto tentam desenhar para o buffer com uma condição de corrida.

Alguns links úteis:

link

link

    
por 03.11.2013 / 05:58