Nenhum dispositivo framebuffer: como habilitá-lo?

23

Estou tentando fazer com que uma placa sintonizadora PCMCIA funcione no meu servidor doméstico sem cabeça, executando o Debian Squeeze. Agora, como tenho grandes problemas para encontrar a linha de comando correta para capturar, transcodificar e transmitir o vídeo para a rede usando o VLC, decidi ir passo a passo e trabalhar primeiro na saída local.

É aí que entra o problema: parece não haver um dispositivo buffer de quadro (/ dev / fb0) para acessar para exibir gráficos na tela anexada! E, de fato, notei que não tenho a imagem do pinguim do Linux na inicialização (não prestei atenção antes, pois a tela é anexada, mas sempre desligada e, de qualquer maneira, o computador está sempre ligado).

Como não estou muito familiarizado com os gráficos do Linux, gostaria de entender:

  • Isso está relacionado ao meu hardware específico (veja abaixo)? Ou é específico do Debian Squeeze / uma versão do kernel / ...?
  • Existe algum driver que eu preciso instalar / carregar manualmente?

Agora, algumas informações gerais:

  • O computador não possui placa gráfica dedicada, mas um chipset gráfico incorporado (Intel G31 Express), incorporado na placa-mãe (Gigabyte G31M-ES2L)
  • Não quero instalar um servidor X com todos os recursos, basta ter um dispositivo buffer de quadro para este teste específico

Alguma idéia / comentário sobre o assunto?

Federico
fonte
1
Depois de começar a /dev/fb0funcionar, aceite minha resposta. Raramente as pessoas com experiência real em um tópico menos comum, dão a volta para dar uma resposta no QG. Eles existem no UNIX-SE, é um assunto relativamente incomum, portanto existem menos especialistas.
JM Becker

Respostas:

36

Posso responder à sua pergunta, tendo trabalhado anteriormente com o Linux FB.

Como o Linux faz o seu FB.

  1. Primeiro, você precisa do suporte do FrameBuffer no seu kernel, correspondente ao seu hardware. A maioria das distribuições modernas tem suporte via módulos do kernel. Não importa se sua distribuição vem pré-configurada com um logotipo de inicialização, eu não uso uma e tenho suporte ao FB.

  2. Não importa se você possui uma placa de vídeo dedicada, a integrada funcionará enquanto o Hardware Framebuffer for suportado.

  3. Você não precisa do X, que é o aspecto mais atraente de ter o FrameBuffer. Algumas pessoas não sabem melhor, então defendiam alguma forma de X para solucionar seus mal-entendidos.

  4. Você não precisa trabalhar diretamente com o FB, o que muitas pessoas assumem incorretamente. Uma biblioteca muito impressionante para o desenvolvimento com o FrameBuffer é que DirectFBela possui algum suporte básico à aceleração. Eu sempre sugiro pelo menos dar uma olhada, se você estiver iniciando um projeto completo com base em FB (Web Browser, Game, GUI ...)

Específico ao seu hardware

  1. Use o Vesa Generic FrameBuffer, seus módulos são chamados vesafb. Você pode carregá-lo, se tiver disponível, com os comandos modprobe vesafb. muitas distribuições o pré-configuram como desativado, você pode fazer o check-in /etc/modprobe.d/. blacklist vesafbpode ser necessário comentar com um #, em um blacklist-framebuffer.confou outro arquivo da lista negra.

  2. A melhor opção é um driver KMS específico de hardware. O principal para a Intel é o Intel GMA, sem ter certeza do nome de seus módulos. Você precisará ler sobre isso nos seus documentos de distribuição. Esta é a opção FB com melhor desempenho; eu pessoalmente sempre faria o KMS primeiro, se possível.

  3. Use os drivers FB específicos do hardware herdado, não recomendado, pois às vezes são de buggy. Eu evitaria essa opção, a menos que fosse necessário o último recurso.

Acredito que isso cobre todas as suas perguntas e deve fornecer as informações para /dev/fb0disponibilizar esse dispositivo. Qualquer coisa mais específica precisaria de detalhes de distribuição e, se você tiver alguma experiência, RTFM deve ser tudo o que você precisa. (depois de ler isso).

