OSDev

для всех
Текущее время: 09 май 2024, 21:17

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Rebbot.
СообщениеДобавлено: 08 ноя 2010, 17:35 

Зарегистрирован: 18 апр 2010, 15:59
Сообщения: 155
Народ. Может кто помнит, как можно произвести перезагрузку компа программными методами. Я помню где-то видел инфу по этому поводу (что-то надо писать по определенным портам), но не помню, где я ее находил.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Rebbot.
СообщениеДобавлено: 08 ноя 2010, 18:51 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
Можно через контроллер 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). Надо в выходной порт контроллера выдать 0.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Rebbot.
СообщениеДобавлено: 08 ноя 2010, 19:21 

Зарегистрирован: 18 апр 2010, 15:59
Сообщения: 155
Не-не-не.

Мне нужен не сброс процессора (Этого я могу добиться применяя на себя IPI init). Мне нужен именно ребут с полным циклом загрузки (BIOS, POST и т.д.). Должен где-то быть порт запись в который изменяет поведение мамки при сбросе процессора. (типа, бит установлен - ребут при сбросе, бит сброшен - простой shutdown).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Rebbot.
СообщениеДобавлено: 08 ноя 2010, 23:51 
Аватара пользователя

Зарегистрирован: 16 апр 2010, 10:10
Сообщения: 320
Откуда: Псковская обл.
;-------------;
; reboot ;
;-------------;
reboot:
call kbd_wait
mov al, 0xFE
out 0x64, al
jmp $
ret


;------------------;
; keyboard wait ;
;------------------;
kbd_wait:
jmp $+2
in al, 0x64
test al, 1
jz .ok
jmp $+2
in al, 0x60
jmp kbd_wait
.ok:
test al, 2
jnz kbd_wait
ret

У меня так работает.(взято из исходников Bos)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Rebbot.
СообщениеДобавлено: 09 ноя 2010, 05:24 

Зарегистрирован: 18 апр 2010, 15:59
Сообщения: 155
iz56 <-- спасибо, взял на заметку.

Однако возник более извращенный вопрос. Существует ли механизм позволяющий отправить систему в ребут без непосредственного обращения к железу? Что-то похожее на следующую схему:
1) ПО программирует мать на ребут.
2) Процессор делает например system-wide INIT IPI.
3) Вместо сброса процессоров поучаю сброс всей системы.

Вопрос возникает по следующей причине. Не хочу привязывать ядро к железу (за исключением процессора). Да-да-да ядро это сферический конь в вакууме, этакий драйвер процессора. Однако, в природе наличествует такое явление как паника ядра. Можно по итогу паники уводить ядро в бесконечный холостой halt-цикл и все вроде как в шоколаде. Но с другой стороны, существует большой сегмент рынка, где прям таки требуют возможности изменения такого поведения ядра на перезагрузку (что б не приходилось бегать за три девять земель, просто чтобы нажать кнопку reset на системнике). Вот я и думаю, то ли полностью делегировать управление питанием наружу. То ли регистрировать какой-то выносной ребут-модуль.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Rebbot.
СообщениеДобавлено: 11 ноя 2010, 14:37 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
Процессор сбрасывается от тройного исключения. Для этого пожалуй нужно обнулить все элементы IDT, и вызвать какое-нибудь прерывание или исключение.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Rebbot.
СообщениеДобавлено: 11 ноя 2010, 18:10 

Зарегистрирован: 18 апр 2010, 15:59
Сообщения: 155
Очень интересная идея. Пожалуй это мне подходит. Спасибо.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 94


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB