среда, 1 октября 2008 г.

Debian Linux на PowerBook 12" 1.5Ghz или videoram error

Года 4 назад купил я себе Powerbook. Это был последний ноут от Apple на архитектуре PowerPC, чем меня и порадовал. Еще-бы, ведь на него чисто физически невозможно поставить M$ Win! MacOS X мне очень понравился и я даже впоследствии снес с ноута мною же установленный linux. Но о MacOS X как-нибудь в другой раз.

Была у ноута неприятная особенность -- очень сильно он грелся. Ну то есть вроде бы и должен был греться алюминевый корпус, но когда я смотрел на температуру видеокарты при какой-нибудь мало-мальской нагрузке -- сердце мое екало.

И вот, в один кошмарный день случился кернел паник и при загрузке системы я увидел "снежок" на экране... Не знаю почему -- но я ухватился за мысль об умирающем винчестере (тем более что действительно имелись с ним проблемы в виде бэд блоков) и решил разобрать свой ноут сам... Даааа -- историю о 60 винтиках, трех сломанных отвертках и 30 ватном паяльнике переносим на другой раз... Винчестер я все-таки поменял,переустановил ОС и начал снова радоваться жизни... До следующего снежка... Теперь при перезагрузке с экраном творилось нечто страшное -- вертикальные полоски, рябь и зависание. Тут-то я и догадался потестить видюху -- ну и конечно получил сквозь рябые полоски сообщение: videoram error.

А надо сказать, что этот ноут на данный момент моя единственная домашняя машина. Вот тут-то я и вспомнил о Linux. Дело в том, что в Single mode MacOS X грузился -- проблемы начинались только при запуске Aqua. И я подумал, что может быть Linux (не зная об 3d аккселерации -- видео от NVidia а архитектура PPC -- драйверов с 3Д нет физически) позволит мне протянуть время до покупки новой машины. И вот здесь начинается самое интересное. Лихорадочно разбрасывая завалы пыльных дисков в шкафу я нащупал его -- сетевой диск для установки Debian!!! И понеслось...

Первое и самое главное -- оборудование работает все. Ну то есть, кроме модема -- так как не пробовал. Второе -- работает даже мультитач, то есть, если кто не знает, в MacOS X есть такая приятная особенность -- скроллинг двумя пальцами по точпаду -- очень удобно -- так вот, и это тоже настраивается. Третье -- на убитой видюхе работают X11 (без акселерации правда). Работает hibernate to disk (но не в ram). Работают кнопки Fn. И даже температурный контроль. А теперь обо всем этом без лирики.

Убитая видеокарта

Параметр к ядру (yaboot.conf):

append="quiet video=nvidiafb:noaccel"

Параметры в Xorg.conf

Section "Device"
Option "SWcursor" "True"
Option "NoAccel" "False"
Option "ShadowFB" "True"
Option "FlatPanel" "True"
Option "DualHead" "False"
Identifier "Card0"
Driver "nv"
VendorName "nVidia Corporation"
BoardName "NV34M [GeForce FX Go5200]"
BusID "PCI:0:16:0"
EndSection

Мультитач

Section "InputDevice"
Identifier "Mouse0"
Option "Device" "/dev/input/mice"
Driver "synaptics"
Option "SendCoreEvents" "true"
Option "Protocol" "auto-dev"
Option "MinSpeed" "0.4"
Option "MaxSpeed" "1"
Option "AccelFactor" "0.07"
Option "FingerLow" "3"
Option "FingerHigh" "10"
Option "HorizScrollDelta" "40"
Option "VertScrollDelta" "40"
Option "SHMConfig" "on"
Option "RTCornerButton" "0"
Option "LTCornerButton" "0"
Option "MultiFingerButton" "2"
Option "MultiFingerLock" "1"
Option "VertTwoFingerScroll" "on"
Option "HorizTwoFingerScroll" "on"
Option "PalmDetect" "on"
Option "TapButton1" "0"
Option "TapButton2" "0"
Option "TapButton3" "0"
EndSection

Чтобы работали опции MultiFingerLock и MultiFingerButton я использовал следующий патч: http://ubuntu-virginia.ubuntuforums.org/showthread.php?t=626112&page=2. Он позволяет эмулировать клики мыши 2 и 3-й кнопкой на точпаде за счет касания двумя и тремя пальцами и нажатия единственной кнопки точпада Powerbook'а.

Hibernate

Настроить hibernate to ram у меня не получилось, но судя по сообщениям в интеренете оно и не работает на 12" Powerbook. Hibernate to disk получился только с переходом на suspend2 или TuxOnIce и установкой скриптов hibernate. (apt-get install hibernate). При этом в файле /etc/hibernate/common.conf изменены следующие строки:
UnloadAllModules yes
LoadModules auto
SwitchToTextMode yes
IncompatiblePrograms xmms audacious mpd
RestartServices alsa-utils powernowd laptop-mode anacron pbbuttonsd

