Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #67, ИЮЛЬ 2004 г.

Мобильные юниксы vol. 2

Anton Karpov

Xakep, номер #067, стр. 067-082-1

(toxa@real.xakep.ru)

Демоны на коленях

Продолжаем наш экскурс в мир Unix, призванный развенчать навязываемый производителями железа стереотип "На ноутбуки только Windows". В предыдущей статье мы познакомились с тонкостями эксплуатации лаптопов под управлением Linux, а сегодня черед храброго демона доказать, что FreeBSD пятой ветки, как наиболее продвинутый представитель операционок, берущих начало в университете Беркли, может полноценно жить на ноутбуках. Как говорится, "Designed for WindowsXP – Powered by FreeBSD".

ACPI Sleepstates и FreeBSD

Во FreeBSD с поддержкой ACPI все просто. Я не знаю, какими целями руководствовались разработчики, написав поддержку ACPI suspend to disk, но так и не реализовав ее в системе. Я не нашел никаких упоминаний об аналоге линуксовому resume=/dev/hda4, а в списках рассылки всем вопрошающим советуют в лучших традициях OpenBSD’шного лозунга "Shut up and hack" – мол, садись и сам пиши. Так что остается только попытать счастья с Suspend to RAM.

Прежде всего, неплохо бы обновить систему до CURRENT. Дело в том, что с момента последнего релиза (5.2.1) в поддержке ACPI произошли существенные изменения, более того, они происходят постоянно. Все-таки development branch, нестабильная ветка. Легче всего это сделать с помощью cvsup (этот способ неоднократно освещался в журнале).

Для поддержки ACPI ничего, по сути, делать не надо. В конфигурации ядра есть опция device acpi, но ее использовать не рекомендуется – вместо этого по умолчанию грузится модуль acpi.ko. Можно считать, что пятая фряха готова к работе с ACPI "out of the box". Строчки вроде нижеследующих при загрузке ядра (набери dmesg в консоли) свидетельствуют о том, что найдено поддерживающее ACPI оборудование:

Список найденного ACPI оборудования:

acpi0: >SONY< on motherboard

pcibios: BIOS version 2.10

Found $PIR table, 7 entries at 0xc00fdf50

acpi0: [GIANT-LOCKED]

Timecounter "ACPI-fast" frequency 3579545 Hz quality 1000

acpi_timer0: >24-bit timer at 3.579545MHz< port 0x1008-0x100b on acpi0

acpi_cpu0: >CPU< on acpi0

ACPI-0358: *** Error: Region EmbeddedControl(3) has no handler

ACPI-1303: *** Error: Method execution failed [\_PR_.CPU0._CST] (Node 0xc1949320), AE_NOT_EXIST

acpi_tz0: >Thermal Zone< on acpi0

acpi_lid0: >Control Method Lid Switch< on acpi0

acpi_button0: >Power Button< on acpi0

Ошибки говорят о том, что не все ладно в датском королевстве. К чести разработчиков FreeBSD, это говорит не о их плохой работе, а о том, что вендор криво реализовал поддержку ACPI, добавив разработчикам лишнюю головную боль. Они-то пишут код согласно открытым стандартам ACPI, но многие производители оборудования не стремятся им соответствовать, исходя из соображений, что "под виндой-то все работает". Естественно, работает, так как у Microsoft с разработчиками железа свои договора и спецификации :).

После успешного (или нет - это уж как повезет) обновления ядра и всей системы до цуррента (как это сделать, журнал также неоднократно писал) можно взяться за утилиту управления слипстейтами - acpiconf. Система переводится в соответствующее состояние командой acpiconf –s >слипстейт<, например, чтобы сделать Suspend to RAM, набираем:

Содержание  Вперед на стр. 067-082-2
ttfb: 3.6220550537109 ms