Como posso definir o modo de vídeo no Linux de maneira de baixo nível? Tanto quanto sei, a camada mais baixa no espaço do usuário seria solicitar o KMS via DRM. Isso está correto? E, em caso afirmativo, como obter uma chave de modo e acessar a "memória de vídeo" associada?
12
Respostas:
O KMS - configuração do modo kernel, para quem nunca ouviu falar dela - é possível graças aos drivers de vídeo no modo kernel. Esses drivers de vídeo no modo kernel configuram um buffer de quadro que, por padrão, é a resolução nativa do (s) monitor (es) conectado (s). Se houver mais de um monitor conectado, cada monitor terá sua resolução nativa e o console virtual ficará restrito à largura e altura mínimas dos dois monitores.
Como o uso do KMS resulta em um buffer de estrutura, os itens de configuração do buffer de estrutura devem funcionar. Não posso verificar isso no sistema em que estou atualmente, porque ele não possui um driver KMS. Mas estarei em um sistema mais tarde com o KMS e informarei.
Consulte a documentação do kernel sobre os modos de configuração com o parâmetro video = boot up para framebuffers para obter mais informações.
fonte
Não sei se você realmente sabe o que está pedindo, caso contrário, você o teria formulado de uma maneira que seja responsável. ... Mas, para fazer o meu melhor, respondendo à sua pergunta.
Deseja definir um modo e reduzir a "memória de vídeo"? como o antigo modo dos X dias? Se é isso que você deseja, você precisa programar com o Framebuffer. Com isso dito, seria muito melhor trabalhar com o DirectFB. O DirectFB é como uma camada muito fina, com aceleração, no Framebuffer. Seu nível baixo e, na verdade, é o mais baixo que você poderia razoavelmente desejar escrever aplicativos. Você seria capaz de definir modos e ter controle em um estilo de nível mais baixo. Se você deseja um controle direto direto do estilo, precisa escrever Raw do Framebuffer, basicamente cria um mapeamento de alguma ram de vídeo. Se você acha que o Framebuffer tem um desempenho ruim, não posso enfatizar o suficiente, confira o DirectFB. Se alguém tiver um driver KMS carregado, seu Framebuffer será definido via KMS / libdrm.
Agora, quanto ao libdrm, é um lib do espaço do usuário para trabalhar com o DRM do kernel. Não é um framebuffer, não é uma API de aplicativo, é uma biblioteca de dispositivos do sistema. Se você deseja criar um novo driver de dispositivo, libdrm é o caminho absoluto. Por exemplo, libdrm-radeon. Linux não é DOS, a única maneira de se comunicar diretamente com o hardware é através do kernel. Todos os aplicativos normais nunca enviam código diretamente para o hardware, ele deve ser desativado em alguma lib / API / chamada. Existem projetos que adotaram a abordagem no kernel, para fins acadêmicos / experimentais, como o FBUI.
Espero poder pelo menos ter apontado você na direção certa; caso contrário, você deve comentar e também atualizar sua pergunta. Eu segui essa pergunta desde a sua concepção, que foi há pelo menos duas migrações atrás e nem perto de responder. Sem mais informações, realmente não há mais o que dizer.
fonte