Espero ter ajudado, sua sorte está perguntando sobre um dos meus tópicos! Este é um assunto negligenciado no UNIX-SE, pois nem todos (conscientemente) usam o Linux FrameBuffer.

NOTA: UvesaFB ou VesaFB?

Você pode ter lido as pessoas usam uvesafbdemais vesafb, pois teve melhor desempenho. Isso geralmente era verdade, mas não em uma distribuição moderna com o hardware moderno. Se o seu hardware gráfico suportar o modo protegido VESA (VESA> = 2.0) e você tiver um kernel um tanto recente, vesafbagora é uma escolha melhor.

JM Becker
fonte
1
Muito obrigado pela sua resposta !!! Está muito além do que eu esperava em termos de profundidade e qualidade !! Eu realmente aprecio quando posso encontrar postagens / respostas como a sua, porque elas não apenas fornecem soluções para uma questão específica, mas, mais importante, fornecem informações gerais sobre o trabalho interno que podem ser úteis para outras pessoas nas mesmas situações ou em situações relacionadas!
Federico
1
No que diz respeito o meu problema, eu vou olhar para ele com base em sua entrada e relatório de volta aqui logo que eu obter resultados satisfatórios ...
Federico
3
Então tentei modprobe vesa(que lembro de ter tentado antes de fazer a pergunta aqui) que falha porque o módulo não existe no meu sistema ( FATAL: Module vesafb not found.) -> terá que entender se isso está relacionado ao meu hardware ou à minha distribuição Linux (Debian Squeeze ) A boa notícia é que modprobe uvesafbfunciona e cria o /dev/fb0dispositivo. No entanto, agora que eu li sua resposta, vou tentar coisas configuração da maneira adequada e encontrar o driver KMS ...
Federico
1
Votei seus comentários, estou animado por poder ajudar !. Para abordar seu último comentário, você está incorreto sobre a solução 2. Você pode ABSOLUTAMENTE obter um KMS sem X, mas, como eu disse, respostas reais estão literalmente se afogando no lixo. O nome do módulo de hardware correto é chamado inteldrmfb, descobri fazendo uma pesquisa rápida. Eu sempre tenho ATI, portanto, o suporte relacionado à GPU da Intel não é meu ponto forte. Você pode precisar instalar um pacote para ele, mas vou ver se consigo descobrir.
JM Becker
1
Opa, cometi um erro ... Acabei de verificar meu netbook Intel e o módulo é i915, mas ele carrega o Framebuffer conhecido como inteldrmfb. Pode ser necessário instalar o pacote libdrm-intel1ou verificar se ele está instalado.
JM Becker
10

Finalmente encontrei a solução para o meu problema !!

Antes de tudo, muito obrigado a todos que contribuíram e, em particular, ao TechZilla e à explicação detalhada que ele forneceu sem a qual acho que teria desistido há muito tempo!

Então, basicamente, tudo o que precisa ser feito é ativar o modesetting ( modeset=1) quando o i915módulo do kernel carregar. Isso pode ser feito da maneira usual:

  • através do parâmetro do kernel do GRUB,
  • através de um arquivo de configuração /etc/modprobe.d
  • ou na linha de comando:

    # rmmod i915
    # modprobe i915 modeset=1
    

De fato, você não precisa fazer nada se instalar o pacote xserver-xorg-video-intel, o que cria o /etc/modprobe.d/i915-kms.confcontendo options i915 modeset=1. No entanto, se alguém não quiser instalar o X (como no meu caso), o KMS não será ativado automaticamente, o que explica por que o dispositivo FrameBuffer não foi criado ...

