Piter Punk's HomePage - Artigos
 
English version
Acertando os Sensores

Piter PUNK

Tudo começou quando estava querendo saber se o meu processador estava devidamente refrigerado. Não sabia onde estava me metendo. O que era para ser configurado com facilidade se tornou um problema de me tirar o sono! Não sei se a minha experiência que foi particularmente ruim (dos dois computadores que tentei colocar os sensores, os dois deram problema), mas isso me motivou a escrever este artigo.

1 Introdução

As motherboards atuais vêm com diversos sensores para que você possa monitorar a condição em que a sua máquina se encontra. São sensores para temperatura da CPU, do chipset da placa, dos níveis de voltagem, etc... agora é a hora de colocar isso para funcionar no Linux.

Você vai precisar primeiro baixar os fontes do lm_sensors. É possível encontrá-los em www.lm-sensors.nu, a versão que estou usando é a 2.6.5, o ideal é que você tenha um kernel da série 2.4 (algumas funções importantes para o lm_sensors só foram incluídas no kernel na versão 2.3.34). Se estiver tudo OK, podemos começar a festa...

2 O kernel

Primeiro vamos preparar terreno no kernel. Para instalar o suporte aos sensores, serão necessárias algumas opções especiais no kernel. Como root, entre no /usr/src/linux, e digite make menuconfig.

No menu, escolha a opção "Character devices" e, dentro dela selecione "I2C support". Você deve selecionar como módulos os seguintes itens:

  • I2C support
  • I2C device interface
  • I2C /proc interface

Se você ficar em dúvida, selecione tudo -;) Mas são necessários apenas estes três. Recompile o seu kernel com os clássicos make dep clean bzImage modules modules_install install ou, caso tenha apenas adicionado os módulos do I2C, make modules modules_install.

3 Compilando e instalando o lm_sensors

Existem várias maneiras de se compilar os módulos do lm_sensors. Uma delas é aplicando um patch no kernel, a outra é compilá-los separadamente. Iremos utlizar esta segunda opção, já que é bem mais simples. Para isso, extraia os arquivos do .tar.gz que baixamos da internet e entre no diretório lm_sensors-2.6.2.

Será uma pequena alteração no arquivo Makefile. Comente a linha onde está escrito I2C_HEADERS=/usr/local/include e descomente a linha logo abaixo, aquela onde está I2C_HEADERS=$(LINUX_HEADERS). Para comentar e descomentar é só inserir ou apagar um # no começo da linha.

Com isso estamos avisando ao lm_sensors, que as funções do I2C, estão inclusas no fonte do kernel. Depois desta pequena alteração é só fazer make e make install (este último como root).

Para completar a nossa instalação, continue como root e faça:

	# depmod -a
	# ldconfig
	# prog/mkdev/mkdev.sh

O primeiro comando irá atualizar as dependências dos módulos, o segundo irá carregar as novas bibliotecas e o terceiro prepara os devices necessários para a leitura dos dados dos sensores.

4 Configurando

Agora vêm a hora de configurar. Você tem basicamente duas opções:

  • Não funciona ou;
  • Funciona

Irei descrever o procedimento padrão e tanto eu quanto você iremos acreditar piamente que vai funcionar. Depois, se não funcionar, vamos tentar solucionar os problemas.

4.1 O Procedimento padrão

Depois de instalado, você pode tentar detectar os sensores instalados na sua placa-mãe. Para isso existe um comando, o sensors-detect. Através de uma série de perguntas, ele irá tentar selecionar os módulos corretos para o seu computador.

A primeira (e estúpida) questão é se você quer tentar autodetectar os sensores agora. A não ser que você tenha um Thinkpad, você deve responder YES aqui (pressione enter). Se você tiver um Thinkpad e apertar enter, você irá ganhar um caríssimo peso para papel. É isso mesmo, se você possuir um Thinkpad NÃO pressione enter, pare tudo agora.

O programa irá tentar carregar os drivers e, no final, alguns serão selecionados. Estes são os módulos para o bus, onde são conectados os sensores. Responda YES para todos, o que for adequado para a sua motherboard será carregado.

Depois de selecionado o módulo do bus, terão de ser escolhidos os sensores apropriados. Novamente, a idéia é deixar o programa procurar. Depois ele irá perguntar se pode procurar no ISA bus, deixe procurar. Após todas as essas procuras, será questionado qual tipo de bus você prefere, ISA ou SMBus. Se foi detectado um sensor na parte do ISA, escolha ISA, se não, escolha SMBus.

