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 piterpk@terra.com.br.
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.
|