2011-04-06 23:23:44

Ubuntu 9.10 + lm_sensors + ITE IT8721F/IT8758E

Linux

Получив для своего домашнего сервера новую материнскую плату Foxconn D42S на основе чипсета Intel NM10 Express, я столкнулся с рядом проблем при миграции с предыдущего железа. Одной из них стала неаозможность использования lm_sensors для мониторига оборотов вентилятора (можно было видеть только температуру, да и то на virtual device).

Обновив пакет lm-sensors до последней доступной версии, я узнал что на моей плате установлен чип ITE IT8721F/IT8758E, с которого можно получить все нужные параметры, но вот только драйвер для него "to-be-written". Изучив список поддерживаемых устройств, я узнал что мой чип все же поддерживается в поледней версии sensors (на данный момент 3.3.0), но с уточнением что Supported since kernel 2.6.37 or standalone driver. Это безусловно радовало, но не все так просто: мне предстояло либо собирать драйвер из исходников, либо пытаться вживить в свою Ubuntu 9.10 ядро 2.6.37, которого нет даже в самой свежей убунте.

От вживления нестабильного ядра я отказался сразу, оставалось попробовать собрать драйвер.


Сборка только драйвера провалилась, тк не хватало  файлов, которые не удлось доставить стандартными средствами. Решил попробовать пересобрать свое-же ядро (2.6.31) но с вживленным драйвером.

Изначально прочитал технологию как правильно собирать дяро в Ubuntu. Вот основная концепция по которой мне все удалось:

sudo -s -H
apt-get install build-essential bin86 kernel-package
apt-get install libqt3-headers libqt3-mt-dev

cd /usr/src
tar -xvjf linux-2.6.22.***.tar.bz2
rm -rf linux
ln -s /usr/src/linux-2.6.22.*** linux
cd /usr/src/linux

cp /boot/config-`uname -r` ./.config
make xconfig

make-kpkg clean

make-kpkg -initrd --revision=*** kernel_image
cd /usr/src
dpkg -i linux-image-2.6.22.***_i386.deb

Далее скачал standalone driver с сайта lm_sensors и установи пакет linux-source для своего ядра.

Также скачал самый последний lm_sensors с сайта производителя и собрал из исходников. Тут все супер-просто, единственное можно только поиграться с префиксом - где размещать файлы.

Растарил исходники ядра и подменил drivers/hwmon/it87.c на тот что скачал с lm_sensors.

Дальше 4 часа ожидания и новое ядро готово, поставил, загрузился, сказал sensors-detect, все нашлось и...

# modprobe it87
FATAL: Error inserting it87 (/lib/modules/***/drivers/hwmon/it87.ko): Device or resource busy

Но быстро вспомнил, что пока изучал вопрос работы sensors с it87 для ITE IT8721F/IT8758E натыкался на лечение этой проблемы:

Basically, you need to add a new kernel line in your menu.lst to fix this behavior.
acpi_enforce_resources=lax

Пошел в /etc/default/grub и дописал его:

GRUB_CMDLINE_LINUX="acpi_enforce_resources=lax"

Дальше update-grub, ребут, снова modprobe it87 и... о чудо! ура-ура! оно заработало!

Правда названия температур и вентиляторов были типа temp1 и fan1, но это легко исправилось добавлением чипа в /etc/densors.conf и теперь sensors выводит мне примерно вот это:

# sensors
acpitz-virtual-0
Adapter: Virtual device
temp1: +55.0°C (crit = +85.0°C)

it8721-isa-0a10
Adapter: ISA adapter
in0: +2.76 V (min = +1.38 V, max = +2.05 V) ALARM
in1: +2.80 V (min = +1.30 V, max = +3.05 V)
in2: +2.06 V (min = +0.66 V, max = +2.98 V)
+3.3V: +3.41 V (min = +5.66 V, max = +1.87 V) ALARM
in4: +1.87 V (min = +2.82 V, max = +2.60 V) ALARM
in5: +1.04 V (min = +1.68 V, max = +1.02 V) ALARM
in6: +2.23 V (min = +1.43 V, max = +1.48 V) ALARM
3VSB: +3.24 V (min = +4.37 V, max = +0.72 V) ALARM
Vbat: +3.05 V
CPU Fan: 903 RPM (min = 14 RPM)
Sys Fan: 0 RPM (min = 12 RPM) ALARM
CPU Temp: +54.0°C (low = -107.0°C, high = +80.0°C) sensor = thermal diode
temp2: -56.0°C (low = -10.0°C, high = +127.0°C) sensor = thermal diode
M/B Temp: +35.0°C (low = -61.0°C, high = +127.0°C) sensor = thermal diod

Одно удручает, что когда выйдет новое ядро для моей убунту, приедется в него также вживлять драйвер и ждать снова 4 часа.

Надеюсь мой опыт танцев с бубном кому-нибудь пригодится. А я пошел писать report для разработчиков lm_sensors :)