[ASM] Gorący restart w trybie chronionym
Ostatnio zmodyfikowano 2013-06-28 00:13
Brezniew Temat założony przez niniejszego użytkownika |
[ASM] Gorący restart w trybie chronionym » 2013-06-26 20:02:59 Witam. Pisząc system operacyjny na samym jego początku w pamięci jako pierwszy adres IP funkcje restartującą komputer a za nią adres funkcji głównego kodu kernela systemu w c. ... jmp _1 _1: EXTERN start_kernel push dword reboot push dword start_kernel ret ;skok do start_kernel ...
Mam problem z napisaniem funkcji reboot którą w trybie rzeczywistym napisałbym tak: ... reboot: mov bx, 40h mov ds, bx mov word [ds:72h], 1234h ;ustawienie gorącego restartu jmp 0FFFFh:0000h ;skok początku kodu biosa bios-a ...
Chyba jest oczywiste to dlaczego taki kod nie zadziała w trybie chroniony. |
|
Elaine |
» 2013-06-26 20:20:53 Odczytaj z tablic ACPI informacje o rejestrze resetującym — jego typ, rozmiar, adres i wartość, którą należy do niego wpisać.
Nie ma w FADT takich informacji lub nie chce ci się implementować obsługi ACPI i PCI? Ustaw IDT o limicie 0 i wywołaj przerwanie, czego skutkiem będzie triple fault i reset CPU. |
|
Brezniew Temat założony przez niniejszego użytkownika |
» 2013-06-26 20:39:27 Przy wykorzystaniu metody triple fault przy użyciu błędnego IDT ale dochodzi do zimnego restartu, ale myślałem też o ponownym przełączeniu procesora w tryb rzeczywisty bo po prostu ustawieni gorącego restartu i skok pod adres bios-a może wywołać inne komplikacje a bios pracuje przecież w trybie rzeczywistym i jest kodem 16-bitowym. Co do przełączania trybu procesora to chyba nie wystarczy sama zmiana flagi w rejestrze cr0, nie wiem czy nie trzeba będzie zablokować linię A20. |
|
Elaine |
» 2013-06-26 22:23:28 Jeśli chodzi o soft reboot bez pomocy BIOSu, to musiałbyś ustawić wszystkie urządzenia do stanu pierwotnego. Nie mając sterowników do każdego urządzenia (wliczając np. chipset mobo!) trudno to zrobić.
Wyjść do trybu rzeczywistego w teorii można, ale w praktyce nie zawsze to spowoduje, że znowu można używać wywołań BIOSu, bo na przykład w międzyczasie twój sterownik USB zainicjalizował kontroler, wyłączając emulację klawiatury PS/2 w firmware, kiedy kod BIOSu oczekuje jej włączonej.
Dla uniknięcia problemów lepiej zrobić hard reboot.
Chyba, że chodzi o soft reboot w znaczeniu reinicjalizacji jądra, ale wtedy implementacja zależy od konstrukcji kernela. |
|
Brezniew Temat założony przez niniejszego użytkownika |
» 2013-06-27 18:35:26 A jak wykonać taki hard reboot. |
|
pekfos |
» 2013-06-27 19:08:24 Tak samo jak zimny restart, bo to jedno i to samo. |
|
DejaVu |
» 2013-06-28 00:13:02 Jeden temat = jeden problem. Zamykam. |
|
« 1 » |