OSDev
http://osdev.su/

Как выключить/перезагрузить машину?
http://osdev.su/viewtopic.php?f=6&t=314
Страница 1 из 2

Автор:  asmforce [ 01 мар 2010, 22:41 ]
Заголовок сообщения:  Как выключить/перезагрузить машину?

Как выключить/перезагрузить машину через ACPI? Как с ним работать?
Заранее спасибо.

Автор:  SII [ 02 мар 2010, 03:20 ]
Заголовок сообщения:  Re: Как выключить/перезагрузить машину?

Ну Вы и вопрос задали... Для начала изучить соответствующие разделы спецификации ACPI, что, учитывая их объём, займёт немало времени :) Лично я эту задачу никогда не решал, поэтому ответить в данный момент не могу.

Правда, учинить перезагрузку можно (по крайней мере, раньше можно было) без всякого ACPI -- через контроллер PS/2 (см, например, здесь: http://ru.osdev.wikia.com/wiki/%D0%9A%D0%BE%D0%BD%D1%82%D1%80%D0%BE%D0%BB%D0%BB%D0%B5%D1%80_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D0%B0_PS/2).

Автор:  KIV [ 02 мар 2010, 16:56 ]
Заголовок сообщения:  Re: Как выключить/перезагрузить машину?

http://a2os.org.ua/forums/topic.php?forum=10&topic=4
Вот. Там рассказывается как проще всего выключить компьютер через ACPI. А перезагрузка через контроллер PS/2 работает и по сей день. Вот так:
Код:
mov al, 0xFE
out 0x64, al

Автор:  asmforce [ 08 мар 2010, 18:29 ]
Заголовок сообщения:  Re: Как выключить/перезагрузить машину?

Теперь сам понимаю, о чем спросил. Извините, что отвлек. А за ответы спасибо.

Автор:  asmforce [ 19 фев 2011, 15:56 ]
Заголовок сообщения:  Re: Как выключить/перезагрузить машину?

Мимо проходил, вспомнил, что недавно нашел способ отключения через APM:
// Проверено на VirtualBox (если что, версия 4.0.2); Отключение работает. StandBy, Suspend игнорируются;

// INT 0x15
// The Advanced Power Management Set Power State BIOS function is called to place the system
// in the requested state. The system BIOS only responds to power device ID = 0x0001 (system
// BIOS).
Input Parameters:
AH - 0x53, indicating an Advanced Power Management Function.
AL - 0x07, indicating Set Power State Subfunction.
BX - 0x0001, indicating system BIOS.
CX - System State ID, as follows:
0x0000 - Ready (not supported for device ID 0x0001).
0x0001 - Standby.
0x0002 - Suspend.
0x0003 - Off (not supported for device ID 0x0001).

Output Parameters:
CY - set if failure, else clear if success.
AH - error code, as follows:
0x01 - power management functionality disabled.
0x09 - unrecognized device ID.
0x0a - parameter valud in CX out of range.
0x60 - cannot enter requested state.
0x86 - APM not supported.

Автор:  phantom-84 [ 19 фев 2011, 20:30 ]
Заголовок сообщения:  Re: Как выключить/перезагрузить машину?

APM - прошлый век! Я от него полностью отказался.

http://www.wasm.ru/forum/viewtopic.php?id=21777

Автор:  pavia [ 19 фев 2011, 20:42 ]
Заголовок сообщения:  Re: Как выключить/перезагрузить машину?

То есть ты написал виртуальную машину ACPI?

Автор:  phantom-84 [ 19 фев 2011, 23:01 ]
Заголовок сообщения:  Re: Как выключить/перезагрузить машину?

Нет, пока что делаю первые шаги в этом направлении, ну и в крайнем случае использую сообщение "Теперь питание компьютера можно отключить."

Автор:  SII [ 20 фев 2011, 00:31 ]
Заголовок сообщения:  Re: Как выключить/перезагрузить машину?

Просто нет смысла изучать устаревший стандарт, который поддерживается только для совместимости со старым ПО. А посему, если уж заморачиваться, что с ACPI, но никак не с APM.

Автор:  asmforce [ 20 фев 2011, 00:52 ]
Заголовок сообщения:  Re: Как выключить/перезагрузить машину?

phantom-84 писал(а):
APM - прошлый век! Я от него полностью отказался.

http://www.wasm.ru/forum/viewtopic.php?id=21777



Я не спорю. `В будущем` тоже `планирую` использовать ACPI для управления питанием, но пока можно и это юзать.
Кто-то использует перезагрузку через контроллер клавиатуры, что тоже ненадолго.

Страница 1 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/