Por fim, será apresentada uma lista com os módulos a serem carregados e uma linha a ser inserida no /etc/modules.conf. Se você usa Slackware, coloque as linhas para carregar os módulos no /etc/rc.d/rc.modules (pode por no finzinho).

O último passo, é digitar sensors -s para carregar as configurações padrão. E depois testar usando o comando sensors. Provavelmente deverá aparecer na sua tela uma série de informações sobre a sua máquina. Desconfie se encontrar valores como 127 e 255, geralmente querem dizer que algo não está funcionando. Anote os valores apresentados pelos sensores em um papel e reboote a máquina. É hora de calibrar os sensores.

4.2 É... não funcionou...

É uma triste descoberta, mas ela existe. O que fazer caso a autodetecção não tenha funcionado direito? O primeiro passo, é ler a documentação inclusa no pacote. Para lhe poupar um pouco de trabalho, separei alguns casos especiais interessantes.

  • Se a sua placa-mãe for ASUS, existe uma grande chance do sensor estar sendo detectado como W83781D quando na realidade é um AS99127F. Solução: Quando carregar o módulo w837281d usar a opção "force_as99127f=BUS,0x2d" onde BUS é o número do seu BUS (faça cat /proc/bus/i2c para ver os números)
  • Algumas placas da VIA com o chipset VIA86C686B que deveriam funcionar com o i2c-viapro, só funcionam direito carregando o i2c-isa e depois o via686a. Neste caso, não carregue o i2c-viapro nem os outros módulos que a autedetecção recomenda.
  • O SiS5595 e o MTP008 funcionam quando querem. Você pode ter sido um sorteado.
  • Na Asus P5A, prefira usar o i2c-isa e depois o w83781d com a opção "ignore=1,0x2d", às vezes é necessário trocar o número do bus.
  • Na placa-mãe M78lrt da PCChips, use o módulo i2c-isa e depois o it87 com a opção temp_type=0x70 (modprobe it87 temp_type=0x70).

Estas foram as dicas mais importantes que eu retirei do arquivo e a última eu vi na linux-br. Se o seu caso não é nenhum desses, o jeito é ler o FAQ e depois a documentação dentro do diretório busses e chips. Se o seu caso era um desses e agora começou a funcionar, anote os valores apresentados pelos sensores e vamos calibrar os valores...

5 Calibrando

Com os valores mostrados pelo comando sensors anotados em um papel, entre na sua BIOS e compare com os valores relatados por ela. Se estiverem todos iguais (ou muito parecidos), sapateie de alegria e relaxe, você não precisa corrigir nada. Pule para a seção 6

Agora, o mais provável é que os valores não estejam iguais e que você precise "trabalhar" um pouco os números. É uma boa idéia anotar do lado os valores que você leu pela sua BIOS. Com a comparação desses dois valores nós iremos calibrar os sensores.

Ligue o computador, rode novamente o sensors -s e se prepare para trabalhar. Uma das primeiras coisas a fazer, é entrar no diretório /proc/sys/dev/sensors/nome_do_seu_sensor, dentro deste diretório haverão diversos arquivos com nomes bem sugestivos (temp para temperatura, fan para ventilador, in para voltagem, etc...)

Cada um deles representa uma medida dos sensores, e você pode vê-los com um simples cat. No caso dos fan aparecem dois valores: um valor mínimo e o detectado agora. Nos temp aparece o valor máximo, o mínimo e por último a leitura do momento. E, nos in, é primeiro a voltagem mínima, depois a máxima e logo em seguida o valor aferido agora.

Leia o mesmo arquivo algumas vezes, não é incomum demorar um pouquinho para os dados (principalmente dos ventiladores) se atualizarem. A partir de agora é um trabalho de comparação mais ou menos assim:

Temperatura detectada pela BIOS Saída do arquivo temp2 Relação entre uma e outra
55.7 23 BIOS = temp2 * 2

Este é um exemplo real da minha placa. Normalmente não é um número redondo tão bonitinho. Se a variação for muito pequena, despreze, pode ser que o número tenha mudado desde a hora em que você anotou os dados da BIOS (afinal, se as temperaturas não mudassem você não estaria preocupado em medi-las, não é verdade?). Agora faça o mesmo procedimento para as outras medidas. Depois de ter feito uma tabela com os valores, é a hora de editar o /etc/sensors.conf.

5.1 Editando o sensors.conf

