Gráficos Linux de baixo nível

11

Para fins educacionais, eu gostaria de escrever um aplicativo em um ambiente Linux que possa processar eventos de teclado e desenhar gráficos sem grandes dependências, como X ou SDL. Presumo que isso deve ser possível, porque X e SDL são apenas programas em si, portanto, eles devem confiar em outros métodos inerentes ao ambiente. Este entendimento está correto?

Em caso afirmativo, onde posso aprender a escrever esse programa? Minha experiência limitada me diz que isso envolveria fazer chamadas para o kernel e / ou gravar em arquivos especiais; no entanto, não consegui encontrar nenhum tutorial sobre o assunto (nem tenho certeza do que fazer com o Google).

Além disso, caso seja relevante, estou executando o Debian Squeeze no Virtualbox. Eu usei um CD netinst sem rede, portanto, não há muito instalado nele atualmente. Vou instalar gcc, mas espero poder me virar com nada mais.

math4tots
fonte
Não sei se é isso que você procura, mas dá cor. ncurses
Joe
Você pode dar uma olhada no Framebuffer do Linux .
Mouviciel 28/03/12
Além de X e fbdev, há também SVGALib, que não foi atualizado desde 2001.
user16764
Se você realmente deseja fazer programação bare-metal (por exemplo, chamar uma interrupção para definir o modo de vídeo), posso sugerir o DOS?
usar o seguinte comando
Isso parece útil: tldp.org/HOWTO/Framebuffer-HOWTO
Chinasaur

Respostas:

13

O X (ou o X Window System ) é praticamente a API gráfica de mais baixo nível que um aplicativo Linux provavelmente usará em um desktop Linux moderno. A maioria dos aplicativos nem se preocupa em ir tão fundo e, em vez disso, usa uma implementação de kit de ferramentas da GUI como GTK ou Qt.

Abaixo disso, existem apenas os drivers de hardware e provavelmente algumas APIs internas para os drivers. Mas esses não foram criados ou projetados para serem usados ​​por aplicativos normais do espaço do usuário.

Você pode usar o dispositivo framebuffer do kernel (fbdev), mas não sei o quão bem ele suporta a API gráfica moderna.

Edit: Wayland é uma alternativa ao X que só recentemente encontrou alguma adoção convencional. Agora é possível executar um Linux-Desktop puramente em Wayland sem nenhum sistema X-Windows em execução. O próprio Wayland depende de um driver EGL abaixo (uma API fortemente relacionada ao OpenGL).

Joachim Sauer
fonte
2
X é capaz de usar o framebuffer. O GTK e o Qt, embora normalmente tenham como alvo o X, também são capazes de atingir o buffer de quadros.
APROGRAMMAR 28/12 /
@ AProgrammer: isso é verdade, mas realmente não muda minha resposta. A maioria dos aplicativos GTK / Qt é executada no X como na estrutura subjacente (pelo menos por enquanto) e quase nenhum aplicativo usa a API X bruta diretamente.
Joachim Sauer
O framebuffer deve, no mínimo, suportar a execução da placa gráfica nos modos VESA padrão. Pode não ser perfeito (o número de diferentes resoluções é limitado, por exemplo, e não acho que nenhum modo widescreen seja suportado), mas fornecerá gráficos em um sistema Linux com um número mínimo de dependências.
a CVn
9

Se você deseja obter eventos de entrada sem usar o X, será necessário lê-los nos nós do dispositivo. O Linux possui um subsistema de entrada genérico chamado evdev, do qual a maioria dos drivers tira proveito. Portanto, para ler eventos de entrada, você pode ler de qualquer um dos nós do dispositivo em / dev / input.

Um truque fácil para encontrar o nó do dispositivo do mouse é executar "gato" nos nós do dispositivo, um de cada vez, movendo o mouse durante cada "gato". Se você vir dados saindo da tela, esse é o nó do dispositivo do mouse. O arquivo de cabeçalho relevante é linux / input.h. Para um exemplo de como usá-lo, consulte a fonte do driver xevdev.

Para manipulação de gráficos de baixo nível, se você está realmente se sentindo ambicioso, geralmente pode mapear a memória do buffer de quadros e fazer seus próprios bits de bits.

ssgriffonuser
fonte
3

Um bom tutorial para gráficos de baixo nível no Linux está disponível aqui .

Uma boa publicação sobre estouro de pilha para entrada de baixo nível está disponível aqui .

Independentemente, você provavelmente deseja usar o framebuffer ou o drm / kms (o framebuffer é o mais simples dos dois) para gráficos e evdev para entrada direta no Linux.

Vrealidade
fonte
Por que o voto negativo?
Vreality