Modificando o driver fglrx para nova versão do Xorg (Debian Sid)

Drivers proprietários são realmente problemáticos. Nos últimos dias tive um bom exemplo disso, quando o X em meu Debian Sid amd64, configurado para utilizar o driver proprietário da ATI, fglrx, inesperadamente parou de funcionar. Através do log, verifiquei a seguinte mensagem:


X version mismatch - detected X.org 1.3.0.0, required X.org 7.1.0.0

O “problema” na verdade era que o Debian havia alterado a numeração no versionamento do pacote xserver-xorg-core em seu branch ‘unstable’ e o driver fglrx utilizava justamente essa numeração (como através de um `/usr/bin/Xorg -version`) para verificar a compatibilidade. Bem, a primeira vista, parecia que se tratava de algo trivial, que um simples ajuste em determinado ‘#define’ no fonte bastaria, mas… onde estão os fontes? Lamentavelmente, a ATI não os disponibiliza, entregando apenas os binários, justamente onde se encontra essa verificação.

Porém, procurando um pouco mais, supreendentemente encontrei um pessoal que estava corrigindo esse problema de uma forma bem, hã, interessante. Basta realizar algumas minúsculas alterações no seu binário e pronto. A teoria explicada parece bem simples (basta substituir umas instruções ‘js’ por ‘jns’), mas longe de ser algo que eu seja capaz de fazer com tanta facilidade :p

But talk is cheap… Vamos ao que interessa.

Primeiramente, verifiquei que a versão do driver fglrx que eu possuia instalado não estava na listagem de versões que o script corrigia e precisei baixar do site da AMD/ATI o instalador com a versão mais recente do driver (8.36.5).
Para instalar a nova versão do driver, segui este roteiro desenvolvido para o Ubuntu Edgy. Desinstalei a versão anterior e gerei os pacotes .deb a partir do instalador com:


# chmod +x ati-driver-installer-8.36.5-x86.x86_64.run
# ./ati-driver-installer-8.36.5-x86.x86_64.run --buildpkg Debian/sid

Removi os arquivos fglrx-* do diretório /usr/src e, utilizando dpkg, instalei os pacotes .deb gerados pelo instalador:


# dpkg -i fglrx-kernel-src_8.36.5-1_amd64.deb
# dpkg -i fglrx-amdcccle_8.36.5-1_amd64.deb
# dpkg -i fglrx-driver_8.36.5-1_amd64.deb
# dpkg -i fglrx-driver-dev_8.36.5-1_amd64.deb

Após a instalação dos pacotes, execute ‘apt-get -f install’ a fim de corrigir qualquer provável problema com dependências.
Em seguida, utilizando module-assistant, compilei e instalei a nova versão do driver automaticamente:


# module-assistant build fglrx
# module-assistant install fglrx
# depmod -ae

Agora sim, necessitamos modificar os binários. No script http://kanotix.com/files/install-fglrx-debian.sh você poderá encontrar o trecho em sed para alterar o driver na versão desejada. No meu caso (versão 8.36.5), bastou aplicar as linhas abaixo ao arquivo fglrx_drv.so (localizado no diretório /usr/lib/xorg/modules/drivers/).


# sed -i 's/\xe8\xaa\x72\xfe\xff\x85\xc0\x7f\x23/\xe8\xaa\x72\xfe\xff\x85\xc0\x90\x90/' /usr/lib/xorg/modules/drivers/fglrx_drv.so
# sed -i 's/\x0f\x88\x3b\x08\x00\x00/\x90\xe9\x3b\x08\x00\x00/' /usr/xorg/modules/drivers/fglrx_drv.so

Sim, isto é feio; os próprios criadores concordam (” Our patches are just ugly hacks…”), mas “funciona” :D.
Feito isso, agora basta alterar o seu arquivo /etc/X11/xorg.conf para utilizar o driver fglrx novamente, reiniciar o X e voilá.

Fonte:
http://www.rage3d.com/board/showthread.php?t=33889029
http://wiki.cchtml.com/index.php/Ubuntu_Edgy_Installation_Guide#Method_2:_Install_the_8.35.5_Driver_Manually

Publicidade

2 comentários sobre “Modificando o driver fglrx para nova versão do Xorg (Debian Sid)

  1. Fmz rapa, pena que essa porcaria de driver é proprietário. Você já deu uma investigada em como anda o estado dos drivers livres que rola para ATI? Aqui com a nvidia é a mesma porcaria 😦 , sorte que no meu note tem Intel agora 🙂

    Abraços rapa!

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s