Framebuffer no Boot: 1400×900 com módulo NVIDIA

Encontrei um pequeno desafio para minha vida geek… hehehe.

Até então, estava eu utilizando um monitor de 15″ com resolução nativa de 1024×768; como disse, até então.

Consegui vender tal monitor LCD e com isso agora sou o felizardo dono de um Flatron W1752T (LG) (17″ Wide com resolução nativa de 1400×900).

LG Flatron W1752T

Em um primeiro momento, nem dei muita bola para a resolução no boot (1024×768 ) e sim pela configuração no X (/etc/X11/xorg.conf), que me permitiu não fazer nada para que esta se auto ajustasse a nova resolução nativa, e eu deslumbrasse com o visual incrível com que o KDE 4.2 se mostrou.

Mais sabe como são as coisas nesta vida nerd (neh?)… nada nunca está perfeito! E toda vez quando nos deparamos com alguma imperfeição, o que fazemos? Sim, escovamos bits! (rss)

A primeira coisa que pensei, foi em simplesmente descobrir os “números mágicos“  que podem ser utilizados na parâmetro “vga” nas linhas referentes ao carregamento da imagem do kernel em /boot/grub/menu.lst que estaria tudo resolvido. Não deu certo, pois, por padrão, o módulo utilizado para fornecer o framebuffer no boot é o vesafb, e ele trabalha apenas com resoluções á 4:3 não suportando opções em 16:10.

Até eu descobrir isso, passou um tempo e precisei baixar o hwinfo no AUR , compilar e instalar o software. Depois de instalado rodei um hwinfo –framebuffer que me retornou os modos de operação:

02: None 00.0: 11001 VESA Framebuffer                                                               
  [Created at bios.447]                                                                             
  Unique ID: rdCR.G89VdJ4sMmF                                                                       
  Hardware Class: framebuffer                                                                       
  Model: "NVIDIA G86 Board - p403h20 "                                                              
  Vendor: "NVIDIA Corporation"                                                                      
  Device: "G86 Board - p403h20 "                                                                    
  SubVendor: "NVIDIA"                                                                               
  SubDevice:                                                                                        
  Revision: "Chip Rev"                                                                              
  Memory Size: 14 MB                                                                                
  Memory Range: 0xe9000000-0xe9dfffff (rw)
(...)
Mode 0x0364: 1440x900 (+1440), 8 bits
Mode 0x0365: 1440x900 (+5760), 24 bits
(...)

O “x” da questão é que o Módulo nvidia no kernel, estava carregado, e isso faz com que os modos suportados por ele sejam mostrados; estas resoluções, como disse, não são suportadas no vesafb.

Sabendo desse modo ( 0×0365), minha primeira tentativa foi passar o parâmetro para o kernel no carregamento do sistema. Para isso modifiquei a linha referente a isto em /boot/grub/menu.lst:

kernel /boot/vmlinuz26 root=/dev/mapper/nvidia_abacfabc3 video=vesafb:nomtrr,1440×900-32@60 vga=0×365 ro

Se repararem bem, faz sentido, mas em meu próximo boot, nada aconteceu! Por que?

Esta é mais simples de responder… hehehe.. simplesmente porque estou usando o vesafb e não o módulo nvidia. Para resolver meu problema, resolvi enfiar o módulo da nvidia diretamente na initrd (/boot/kernel26.img).

O procedimento é fácil… basta editar o arquivo /etc/mkinitcpio.conf, adicionando o módulo da nvidia na linha MODULES, deixando o arquivo conforme o exemplo:

MODULES=”dm_mod pata_acpi pata_amd ata_generic scsi_mod sata_nv sata_via jfs xfs reiserfs nvidia”

Após isto, salvei o arquivo e gerei uma nova imagem de disco de ram para o kernel através do mkinitcpio -p kernel26 . Então editei novamente o /boot/grub/menu.lst e fiz esta alteração:

kernel /boot/vmlinuz26 root=/dev/mapper/nvidia_abacfabc3 video=nvidiafb:nomtrr,1440×900-32@60 vga=0×365 ro

Salvei, reiniciei e voilá.. funcionando perfeitamente; como eu queria:

- Resolução de boot a 1440×900.

Só não tentei utilizar o nvidiafb antes de carregar o módulo da nvidia na initrd.. então não sei responder no momento se este passo do mkinitcpio seria necessário.  Coisa linda ficou o modo verbose no boot de meu linux assim!

Algumas informações podem ser encontradas nos links abaixo:

http://bbs.archlinux.org/viewtopic.php?id=25133

http://tldp.org/HOWTO/Framebuffer-HOWTO-5.html

http://www.linuxquestions.org/questions/debian-26/guide-to-2.6-kernel-upgraderecompile-206992/page16.html

http://www.mail-archive.com/debian-user-portuguese@lists.debian.org/msg107891.html

  1. Adelson
    09/02/2009 às 16:29 | #1

    ehehhe…
    Ô saudade dessas coisas de nerd..
    ;)

  1. No trackbacks yet.