Проблема: если на платформу ION с процессором Intel Atom (вообще — любым, но у меня Atom 330) установить Debian Linux 5, то датчики температцры процессора «из коробки» не заработают. Связано это с тем, что в моделу ядра coretemp.ko не включена поддержка этого семейства процессоров. А sensors-detect не умеет их находить. О том, как включить поддержку и получать сведения о температуре, написано далее. На самом деле все очень просто. Процессоры семейства Atom придерживаются старой архитектуры X86 и работают аналогично другим процессорам от Intel, т.е. их поддержка в моделу ядра есть, просто она не включена. Чтобы исправить положение, нужно пересобрать модуль ядра, который отвечает за работу с датчиками. Процедура довольно простая и по шагам описана ниже. Кроме обновления самого модуля, требуется обновить скрипт sensors-detect, чтобы он научился находить новые датчики.
Debian 5.0. Как обычно, сначала требуется обновить систему. А затем:
0) Если еще не установлены, то устанавливаем
#lm-sensors apt-get install lm-sensors
1) Сливаем свежую версию (2010-02-19) sensors-detect. Файл можно взять готовый или выдернуть из официальных билдов.
Файл должен быть положен в: /usr/sbin/sensors-detect и иметь права 755.
2) Готовимся к сборке модуля ядра:
#apt-get install build-essential linux-headers-$(uname -r) linux-source-$(uname -r | awk -F’-‘ ‘{print $1}’)
3) Патчим исходники стандартного дебиановского модуля coretemp
#cd /usr/src
#wget http://mabene.icomedias.com/coretemp.patch
#tar jxvf linux-source-$(uname -r | awk -F’-‘ ‘{print $1}’).tar.bz2
#cd linux-source-$(uname -r | awk -F’-‘ ‘{print $1}’)
#patch -p1 < ../coretemp.patch
Здесь вы получите сообщение о неполном патче файла. Не пугайтесь, все хорошо. Последний кусок патча не применился, т.к. патч для Ubuntu, а в Debian сырец чуточку другой. Доведем патчинг до конца руками:
#nano drivers/hwmon/coretemp.c
Находим почти в конце файла строки:
/* check if family 6, models 0xe, 0xf, 0x16, 0x17 */
if ((c->cpuid_level < 0) || (c->x86 != 0x6) ||
!((c->x86_model == 0xe) || (c->x86_model == 0xf) ||
(c->x86_model == 0x16) || (c->x86_model == 0x17))) {
И заменяем их на:
/* check if family 6, models 0xe, 0xf, 0x16, 0x17, 0x1A, 0x1C */
if ((c->cpuid_level < 0) || (c->x86 != 0x6) ||
!((c->x86_model == 0xe) || (c->x86_model == 0xf) ||
(c->x86_model == 0x16) || (c->x86_model == 0x17) ||
(c->x86_model == 0x1A) || (c->x86_model == 0x1C))) {
Суть этой замены в том, что в комментарий и оператор добавляем еще лэйблы двух семейств (одно из них как раз Atom): (c->x86_model == 0x1A) || (c->x86_model == 0x1C)
4) Собираем (билдим) модуля ядра
#make -j 4 -C /lib/modules/$(uname -r)/build M=/usr/src/linux-source-$(uname -r | awk -F’-‘ ‘{print $1}’)/drivers/hwmon/ modules
5) Копируем полученный собранный модуль ядра в нужное место:
#cp drivers/hwmon/coretemp.ko /lib/modules/$(uname -r)/kernel/drivers/hwmon/coretemp.ko
7) modprobe coretemp
Если ошибок нет, то все ок.
8) #sensors-detect (всегда отвечаем утвердительно)
9) #sensors (радуемся):
coretemp-isa-0000
Adapter: ISA adapter
Core 0: +13.0°C (crit = +95.0°C)
coretemp-isa-0001
Adapter: ISA adapter
Core 1: +17.0°C (crit = +95.0°C)
coretemp-isa-0002
Adapter: ISA adapter
Core 2: +12.0°C (crit = +95.0°C)
coretemp-isa-0003
Adapter: ISA adapter
Core 3: +16.0°C (crit = +95.0°C)
P.S. Если призагрузке модуля ядра coretemp у вас возникала такая ошибка:
# modprobe coretemp
insmod /lib/modules/2.6.26-2-686/kernel/drivers/hwmon/coretemp.ko
FATAL: Error inserting coretemp (/lib/modules/2.6.26-2-686/kernel/drivers/hwmon/coretemp.ko): No such device
то описанное выше решение именно для вас.
P.S.S. Спасибо: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/296478, http://www.didier-segura.fr/?p=66.
(с сомнением) А у вас что, правда в комнате меньше 12 градусов?
У меня после апгрейда с Ubuntu 9.10 на 10.04 sensors тоже подобный бред показывает:
Core 0: -4.0°C (crit = +90.0°C)
Core 1: +3.0°C (crit = +90.0°C)
Core 2: -4.0°C (crit = +90.0°C)
Core 3: +3.0°C (crit = +90.0°C)
В комнате, замечу, больше 20 градусов. Тоже Atom 330.
Процессор не обязан быть комнатной температуры, т.к. происходит его охлаждение куллером. Например, внутри холодильника явно холоднеее, чем в комнате. А процессы те же: передача тепла.
Понятно. Вы не знаете, имеет ли показываемая вам температура хоть какое-то отношение к реальности.
Зайдите в BIOS и посмотрите температуру проца там. Думаю, у вас на самом деле что-то типа 50 градусов или выше.
Краткая справка (не думал, что кому-то понадобится такое объяснять): кулер — это просто вентилятор. Он не может охладить ниже температуры окружающей среды: его принцип работы — дуть на радиатор, чтобы температура радиатора была как можно ближе к температуре воздуха (грубо говоря, без него проц разогрелся до 100 градусов, но он дует воздухом с температурой 20 — проц остывает до 50).
Охладить ниже комнатной температуры могут, например, элементы Пельтье. Но никак не обычный кулер.