Então, eu tenho um modelo Palm Pre (P100EWW original) no qual ativei o modo de desenvolvedor e instalei um chroot Debian Squeeze. Funciona bem. Tenho planos de usar isso para QUALQUER COISA (ponto bittorrent, servidor web), mas para um telefone.
Notei que se eu fizer um, cat /dev/urandom > /dev/fb0
ele realmente grava pixels aleatórios na tela até que um No space left on device
erro seja gerado. Impressionante, agora eu posso usar a tela.
Então, que tipo de utilitários existem: A) me permite usar / dev / fb0 como um console para o qual posso enviar texto ou B) renderizar texto em / dev / fb0 na linha de comando.
Ainda não sei como recompilar o kernel para isso (eu adoraria remover completamente o WebOS e transformá-lo em um servidor ARM mínimo), para que as ferramentas de espaço do usuário, se existirem, sejam o que estou perguntando. Também prefere renderizar diretamente para / dev / fb0 e não usar X.
fonte
Respostas:
Para usar o framebuffer como console, você precisa do
fbdev
módulo. Você pode ter que recompilar seu kernel.Você também pode estar interessado no projeto DirectFB, que é uma biblioteca que facilita o uso do buffer de quadros. Também existem aplicativos e ambientes de GUI criados para ele.
fonte
dfbg
que me permite colocar uma foto lá (e não a remove após a conclusãofbi
). Eu sei que provavelmente pode encontrar uma utilidade para criar uma .png ou similar a partir de um texto do bloco de modo que este só poderia trabalhar ...Várias pessoas responderam às partes da sua pergunta que tratam do kernel e colocam imagens (em vez de texto) no buffer de quadros, mas até agora o restante permanece sem solução. Sim, você pode usar o subsistema de terminal virtual do kernel para criar um console chamado framebuffer . Porém, existem várias ferramentas que permitem usar o dispositivo buffer de estrutura para criar terminais virtuais no espaço do usuário . Esses incluem:
console-terminal-emulator
andconsole-fb-realizer
tools in nosh - um terminal virtual no espaço do usuário destinado a replicar os terminais virtuais do kernel Linux e FreeBSD / PC-BSD. Também não possui dependências nas bibliotecas X.logind
servidor no systemd e suas noções de "assentos".Ali Gholami Rudi, em particular, produziu mais do que apenas um emulador de terminal para o trabalho de buffer de quadros. Ele também escreveu um visualizador de PDF direto no framebuffer, visualizador VNC, media player e leitor de Alcorão.
Uma comparação lado a lado completa está fora do escopo desta resposta; mas aqui estão alguns pontos relevantes para a pergunta:
fbpad
e as ferramentas nosh por design não fazem uso de nenhuma biblioteca X.bdftobogl
ferramenta; e um converte TTF nas fontes "tinyfont" usadas pelo fbpad com a ferramenta ft2tf ( Arch ).console-fb-realizer
ferramenta nosh usa as mesmas fontes "vt" que o novo subsistema de terminal virtual do kernel do FreeBSD 10.1 e, portanto, compartilha a ferramenta de manipulação de fontes do FreeBSDvtfontcvt
para a conversão de fontes BDF.console-convert-kbdmap
ferramenta. Novamente, esses arquivos kbdmap são os usados com o subsistema FreeBSD / PC-BSD vt .login
./etc/ttys
(BSD),/etc/inittab
(sistema Linux 5init
) ou outro, ao qual eles deixam o trabalho de gerar getty / login / shell.console-fb-realizer
precisa apenas de privilégios suficientes para abrir o buffer de quadros e os dispositivos de eventos de entrada, que não precisam ser privilégios de superusuário, e acessar os FIFOs e arquivos comuns mantidos porconsole-terminal-emulator
, que, por sua vez, não precisam de privilégios especiais.Todos estes são emuladores de terminais, é claro. Se você deseja remover a emulação de terminal e colocar o texto no buffer de moldura mais diretamente, você tem algumas opções:
console-terminal-emulator
.console-fb-realizer
usa um arquivo de exibição com uma matriz de células de caracteres, como/dev/vcsa*
um arquivo comum (não um arquivo de dispositivo especial de caracteres) e com pontos de código Unicode, atributos ECMA-48 e cores RGB de 24 bits. Assim, é possível executá-lo e simplesmente escrever caractere + atributo + cor diretamente no arquivo da matriz de células de caracteres, deixandoconsole-fb-realizer
a renderização da fonte no buffer de moldura.Como um aparte: Observe que isso é o oposto da integração com BRLTTY , que usa,
console-terminal-emulator
mas não executaconsole-fb-realizer
.fonte
fbcon
- dependendo das opções em tempo de compilação . Isso também se aplica ao emulador de terminal dependente Terminology : Works diretamente no linux framebuffer (fbcon) . Diferenteterminology
, eu segunda akmscon
(e outra obra de David Herrmann) recomendação mim .Se você pode gato
/dev/urandom > /dev/fb0
e obter pixels aleatórios na tela, você tem tudo o que precisa.No meu caso, eu precisava despejar algumas informações de texto. Eu testei isso no busybox e raspi, para que possa funcionar para você. A resposta pode demorar um pouco, pois se você não usar um console, será necessário imprimir os pixels dos caracteres. Felizmente, alguém fez o trabalho duro, por isso precisamos apenas combiná-lo.
No busybox ou no seu raspi, você deve ter um
fbset
binário. Isso pode ajudá-lo a descobrir suas configurações como dimensões da tela.No meu incorporado fica assim:
A parte importante aqui é a largura 480 e a altura 272 pixels.
Como você mencionou, você pode preencher a tela com
cat /dev/urandom > /dev/fb0
e você pode limpá-lo com
cat /dev/zeros > /dev/fb0
Depois de limpar sua tela, devemos garantir que você obtenha as dimensões corretamente.
Por acaso, meu busybox tinha um binário fbsplash que recebe como entrada um arquivo .ppm.
Correto se eu estiver errado, mas parece que
fb0
aceita esse formato. Dando uma olhada no Portable Anymap na Wikipedia , existem vários "subformatos" ... O fbsplash usa um sofisticado com cores, e assim por diante ... mas queremos ser capazes de imprimir algo legível. Vamos usar o P1 codificado em ASCII por uma questão de simplicidade. Se pudéssemos imprimir uma linha vertical, saberíamos que nossas dimensões estão corretas. Vamos tentar:Uma linha vertical em um tipo de ppm P1 deve ficar assim:
Portanto, haverá 272 linhas, 959 caracteres de largura. A documentação diz que deveria ser 1 em vez de f ... no busybox e raspi f era mais brilhante.
É importante que você não tenha espaço após o zero ... Essa tarefa pode ser um pouco entediante ... é melhor usar um editor de texto que o ajude. No vim, você pode copiar as duas primeiras linhas, vá para o modo de comando (esc) e digite os seguintes caracteres:
Claro, estou usando minhas dimensões, você deve usar as suas. Cat este arquivo para
/dev/fb0
, ele deve se parecer com:Ok, estou trapaceando ... não é apenas uma linha lá ... é cerca de 8 ... mas quando não funciona (temos dimensões erradas ou temos espaço no final, ter apenas uma linha é muito Mais fácil).
Se você chegou até aqui, temos apenas que imprimir os pixels certos para ver como caracteres. Graças a Marcel Sondaar e seu repo no GitHub , não precisaremos desenhar cada caractere.
Com um pequeno ajuste expandir seu programa simples para imprimir
f
em vez deX
e0
em vez de espaços, inserir espaços entre cada char, adicionar o cabeçalho e temos um arquivo .ppm com a letra correspondente a sua charCode.Um pequeno passo adiante e você não recebe um caractere como entrada, mas uma linha. Crie um arquivo, direcione para o seu programa e faça a saída
/dev/fb0
e você obtém uma saída de texto:Eu testei esta solução também em um raspberry pi e funcionou. O sistema me diz que não tenho reputação de postar mais de 2 links. Até eu entender isso, você deve confiar na minha palavra: D
fonte
No lado do console, você pode fazer eco de itens
/dev/console
ou usar o syslog e, dependendo de várias outras configurações, ele pode aparecer no console.Para imagens, tentei colocar um arquivo bmp no fb0 e ele realmente funcionou! (sortof - várias cópias, tamanho menor)
Encontrei um programa bmp para framebuffer aqui . Esse deve ser um exemplo perfeito do formato que o fb0 está esperando. Há também
fbi
um programa para gravar diretamente no buffer de quadros.fonte
fbi
permite-me colocar uma imagem na tela, o que é útil, mas limpa o buffer de quadros assim que sai.É um post antigo, mas normalmente entendo que você precisa do console do framebuffer (fbcon) para executar o console no framebuffer. Está na configuração. (drivers de dispositivo / gráficos / exibição do console ..)
fonte