Federico
fonte
2
Você ainda deve aceitar minha resposta, porque "como ativar o KMS com compressão" não foi sua pergunta inicial. Creio que respondi à sua inicial e indiquei o caminho que você pretendia. A outra razão, você só ganha pontos por conceder respostas a outras pessoas. Embora seja bom se auto-premiar se ninguém chegar perto, neste caso, não faz sentido. Você pode manter sua resposta publicada ou integrar as informações em questão. De qualquer maneira, tudo bem. muito feliz por ter ajudado! Estou realmente feliz que você tenha a solução KMS funcionando, pois ela deveria ser mais rápida que a VESA comum.
JM Becker
1
Acabei de alterar a resposta aceita à sua! Sendo um pouco novo por aqui, não sabia exatamente o que fazer: colocar a solução na pergunta em si, em um comentário à sua resposta aceita ou postar como uma nova resposta. Eu percebi que através da criação de uma nova resposta aceita, as pessoas iriam ler pela primeira vez a questão, então a resposta que vem no topo uma vez que tem mais upvotes e então a minha resposta ...
Federico
Embora a outra resposta seja completa, essa deve ser a resposta aceita. Independentemente de quão eloquentemente o autor implore.
Moog
-2

Você pode experimentar um framebuffer virtual como o Xvfb (X virtual framebuffer).

Descrição do pacote xvfb no squeeze

artifex
fonte
1. este é um FrameBuffer 'virtual', não um FrameBuffer de hardware direto real. 2. Sua um servidor X, e, especificamente, a questão solicitada no X.
JM Becker
-2

Contanto que esta seja uma instalação debian padrão sem nada sofisticado e um kernel padrão, você poderá conseguir um console VGA contratado que use o dispositivo framebuffer com um parâmetro de kernel como "vga = 792" (24 bits 1024 × 768 ) Certamente, o kernel o relata como obsoleto, mas funciona.

Veja http://www.kernel.org/doc/Documentation/kernel-parameters.txt para obter os parâmetros do kernel. Curiosamente, o parâmetro "vga =" não aparece como obsoleto.

Certifique-se de executar novamente o update-grub (2) e os gostos após a alteração.

Também dê uma olhada em http://packages.debian.org/squeeze/svgalib-bin . Não é perfeito, mas permite que você faça algumas coisas gráficas sofisticadas em um console.

aseq
fonte
3
Não, não funciona mais, em MUITAS circunstâncias. Esta é a resposta imitando que eu estou sempre falando. Se você usar o GRUB2, isso funcionará apenas ao inicializar com as 16desacelerações herdadas . Também está obsoleto, o que pelo menos você reconhece, pragmaticamente significa que NÃO FAZ NOVAS CONFIGURAÇÕES COM ELE. O vga=lixo antigo falhará na inicialização, se você tiver seus módulos de hardware desabilitados /etc/modprobe.d/e muitas distribuições forem pré-configuradas como tal.
JM Becker
Portanto, o próximo problema, svgalib-bin, é uma biblioteca, não um dispositivo '/ dev / fb0'. Qualquer coisa que queira svgalib, precisa ser desenvolvido com o svgalib. Ele pode ser usado para substituir um FB, mas não "literalmente" substitui o FB. Eu realmente cometeu um erro último comentário, quando eu disse "deixar de boot', eu quis dizer 'não conseguir carregar FB, provavelmente irá fallback para VGA padrão'
JM Becker
3
Isso realmente não é culpa sua, nossa comunidade deixa documentação terrivelmente desatualizada. Todo mundo imita respostas antigas em toda a Internet, dificultando um entendimento moderno. Muitas pessoas simplesmente desistem, porque a resposta real é nova e oculta em anos de imitação de soluções obsoletas.
JM Becker
1
O parâmetro "vga =" funciona ao usar o aperto. Eu apenas o sugeri, pois é uma solução rápida e fácil, em vez de pesquisar o que é substituído. O kernel.org/doc/Documentation/kernel-parameters.txt não mostra "vga =" como obsoleto. A única razão pela qual eu sei é devido a uma mensagem de inicialização rápida e pouco legível pelo kernel ... a confusão segue ... então, de acordo com o texto em kernel.org "vga =" NÃO está obsoleto. Em que devemos acreditar?
aseq
1
A propósito, minha sugestão de usar o svgalib é porque o usuário não quer usar o X. Eu entendo os culpados do svgalib, mas existem algumas outras opções.
aseq