Debian 5 и датчики температуры для Intel Atom (330)

Проблема: если на платформу с процессором (вообще — любым, но у меня Atom 330) установить 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/296478http://www.didier-segura.fr/?p=66.

Об авторе Валера Леонтьев

Программист PHP/MySQL.

Запись опубликована в рубрике IT, PC с метками , , . Добавьте в закладки постоянную ссылку.

3 комментария на «Debian 5 и датчики температуры для Intel Atom (330)»

  1. aamonster.livejournal.com/ говорит:

    (с сомнением) А у вас что, правда в комнате меньше 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.

  2. Процессор не обязан быть комнатной температуры, т.к. происходит его охлаждение куллером. Например, внутри холодильника явно холоднеее, чем в комнате. А процессы те же: передача тепла.

  3. aamonster.livejournal.com/ говорит:

    Понятно. Вы не знаете, имеет ли показываемая вам температура хоть какое-то отношение к реальности.
    Зайдите в BIOS и посмотрите температуру проца там. Думаю, у вас на самом деле что-то типа 50 градусов или выше.

    Краткая справка (не думал, что кому-то понадобится такое объяснять): кулер — это просто вентилятор. Он не может охладить ниже температуры окружающей среды: его принцип работы — дуть на радиатор, чтобы температура радиатора была как можно ближе к температуре воздуха (грубо говоря, без него проц разогрелся до 100 градусов, но он дует воздухом с температурой 20 — проц остывает до 50).

    Охладить ниже комнатной температуры могут, например, элементы Пельтье. Но никак не обычный кулер.

Добавить комментарий