Arquivo

Arquivo de abril, 2010

Como instalar o driver ATI Catalyst 10.4 no Debian com Kernel 2.6.33

29 de abril de 2010

Depois de meses de espera no dia 28 de abril de 2010 foi oficialmente lançado o driver para as placas de video ATI Catalyst versão 10.4 com suporte ao Xorg 7.5 em virtude do lançamento do Ubuntu 10.04 AKA Lucid.

Contudo esta versão não funciona com kernel 2.6.33, mas esta lista de bugs do gentoo tem um patch que permite a compilação sem problemas.

Basicamente os erros são estes:

- No arquivo /usr/share/ati/fglrx-install.log:

cd /var/lib/dkms/fglrx/8.723/build; sh make.sh --nohints \
   --uname_r=2.6.33.2-diesel-amd64-1 --norootcheck....(bad exit status: 1)
0
0
[Error] Kernel Module : Failed to build fglrx-8.723 with DKMS
[Error] Kernel Module : Removing fglrx-8.723 from DKMS

- O arquivo /var/lib/dkms/fglrx/8.723/build/make.log apresenta os erros:

firegl_public.c:1473: error: variable or field ‘__ret’ declared void
firegl_public.c:1473: error: variable or field ‘__old’ declared void
firegl_public.c:1473: error: variable or field ‘__new’ declared void
make[2]: ** [/var/lib/dkms/fglrx/8.721/build/2.6.x/firegl_public.o] Erro 1
make[1]: ** [_module_/var/lib/dkms/fglrx/8.721/build/2.6.x] Erro 2
make[1]: Saindo do diretório `/usr/src/linux-2.6.33.2'

 

Passos para a instalação 

 

Estes passo foram realizados utilizando um kernel versão 2.6.33.2 amd64 em um Debian Squeeze para uma Radeon Mobility HD 3200

1. Baixar o arquivo ati-driver-installer-10-4-x86.x86_64.run de http://support.amd.com

2. Tornar o arquivo executável:

#chmod 755 ati-driver-installer-10-4-x86.x86_64.run

3. Extrair os arquivos de instalação para a pasta ati-installer (ou outra qualquer)

./ati-driver-installer-10-4-x86.x86_64.run --extract ati-installer

4. Baixar o arquivo 2.6.33-10.2-fix_compilation.patch e copiar para a pasta ati-installer/common/lib/modules/fglrx/build_mod

5. Ir para a pasta ati-installer/common/lib/modules/fglrx/build_mod e aplicar o patch:

#patch -p6 < 2.6.33-10.2-fix_compilation.patch

6. O compilador tenta localizar os arquivos utsrelease.h e autoconf.h na pasta /lib/modules/<kernel-version>/build/include/linux/, por isto é necessário copiar estes arquivos da pasta /usr/src/<kernel-source>/include/generated/ ou criar um link simbólico. No meu caso eu criei um link simbólico:

#ln -s /usr/src/linux-2.6.33.2/include/generated/utsrelease.h \
      /lib/modules/2.6.33.2-diesel-amd64-1/build/include/linux/
#ln -s /usr/src/linux-2.6.33.2/include/generated/autoconf.h \
     /lib/modules/2.6.33.2-diesel-amd64-1/build/include/linux/

7. Executar o instalador na pasta ati-installer:

./ati-installer.sh nada –install

Se estiver no modo gráfico, aparecerá a janela de instalação, e na janela do console não deverá aparecer nenhum erro.

O arquivo /usr/share/ati/fglrx-install.log deve se parecer com este:

Creating symlink /var/lib/dkms/fglrx/8.723/source ->
                 /usr/src/fglrx-8.723

DKMS: add Completed.

Kernel preparation unnecessary for this kernel.  Skipping...

Building module:
cleaning build area....
cd /var/lib/dkms/fglrx/8.723/build; sh make.sh --nohints --uname_r=2.6.33.2-diesel-amd64-1 --norootcheck.......
cleaning build area....

DKMS: build Completed.

fglrx.ko:
Running module version sanity check.
 - Original module
   - No original module exists within this kernel
 - Installation
   - Installing to /lib/modules/2.6.33.2-diesel-amd64-1/updates/dkms/

depmod....

DKMS: install Completed.

8. Modificar o arquivo /etc/X11/Xorg.conf manualmente ou com o comando:

#aticonfig --initial -f

Eu uso um notebook e um monitor externo, então o meu arquivo /etc/X11/xorg.conf está assim:

# xorg.conf (X.Org X Window System server configuration file)
#
# This file was generated by dexconf, the Debian X Configuration tool, using
# values from the debconf database.
#
# Edit this file with caution, and see the xorg.conf manual page.
# (Type "man xorg.conf" at the shell prompt.)
#
# This file is automatically updated on xserver-xorg package upgrades *only*
# if it has not been modified since the last upgrade of the xserver-xorg
# package.
#
# If you have edited this file but would like it to be automatically updated
# again, run the following command:
#   sudo dpkg-reconfigure -phigh xserver-xorg

Section "ServerLayout"
	Identifier     "aticonfig Layout"
	Screen      0  "aticonfig-Screen[0]-0" 0 0
EndSection

Section "Files"
EndSection

Section "Module"
EndSection

Section "ServerFlags"
	Option	    "Xinerama" "off"
EndSection

Section "InputDevice"
	Identifier  "Generic Keyboard"
	Driver      "kbd"
	Option	    "XkbRules" "xorg"
	Option	    "XkbModel" "abnt2"
	Option	    "XkbLayout" "br"
	Option	    "XkbVariant" "abnt2"
EndSection

Section "InputDevice"
	Identifier  "Configured Mouse"
	Driver      "mouse"
EndSection

Section "Monitor"
	Identifier   "Configured Monitor"
EndSection

Section "Monitor"
	Identifier   "aticonfig-Monitor[0]-0"
	Option	    "VendorName" "ATI Proprietary Driver"
	Option	    "ModelName" "Generic Autodetecting Monitor"
	Option	    "DPMS" "true"
EndSection

Section "Device"
	Identifier  "Configured Video Device"
EndSection

Section "Device"
	Identifier  "aticonfig-Device[0]-0"
	Driver      "fglrx"
	Option	    "MonitorLayout" "CRT1,LCD"
	BusID       "PCI:1:5:0"
EndSection

Section "Screen"
	Identifier "Default Screen"
	Monitor    "Configured Monitor"
EndSection

Section "Screen"
	Identifier "aticonfig-Screen[0]-0"
	Device     "aticonfig-Device[0]-0"
	Monitor    "aticonfig-Monitor[0]-0"
	DefaultDepth     24
	SubSection "Display"

 # x y resolution of both screens!
		Viewport   0 0
		Virtual   2720 900
		Depth     24
	EndSubSection
EndSection

9. Reiniciar o computador e está feito.

Boa sorte!

Geral, Linux , , , , , ,

Monitorando a temperatura do CPD com Digitemp

28 de abril de 2010

Em CPD's com muitos servidores existe a necessidade de constante refrigeração da sala de equipamentos, visto que eles produzem grande quantidade de calor.

Como qualquer outro equipamento, o sistema de refrigeração também podem apresentar problemas, deixando de refrigerar a sala de servidores, o que pode ocasionar o superaquecimento dos mesmos levando-os a falhar e deixar de prestar os serviços de um CPD.

Para estes casos é necessário estar prevenido com, no mínimo, um sistema de controle de temperatura da sala, para que sejam tomadas as providências antes do superaquecimento. Com um sistema de controle também é possível fazer o levantamento estatístico e histórico das falhas de refrigeração, para verificar se é necessário melhorias ou exigir da empresa terceirizada melhor qualidade no serviço de refrigeração.

Em tempos de recessão, programas de redução de custos, e demora na compra de equipamentos novos, fica inviável solicitar à empresa a compra de um sistema monitor de temperatura de ambientes. Nestas horas é necessário se utilizar da criatividade e procurar soluções alternativas.

Nestas condições a Internet é a nossa principal fonte de informação e pesquisa, e o Software Livre a solução para a maioria dos problemas envolvendo custos.

Sensor Dallas DS1820Muitos sites dão informações completas de como construir um sistema de monitoramento de temperatura baseado no sensor Dallas DS18S20  e um software chamado DIGITEMP, e tentarei aqui reproduzir algumas destas informações e instruções de como montar este sistema.

O DIGITEMP é um software desenvolvido para Linux que se comunica com o sensor de temperatura Dallas DS18S20 através da porta serial do computador. Para fazer esta comunicação, é necessário uma interface, que pode ser construída com poucos componentes.

 

Construindo o sensor

 

Existem vários modos de construir a interface, variando de acordo com a distância do cabo e a forma de energizar o circuito. A forma mais simples é o modo parasita, em que a energização do componente se dá através da linha de dados da porta serial.

Para construir a interface serial são necessários os seguintes componentes:

Componentes

A 1 Conector DB9 fêmea com capa
B 1 Placa fenolite de tamanho suficiente para acoplar na capa do conector DB9
C 1 Conector RCA macho
D 1 Conector RCA fêmea
E 1 Resistor 1K5 – 1/4W 
F 1 Sensor Dallas DS18S20
G 1 Diodo Zener 3V9 – 1/4W
H 1 Diodo Zener 6V2 – 1/4W 
I 2 Diodos 1N5819 – 1/4W de alta velocidade

Para o cabo foi utilizado um cabo telefônico comun de duas vias.

Os componentes devem ser montados conforme o esquema abaixo:

Circuito

No modo parasita, é necessário unir os pinos GND e Vdd. Os números no lado da porta serial representam os pinos do conector DB9.

É possível utilizar vários sensores em paralelo, pois cada componente utiliza um identificador único de 64bits, formando um barramento chamada 1-Wire Bus. O esquema abaixo representa vários sensores ligados em paralelo:

Circuito com vários sensores

Antes de soldar os componentes na placa, é interessante montá-los em uma protoboard:

Protoboard

Para montar os componentes na placa, peguei a dica no site Pontas da Madrugada. O desenho na placa de fenolite ficou assim:

Desenho na placa de fenolite

Após soldar os componentes na placa e encaixá-lo no conector DB9, o resultado ficou assim:

Componentes soldados

Componentes soldados lado solda

A solda não ficou esteticamente perfeita, mas o mais importante é não ter nenhum curto-circuito e nenhuma solda fria. O conector RCA fêmea teve que ser reduzido para caber na capa do DB9. A parte externa do conector RCA ficou como GND, e a parte interna, os dados.

O sensor foi soldado em uma extremidade do cabo, e na outra, o conector RCA macho:

Sensor soldado no cabo  Conector RCA soldado no cabo

O resultado final ficou assim:

Kit completo

 

Software para comunicação com o sensor

 

O Digitemp pode ser baixado do site http://www.digitemp.com ou do repositório oficial da distribuição. No debian pode ser baixado com o comando:

#apt-get install digitemp

O próximo passo é criar o arquivo de configuração com o identificador do sensor:

#digitemp_ds9097 -s /dev/ttyUSB0 -i
DigiTemp v3.5.0 Copyright 1996-2007 by Brian C. Lane
GNU Public License v2.0 - http://www.digitemp.com
Turning off all DS2409 Couplers
.
Searching the 1-Wire LAN
10F2EFF0010800FE : DS1820/DS18S20/DS1920 Temperature Sensor
ROM #0 : 10F2EFF0010800FE
Wrote .digitemprc

Para obter a temperatura do sensor usa-se o comando:

#digitemp_ds9097 -t0 -c .digitemprc
DigiTemp v3.5.0 Copyright 1996-2007 by Brian C. Lane
GNU Public License v2.0 - http://www.digitemp.com
Apr 27 22:33:02 Sensor 0 C: 24.25 F: 75.65

 

Traçando gráficos de acompanhamento

 

O pacote do Digitemp fornece alguns scripts para gerar gráficos armazenados em um banco de dados RRD. Utilizando vários sensores pode-se conseguir um resultado como este:

Gráfico RRD

Note que no gráfico os valores estão em Fahrenheit (F), mas pode-se configurar o Digitemp para exibir em Celcius (C).

O Nagios possui alguns plugins para o monitoramento de temperatura, como o check_temperature e o check_digitemp

 

Dificuldades e problemas

 

Para desenvolver este projeto encontrei algumas dificuldades. A primeira delas foi encontrar o sensor Dallas DS18S20 em lojas de eletrônica. As principais lojas em Porto Alegre (Severo Roth, RF, etc) nem sequer tinham este componente no cadastro, ou seja, nunca foi vendido por eles.

Segui a dica de um colega de trabalho (obrigado Ronaldo!) e entrei no site do fabricante Maxim (http://www.maxim-ic.com/) e solicite algumas amostras. Recebi-as em 30 dias. Obrigado Maxim!

Importante: Todos os sites indicavam o sensor DS1820, mas segundo a Maxim ele foi substituido pelo DS18S20, e o que eu recebi foi o DS18S20+, que funcionou perfeitamente.

DS18S20+

A segunda e maior dificuldade foi: O sistema não funcionou no primeiro teste. Nenhuma mensagem de erro era apresentado. Simplesmente o sensor não era lido. Tira componente, testa componente, baixa código fonte, compila código fonte… Muitos sites na internet informam que os notebooks não fornecem a carga necessária de energia na serial para alimentar o sensor, e quase nenhum informa sobre o funcionamento com um adaptador USB-Serial que, no meu caso, tive que utilizar, pois o notebook não tem porta serial. Testei inclusive com uma placa ExpressCard RS232. Nada funcionava. Verifiquei que existem outras formas de construir a interface serial, com componentes extras para gerar alimentação para o circuito, mas não os construí, pois não tinha nenhum desses outros componentes.

Por sorte, testando os componentes na protoboard tive uma surpresa. Notei que quando o pino RXD era plugado na protoboard uns 2 segundo após rodar o programa digitemp, ele conseguia ler os dados. Ótimo sinal!

Após verificar o código-fonte, e incluir uma porção de mensagens de debug, notei que o problema acontecia na inicialização da porta serial, talvez por eu estar utilizando um adaptador USB-Serial.

Procurando novamente por uma solução, encontrei no site http://www.felskowski.pl/ uma correção para um problema de inicialização da porta serial. Testei-o e funcionou. O patch de correção é o seguinte:

--- digitemp-3.6.0.old/userial/ds9097/linuxses.c        2007-06-07 23:25:58.000000000 +0200
+++ digitemp-3.6.0/userial/ds9097/linuxses.c    2009-12-24 04:27:25.000000000 +0100
@@ -55,7 +55,7 @@
SMALLINT owAcquire(int portnum, char *port_zstr)
{
/* Open the serial port */
-   if ((fd[portnum] = open(port_zstr, O_RDWR)) == -1)
+   if ((fd[portnum] = open(port_zstr, O_RDWR|O_NONBLOCK)) == -1)
{
OWERROR(OWERROR_GET_SYSTEM_RESOURCE_FAILED);
perror("owAcquire: failed to open device");

A diretiva 0_NONBLOCK instrui o programa para não ler absolutamente nada da porta serial após abrí-la, como teste de abertura.

 

Informações extras

 

Como informado antes, utilizei um adaptador USB-Serial PL2303 e um cartão ExpressCard RS232 também por coincidência PL2303. Ambos forneciam a porta /dev/ttyUSB0.

 

Referências

 

Muitas sites foram consultados para este projeto. Relaciono-os abaixo:

Geral, Linux , , , , , , ,