В файле /etc/hibernate/suspend2.conf:

SuspendDevice swap:/dev/hda5

В файле /etc/hibernate/hibernate.conf оставлен только метод suspend2.
Параметры к ядру теперь:

append="quiet video=nvidiafb:noaccel,1024x768-16@60 resume=swap:/dev/hda5"

Чтобы hibernate активировался при закрытии крышки я установил пакет pbbuttonsd и в конфиге /etc/power/pmcs-pbbuttonsd внес правку:

case "$1" in
emergency)
shutdown -h now "Low battery - system will go down now!"
;;
shutdown)
shutdown -h now "User requested shutdown - system will go down now!"
;;
suspend) #HERE IT IS!!!
hibernate --kill &
exit 0
;;
*)
cd `dirname $0`
PATH=$PATH:$PWD
[ -d ${1}.d ] && run-parts --arg="$1" --arg="$2" --arg="$3" ${1}.d
run-parts --arg="$1" --arg="$2" --arg="$3" event.d
;;
esac

А в /etc/pbbuttonsd.conf заменил suspend-to-ram на suspend-to-disk.

Температурный режим

Пока я пересобирал ядро, ноутбук умирал 2 раза -- от перегрева. После второго раза я попробовал cpudyn и powernowd, последний мне понравился больше. Конфиг /etc/default/powernowd:

OPTIONS="-q -m2 -l40 -u80"

Задает щадящий режим процессора. Кроме того для жетского управления можно менять гувернера:

cpufreq-selector -g powersave
cpufreq-selector -g performance

или

cpufreq-selector -g userspace -- обратно к управлению от powernowd.

И все-равно мне показалось, что модуль therm_adt746x (на моей машинке он давал доступ к датчикам температур и управлению скоростью вращения вентилятора) плохо управляет вентилятором. Ноутбук по-прежнему перегревался.
Исходный текст драйвера показал его способ управления вентиляторами.

int var = th->temps[i] - th->limits[i];
if (var > -1) {
int step = (255 - fan_speed) / 7;
if (abs(var - th->last_var[fan_number]) < started =" 1;" new_speed =" fan_speed" new_speed =" fan_speed;"> 255)
new_speed = 255;

То есть, если совсем грубо -- максимальное вращение вентилятора приходится на гранично-допустимую температуру + 7. Максимальная скорость 255.
Файл /etc/modprobe.d/adt

options therm_adt746x limit_adjust=-12 fan_speed=220

Что соотвествует границе температуры GPU в 56 градусов, при этом скорость вентилятора будет составлять 220 и дайдет 255 при 56 + 7 градусов. Довольно аггресивно, но прохладно. Кроме того я поменял дефултные значения границ с:

static u8 default_limits_local[3] = {70, 50, 70}; /* local, sensor1, sensor2 */

на

static u8 default_limits_local[3] = {70, 55, 70}; /* local, sensor1, sensor2 */

чтобы после корректировки limit_ajust'ом они составили: (58, 43, 58), а не (58, 38, 58) что уже явно слишком (для CPU).
После этих изменений температурный режим ноутбука при 100% загрузке не приводил к перегреву.

Обновление: Таки перегрелся. Вентилятора powerbook 12" не хватает, чтобы выдерживать такую низкую температуру. Еще одно решение, оставить автоматический режим работы вентилятора и не делать коррекцию температур. Исходный код therm_adt746x.c. Закомментировать строки:
        if (fan_speed == -1)
fan_speed = 64;

Необходимо убрать параметры fan_speed и limit_ajust из параметров модуля. При этом датчики будут доступны в Linux, но вентилятор останется работать в автоматическом режиме -- похоже этот режим немного умнее той логики, что реализована в драйверве. Максимальная температура в этом режиме составила 63/66C для CPU и GPU соотвественно.
Мелочи
Файл /etc/rc.local

echo "ide-disk" > /sys/class/leds/pmu-front-led/trigger
/sbin/fnset -u

Лампочка защелки играет роль лампочки активности ide. Функциональные клавиши работают по умолчанию, а клавиши Powerbook'a (яркость, громкость и прочее) совместно с нажатой Fn.

wifi и bluetooth работают из коробки, только для wifi нужна проприетарная прошивка (о необходимости которой скажет ядро -- см. dmesg при активации интерфейса).

Итоги

Линукс очень хорош в своей гибкости и вывернутости наизнанку. Фактически он спас мне домашний ноут, на котором я и пишу сейчас эту статью... А поставив в качестве оконного менеждера dwm, я понял, что бук мне еще послужит... ;)

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

Архив блога