OSDev

для всех
Текущее время: 29 апр 2024, 19:40

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




Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
СообщениеДобавлено: 04 май 2014, 23:20 

Зарегистрирован: 10 апр 2012, 23:19
Сообщения: 277
Mirmik писал(а):
Как из защищенного режима выполнить перезагрузку?


да мне это тоже интересно,

есть варианты
1 - смотри ACPI
2 - переводи обратно в режим RM и выключай.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 05 май 2014, 01:15 

Зарегистрирован: 26 мар 2012, 17:32
Сообщения: 209
Mirmik писал(а):
Вопрос в догонку.

Как из защищенного режима выполнить перезагрузку?

Перезагрузиться просто:
1) если есть клавиатурный контроллер (8042) - через него можно
2) ещё можно triple-fault устроить
3) ещё можно посмотреть чего делает ключ параметр reboot=pci у линуха.
Вот выключать уже куда сложнее, нужно поддерживать ACPI.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 05 май 2014, 02:33 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
Есть ещё системный порт 92h:
in al, 92h
or al, 1
out 92h, al

Я рекомендую выполнять цепочку процедур "перезагрузки", тоесть после этого способа сразу вызывать другой (с помощью порта клавиатуры) и т.д. пока комп не уйдёт в перезагрузку.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 05 май 2014, 02:57 

Зарегистрирован: 26 мар 2012, 17:32
Сообщения: 209
Himik писал(а):
Есть ещё системный порт 92h:
in al, 92h
or al, 1
out 92h, al

Я рекомендую выполнять цепочку процедур "перезагрузки", тоесть после этого способа сразу вызывать другой (с помощью порта клавиатуры) и т.д. пока комп не уйдёт в перезагрузку.
Где-то, может, и есть, но похоже что далеко не везде, а писать в нереализованные/нестандартные порты - идея плохая. Например, народ пишет что на машинах без 8042 попытка работы с портами 0x60/0x64 приводит к зависанию.
Но да, в случаях когда способов несколько - есть последовательности в которых способы лучше пробовать.
Касательно ребута: http://wiki.osdev.org/Reboot
Там и про выключение немного есть: http://wiki.osdev.org/Category:Power_management


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 05 май 2014, 05:30 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Ну не знаю где автор строк нашёл машину без 8042 это нонценс!! И там явно уже специфичные вещи.
Но да способ этот устаревший. И насколько знаю МС от него давно отошла в сторону 92 порта.
Есть ещё PCI перезагрузка. Она более полная перезагружает почти все устройства компьютера.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 05 май 2014, 10:08 
Аватара пользователя

Зарегистрирован: 20 мар 2014, 12:53
Сообщения: 45
А как перезагружаться правильно?...

Ну, например, как винда, или линух...

З.Ы. У некоего линуха нашел reboot.c, но там текста больно много...

_________________
http://osdev.ru/viewtopic.php?f=4&t=893 - GenOS


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 05 май 2014, 10:12 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
У меня сброс через клавиатурный контроллер – основной способ, через системный порт A – дополнительный. Для установки шлюза A20 аналогично. Проблем не наблюдал.

Mirmik, если вы еще не осилили ACPI, то мой способ вполне нормальный.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 05 май 2014, 12:06 
Аватара пользователя

Зарегистрирован: 20 мар 2014, 12:53
Сообщения: 45
phantom-84 писал(а):
У меня сброс через клавиатурный контроллер – основной способ, через системный порт A – дополнительный. Для установки шлюза A20 аналогично. Проблем не наблюдал.

Mirmik, если вы еще не осилили ACPI, то мой способ вполне нормальный.



К... Но, наверное, ACPI всё же надо осилить...

_________________
http://osdev.ru/viewtopic.php?f=4&t=893 - GenOS


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 06 май 2014, 12:11 

Зарегистрирован: 15 апр 2014, 14:13
Сообщения: 127
Mirmik писал(а):
Не могу найти функцию scan2ascii...
Рекомендую познакомиться с готовыми ОС с открытым кодом. Есть вполне нормально документированные экземпляры - оттуда и можно содрать нужные функции. Ну или как минимум познакомиться с нормально работающим драйвером.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 07 май 2014, 20:38 

Зарегистрирован: 31 окт 2011, 18:20
Сообщения: 230
У меня такой вариант (через ACPI):
Код:
;----------------------------------------------------------------
; Reboots computer
;----------------------------------------------------------------
RebootFunc:
; Old school:
;  mov al, 0xFE
;  out 0x64, al
;
; New school:
RESET_REG = 116       ; 12 bytes
RESET_VAL = 128       ;  1 byte

struc ResetRegStruc A
{
 virtual at A
  .SpaceID     db 0
  .BitWidth    db 0
  .BitOffset   db 0
  .AccessWidth db 0
  .Address     dq 0
 end virtual
}

ResetReg ResetRegStruc rdi

cli
  mov rdi, [FADTAddr] ; FADT from ACPI
  xor rax, rax
  mov  al, [rdi+RESET_VAL]   ; Load Reset Value
  add rdi, RESET_REG
  mov rdx, [ResetReg.Address]
  mov  cl, [ResetReg.SpaceID]

  cmp cl, 0                  ; Memory space
  jnz @f
   mov [rdx], al

  @@:
  cmp cl, 1                  ; IO space
  jnz @f
   out dx, al

  @@:                        ; PCI CFG Space
  cmp cl, 2
  jnz @f
   mov r14b, al              ; Value
   mov  ebx, edx
   shr  ebx, 24              ; Dev (ddddd)
   and   bl, 1Fh
   shl   bl, 3
   mov  eax, edx
   shr  eax, 16
   and   al, 7               ; Func (fff)
   or    bl, al              ; dddddfff
   shl   bx, 8               ; move to bh
   xor   ax, ax              ; Byte count and bus
   mov   bl, dl              ; Addr
   call PCIRegWrite
  @@:
jmp $


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу Пред.  1, 2, 3  След.

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


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

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


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

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