Ключевые слова:acpi, freebsd, hardware, notebook, (найти похожие документы)
From: Игорь Сысоев <http://sysoev.ru>
Date: Sun, 16 Feb 2008 17:02:14 +0000 (UTC)
Subject: Использование ACPI во FreeBSD 6.2 на ThinkPad T42
Оригинал: http://www.sysoev.ru/freebsd/t42_acpi.html
Прежде всего, для нормальной поддержки ACPI нужно загрузить два
модуля, указав их в /boot/loader.conf:
acpi_video_load="YES"
acpi_ibm_load="YES"
Первый модуль нужен для того, чтобы после просыпания нормально
работало видео, а второй -- чтобы devd мог обрабатывать события при
нажатии Fn-клавиш.
Надо заметить, что если эти модули собрать статически в ядре
device acpi_video
device acpi_ibm
то они не будут работать. Скорее всего, это специфика модулей acpi.
Модулю acpi_video нужно разрешить сбрасывать видео после просыпания:
sysctl hw.acpi.reset_video=1
Если засыпание было вызвано в X Window, то сначала делается
переключение из графики в текстовую консоль, а уже затем происходит
собственно засыпание. Это переключение можно запретить с помощью
sysctl hw.syscons.sc_no_suspend_vtswitch=1
однако при просыпании на экране ничего не будет видно и нужно вручную
переключиться в текстовый режим, а затем обратно в X Window.
Для того, чтобы некоторые устройства нормально работали после
просыпания, их нужно сначала выключить в скрипте /etc/rc.suspend, а
затем включить снова в скрипте /etc/rc.resume. В мой /etc/rc.suspend я
добавил отключение wifi, мыши и полное отключение подсветки LCD:
# kldunload usb
/etc/rc.d/wpa_supplicant stop iwi0
/sbin/ifconfig iwi0 down
/etc/rc.d/moused stop
/usr/local/bin/radeontool light off
logger -t $subsystem suspend at `date +'%Y%m%d %H:%M:%S'`
Скрипт /etc/rc.resume делает обратную процедуру:
# kldload usb
/usr/local/bin/radeontool light on
/etc/rc.d/moused start
/sbin/ifconfig iwi0 up
/etc/rc.d/wpa_supplicant start iwi0
logger -t $subsystem resumed at `date +'%Y%m%d %H:%M:%S'`
Явное выключение подсветки LCD нужно потому, что, по-видимому, BIOS
при засыпании сам этого не делает, и из-за этого в спящем режиме
быстрее расходуется батарея. Программа radeontool берётся из порта
sysutils/radeontool.
Однако скрипт /etc/rc.suspend запускается только в том случае, если
засыпание было вызвано командой acpiconf -s 3, а по клавише Fn-F4 он
не запускается. Поэтому нужно отменить действие этой клавиши
sysctl hw.acpi.sleep_button_state=NONE
и разрешить генерацию событий по нажатию Fn-клавиш:
sysctl dev.acpi_ibm.0.events=1
Эти события будут обрабатываться демоном devd. Для клавиши Fn-F4 в
файл /etc/devd.conf нужно добавить описание того, что нужно запускать
при её нажатии (код 0x04):
notify 10 {
match "system" "ACPI";
match "subsystem" "IBM";
match "notify" "0x04";
action "/usr/sbin/acpiconf -s 3";
};
Аналогично можно добавить выключение и включение экрана при нажатии
клавиши Fn-F3:
notify 10 {
match "system" "ACPI";
match "subsystem" "IBM";
match "notify" "0x03";
action "/etc/local/backlight";
};
Скрипт /etc/local/backlight:
#!/bin/sh
radeontool=/usr/local/bin/radeontool
on="The radeon backlight looks on"
if [ "`$radeontool light`" = "$on" ]; then
$radeontool light off
else
$radeontool light on
fi
При закрывании ноутбука можно настроить переход в спящий режим по
аналогии с обработкой клавиши Fn-F4. Я же предпочёл только полное
выключение LCD:
notify 10 {
match "system" "ACPI";
match "subsystem" "Lid";
match "notify" "0x00";
action "/usr/local/bin/radeontool light off";
};
notify 10 {
match "system" "ACPI";
match "subsystem" "Lid";
match "notify" "0x01";
action "/usr/local/bin/radeontool light on";
};
И в заключение, несколько рекомендаций по увеличению времени работы
при питании от батареи:
собрать в ядре модуль
device cpufreq
или загрузить его в /boot/loader.conf:
cpufreq_load="YES"
разрешить запуск powerd в /etc/rc.conf:
powerd_enable="YES"
powerd_flags="-a adaptive -b adaptive"
разрешить динамическое изменение частоты видео-чипа в
/etc/X11/xorg.conf:
Section "Device"
VendorName "ATI Technologies Inc"
Driver "ati"
Option "DynamicClocks" "on"
...
EndSection
уменьшить частоту переключения процессов с 1000Hz до 100Hz в ядре
options HZ=100
(C) Игорь Сысоев
http://sysoev.ru