пʼятниця, 31 жовтня 2008 р.

Давач температури

Нарешті випала невелика нагода добратися до блогу та внести останні нотатки.
Останнім часом ноутбук почав вимикатися при температурі ~90 градусів по Цельсію.
Спершу грішив на кулер, думав може з ним щось, однак після розбирання виявилося, що вся проблема з термопастою, а точніше з її біс зна яким нанесенням (на процесорі її майже не було, взагалі дивно, як воно умудрилося не згоріти). Однак про це далі.
Наразі мова піде про те, як то спало мені на думку і вдалося прикрутити давач температури.

Насправді то зовсім нескладно. Для цього досить трішки полазити по тенетах і почитати чи хтось вже таке робив.

Проблема полягає в кривому БІОСі від HP (Hewlet Packard), а точніше в параметрах ACPI. Для того, щоб полагодити помилку слід списати оте саме ACPI, дизасемблювати, поправити помилку і після того змусити ядро читати поправлену версію.

Найскладніше в цій операції саме процес перезборки ядра, при комп'ютері, який вимикається ;)

Отже, виглядає то всьо таким чином:
  1. Записуємо до теки поточну конфігурацію ACPI (під адміністратором).
  2. sudo cat /proc/acpi/dsdt > /tmp/DSDT
  3. Дизасемблюємо отримане чудо:
  4. cd /tmp;iasl -d /tmp/DSDT
  5. Редагуємо файл отриманий файл
  6. vim DSDT.dsl
  7. З методу Method (_HOT, 0, Serialized) забираємо умовності. Їх треба видалити. Яким чином закоментувати - не маю уявлення; Сішний коментар "//" не спрацював (видно руки криві) :(.
  8. Аналогічну річ слід зробити для методу Method (_CRT, 0, Serialized).
  9. В мене після редагування вони набули наступного вигляду:
  10. Method (_HOT, 0, Serialized)
    {
    Return (Add (0x0AAC, Multiply (TPC, 0x0A)))
    }

    Method (_CRT, 0, Serialized)
    {
    Return (Add (0x0AAC, Multiply (TPC, 0x0A)))
    }
  11. Після цього треба скомпілювати отриманий код:
  12. iasl -tc DSDT.dsl
  13. Отриманий файл DSDT.hex слід скопіювати до підтеки include теки джерельного коду Вашого ядра. В моєму випадку то виглядає таким чином:
  14. sudo cp DSDT.hex /usr/src/dv5temp/linux-2.6.27.3/include
  15. Тепер треба перезібрати ядро, додавши наступні параметри (я зазвичай користуюся make menuconfig, тому вказую для даного методу налаштування).
    1. Device Drivers -> Generic Driver Options -> Select only drivers that don't need compile-time external hardware (тут зняти опцію)
    2. Power Management Options -> ACPI (Advanced Configuration and Power Interface) Support -> Custom DSDT Table file to include (вписати без лапок "DSDT.hex")


  16. Далі компілюємо ядро і встановлюємо:

    • make
    • make install

  17. Перезавантажуємося з новим ядром і вмикаємо давачі температури.
Начебто все.
Для особливо лінивих та початківців - можу порекомендувати ядро 2.6.27.3 зібране мною.
Серед особливостей ядра - підтримка майже всього обладнання ноутбука (окрім пульту дистанційного керування).
Зібрано все в deb пакетах для улюбленої системи.

Ядро
Заголовки
Документація
Джерельний код
Довідник

Всі матеріали почерпнуто з проекту Lesswatts та Google.

Немає коментарів: