OSDev
http://osdev.su/

Перезагрузка
http://osdev.su/viewtopic.php?f=6&t=472
Страница 1 из 3

Автор:  Bargest [ 03 дек 2011, 20:44 ]
Заголовок сообщения:  Перезагрузка

Вопрос: Существуют ли способы перезагрузки НЕ через
Код:
jmp 0F000h:0FFF0h

и НЕ через
Код:
mov al, 0xFE
out 0x64, al 

? Первый мне не подходит, потому что не хочу возвращаться из x64 в x16, а второй - все-таки какой-то древний и нелогичный. Выключение я через ACPI сделал. Может кто знает, можно ли ребутиться через ACPI? В доках нашел только режим вырубания.

Автор:  pavia [ 03 дек 2011, 21:37 ]
Заголовок сообщения:  Re: Перезагрузка

Для того чтобы перезагрузиться есть куча способов.

Через контролёр клавиатуры. ИХМО наиболее универсальный.
Через порт 92h
APM
ACPI
Тройная ошибка.
Возврат в реальный режим и выполнить jmp 0F000h:0FFF0h
Через мост PCI, железо зависимо, в биосе таких вариантов перезагрузок несколько десятков. У intel порт CF9h
Через Power Manadger - имеется ввиду железка, тоже зависит от производителя.

Автор:  pavia [ 03 дек 2011, 21:40 ]
Заголовок сообщения:  Re: Перезагрузка

Цитата:
mov al, 0xFE
out 0x64, al

Код не правельный

Автор:  Bargest [ 03 дек 2011, 22:49 ]
Заголовок сообщения:  Re: Перезагрузка

Может неправильный, но работает.:D Нашел его здесь же, на форуме.
Ну если через контроллер клавы самый универсальный - может и стоит его поставить... Лишь бы его не убрали.
А что тут не так?

Автор:  Himik [ 03 дек 2011, 22:59 ]
Заголовок сообщения:  Re: Перезагрузка

Через порт клавиатуры не самый правильный. Нет единственно правильного способа. Выполняй последовательность всех известных способов, один да сработает.

Автор:  pavia [ 03 дек 2011, 23:24 ]
Заголовок сообщения:  Re: Перезагрузка

Как бы не хватает проверки буфера перед отправкой данных в порт.
И цикла, после того как. Там должно пройти 6мкс до сброса.

Кстати вот про ACPI нашел
http://wiki.osdev.org/Shutdown
далее
http://forum.osdev.org/viewtopic.php?t=16990

Автор:  ZarathustrA [ 04 дек 2011, 09:07 ]
Заголовок сообщения:  Re: Перезагрузка

Если я правильно понимаю, то triple fault приводит к перезагрузке. Так что, попробуйте просто обнулить IDTR и поделить на 0. :).
P.S.: Если не сложно будет, оповестите о результатах опытов.

Автор:  pavia [ 04 дек 2011, 09:50 ]
Заголовок сообщения:  Re: Перезагрузка

Цитата:
P.S.: Если не сложно будет, оповестите о результатах опытов.

Когда начинал разработку ОС по незнанию сто раз падал на ей.

Автор:  Bargest [ 04 дек 2011, 18:07 ]
Заголовок сообщения:  Re: Перезагрузка

По поводу ACPI - выключение я уже делал, и без 300 строк на си.:) Интересует именно Reboot.
Проверку буфера - спасибо, сделаю.
А перезагрузка через Tripple Fault - это не очень хорошо. Хотя бы потому, что любая виртуалка и эмулятор будет громко материться. Как минимум будет БОРЩ, мб иногда QEMU и VMWare.

Автор:  ZarathustrA [ 05 дек 2011, 10:24 ]
Заголовок сообщения:  Re: Перезагрузка

Bargest писал(а):
По поводу ACPI - выключение я уже делал, и без 300 строк на си.:) Интересует именно Reboot.
Проверку буфера - спасибо, сделаю.
А перезагрузка через Tripple Fault - это не очень хорошо. Хотя бы потому, что любая виртуалка и эмулятор будет громко материться. Как минимум будет БОРЩ, мб иногда QEMU и VMWare.

Ранее вы про виртуалки не упоминали. :) Да, они действительно будут генерировать тонны кирпичей при обнаружении TF.
З.Ы.: как минимум vmware можно попросить не обременять пользователя своими проблемами.

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