O /etc/sensors.conf é um arquivo quilométrico com as configurações de vários tipos de sensores. Felizmente, você só precisa configurar a parte relativa ao seu sensor. O arquivo é bem documentado, mas vou passar rapidamente como editá-lo

A primeira coisa a fazer é abrir o arquivo em um editor de textos. Logo em seguida, procure o tipo do seu sensor. Se você carrega o módulo via686a, procure por "via686a", se for o lm75 procure por "lm75" e assim sucessivamente...

Uma grande excessão para o módulo w83781d, se o seu sensor foi detectado como w83782d, w83783s, w83627hf, as99127f, ou se foi necessário forçar a detecção de algum desses chips para o módulo w83781d, você deve procurar por "w83782d", "w83783s" e assim por diante.

A seguir vem um bonito comentário em inglês. Leia-o, pode ser muito útil às vezes. As configurações tem um padrão bem simples. E poucos comandos...

5.1.1 Arrumando os títulos

Para arrumar os títulos usamos o transcedental comando label (quer dizer etiqueta/rótulo em inglês). É bem simples de usar: label leitura "título". Para facilitar a sua vida, tenha em mente que:

  • in, vdd, vin, vid e volt seguidos ou não de um número são uma leituras de voltagem.
  • fan (geralmente com um número em seguida) é a leitura da velocidade de ventilador
  • temp, também acompanhado de um número, é uma leitura de temperatura

Geralmente os títulos estão corretos. E, caso não estejam, pode ser bem complicado descobrir.

5.1.2 Calibrando os números

Esta parte é meio complicada. O sensors, utiliza leituras do /proc modificadas através de uma série de cálculos. Na hora de escrever os limites de alerta, ele deve pegar o número que você configurou (ou vai configurar), efetuar uma série de cálculos e só depois escrever no /proc.

Como você é um cara inteligente e já descobriu todas as relações necessárias, deve agora informá-las ao sensors. Isso é feito com o comando: compute. Devem ser colocadas linhas semelhantes a esta:

	compute temp2 (@*2), (@/2)

Os mais inteligentes já perceberam que esta linha trata da configuração de temperatura mostrada no quadro da seção 5. O primeiro argumento é a leitura (temp2), o segundo é como o valor lido deve ser modificado quando for lido do /proc e o terceiro é como deve ser modificado quando for escrito no /proc.

O @ é o valor lido no /proc, não substitua-o por nenhum número, deixe como @ mesmo. Se houver outra linha tratando da mesma leitura, comente-a e substitua pela sua.

Se mesmo depois de devidamente etiquetados e das suas tentativas de calibramento continuarem aparecendo números como 127, 0 ou 255. O melhor a fazer é simplesmente ignorar esta leitura. Pode ser que o sensor correspondente não exista na sua placa-mãe, ou esteja desacoplado.

Para ignorar, coloca uma linha como:

	ignore leitura

Na minha placa-mãe, eu ignorei o temp3, que teima em sempre ler 127.7, apesar da minha BIOS mostrar apenas duas leituras de temperatura, e não três.

6 Os ajustes finais...

Depois de devidamente calibrados, é possível colocar seu sistema para avisar quando forem ultrapassados determinados valores nas leituras. Você pode arrumar utilizando o comando set dentro do /etc/sensors.conf, como indicado abaixo:

	set leitura_min número * 0.80
	set leitura_max número * 1.20

Onde leitura_min é o mínimo aceitável e leitura_max é o máximo. As linhas acima colocam os valores aceitáveis dentro de uma faixa de 20%. O ideal é que esta faixa seja de 5 a 10%. Algumas leituras de temperatura utilizam _over e _hyst, ao invés de _max e _min.

Confirme as leituras, veja se está tudo funcionando direitinho e coloque no seu /etc/rc.d/rc.local uma linha para inicializar os sensores com o comando:

	sensors -s

7 Conclusão

Pronto! Tudo está terminado e espero que sua máquina esteja funcionando. Se mesmo assim não estiver funcionando direito, leia com atenção a documentação inclusa no pacote. Qualquer dúvida, crítica o sugestão com relação a este artigo mande para [email protected]. NÃO me mande as leituras do seu /proc, porque eu NÃO tentarei encontrar as relações entre elas e as temperaturas da sua BIOS, isso é algo que considero muito chato e que você terá de fazer sozinho.


Links Principal Artigos Piter Punk Dicas Programas
 
Powered by Slackware Linux - Written in VIm (the best one!) Last Update: 30 Oct 2004