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.


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

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).


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.


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.


Por que o voto negativo?
Vreality
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.