понедельник, 13 сентября 2010 г.

Контроль венлиляторов Dell Inspiron 640m

Устанавливаем пакеты
# pacman -S i8kmon i8kutils
запускаем i8kfan и видим, что монитор состояния вентиляторов показывает "-1 163"
Вывод: модуль ядра i8k контроля вентиляторов Dell работает некорректно.
Как пересобрать отдельный модуль без пересборки всего ядра? Как настроить контроль вентиляторов на Dell Inspiron 640m?


1) Установка пакета, позволяющего не привилегированному пользователю собирать пакеты
# pacman -S fakeroot

2) Загрузить файл PKGBUILD для пакета kernel26 с http://aur.archlinux.org/ На момент написания актуален был этот пакет
$ mkdir -p ~/download/kernel/src/
$ wget http://aur.archlinux.org/packages/kernel26-source/kernel26-source/PKGBUILD -O ~/download/kernel/PKGBUILD

3) Загрузка исходников ядра средствами Arch
$ cd ~/download/kernel/
$ makepkg -o PKGBUILD

4) Распаковать файлы с ядром и заплаткой в каталог ~/download/kernel/src/
$ cd ~/download/kernel/src
# удалить символические ссылки на исходники ядра и заплатки из каталога ~/download/kernel/src
$ rm ./linux-2.6.35.tar.bz2 ./patch-2.6.35.4-1-ARCH.bz2
$ mv ~/download/kernel/linux-2.6.35.tar.bz2 ./linux-2.6.35.tar.bz2
$ mv ~/download/kernel/patch-2.6.35.4-1-ARCH.bz2 ./patch-2.6.35.4-1-ARCH.bz2
$ tar -xvf patch-2.6.35.4-1-ARCH.bz2
$ bunzip2 patch-2.6.35.4-1-ARCH.bz2

5) Далее следуем командам, прописанным в PKGBUILD
# Устанавливаем заплатки
$ patch -Np0 -i ~/download/kernel/src/patch-2.6.35.4-1-ARCH
# Копируем конфиг существующего ядра
$ cp /usr/src/linux-2.6.35-ARCH/.config ./linux-2.6.35/
$ cd ./linux-2.6.35/

6) Редактируем исходник модуля i8k.c:
$ vim ./drivers/char/i8k.c
заменяем "asm()" на "asm volatile()" (всего 2 замены)

7) Собираем модуль
# Узнать версию ядра
$ make prepare
# Собираем нужный модуль
$ make drivers/char/i8k.ko

6) Создаём резервную копию исходного модуля и копируем на его место новый
$ sudo mv /lib/modules/2.6.35-ARCH/kernel/drivers/char/i8k.ko{,.bak}
$ sudo cp ./drivers/char/i8k.ko /lib/modules/2.6.35-ARCH/kernel/drivers/char/

7) Загружаем модуль и программу контроля (ключи: автоматический контроль, системные сообщения, без GUI)
$ sudo modprobe i8k force=1
$ i8kmon -a -v -d

находим строчку

config(sysconfig) = /etc/i8kutils/i8kmon.conf.conf

Обратить внимание, что имя используемого файла конфигурации не соответствует тому файлу, который находится в каталоге /etc/i8kutils/

8) Редактирование конфигурационного файла
$ sudo mv /etc/i8kutils/i8kmon.conf(,.conf)
$ vim /etc/i8kutils/i8kmon.conf.conf

# Kernel I8K status file
set config(proc_i8k) /proc/i8k

# Kernel APM status file
#set config(proc_apm) /proc/apm

# Kernel ACPI status file
set config(proc_acpi) /proc/acpi/ac_adapter/AC/state

# External program to control the fans
set config(i8kfan) /usr/bin/i8kfan

# Applet geometry, override with --geometry option
set config(geometry) {64x64}

# Run as daemon, override with --daemon option
set config(daemon) 1

# Automatic fan control, override with --auto option
set config(auto) 1

# Report status on stdout, override with --verbose option
set config(verbose) 0

# Status check timeout (seconds), override with --timeout option
set config(timeout) 5

# Temperature display unit (C/F), override with --unit option
set config(unit) C

# Temperature threshold at which the temperature is displayed in red
set config(t_high) 65

# Minimum expected fan speed
set config(min_speed) 1928

set config(0) {{ -1 0} -1 55 -1 60}
set config(1) {{ -1 1} 50 65 50 65}
set config(2) {{ -1 2} 60 70 60 75}
set config(3) {{ -1 2} 65 105 70 105}

9) Чтобы модуль и демон загружались при старте:
$ sudo echo "options i8k force=1" >> /etc/modprobe.d/modprobe.conf
$ vim /etc/rc.conf

MODULES=(... i8k ...)
DAEMONS=(... @i8kmon ...)

Источник

Комментариев нет:

Отправить комментарий