OSDev

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

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




Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Реализация перезагрузки
СообщениеДобавлено: 30 сен 2009, 20:39 

Зарегистрирован: 30 сен 2009, 20:26
Сообщения: 12
всем привет
в свободное время пишу свою ОСьку и вот недавно столкнулся с проблемкой
не могу нормально сделать ребут из защищенного режима
сейчас использую вот такой код:
for (;;)
{
// Keyb Reboot
while (TestBit(_inp(0x64), 1));
_outp(0x64, 0xFE);
}
работает норм в VMware, QEMU, Virtual Box и новом Bochs
глючит на старом Bochs (куча ошибок) и на реальном компе (тупо висит)

пробовал еще и вот такие блоки:
// System Port
byte B = _inp(0x92);
SetBit(B, 0);
_outp(0x92, B);

// Triple Fault
byte IDTPD[6] = {0};
__lidt(&IDTPD);
__asm int 3

тоже результат не радует
подскажите пожалуйста кто разбирается в чём может быть проблема
неужели прийдётся делать вручную переключение в реальный режим...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Реализация перезагрузки
СообщениеДобавлено: 30 сен 2009, 21:50 

Зарегистрирован: 05 дек 2008, 03:58
Сообщения: 57
По поводу зависания, он не висит он работает. Только CMOS надо настроить. Ячейка 0Fh должна содержать 0.
Тебе какая перезагрузка интересует мягкая или жесткая? Какая цель перезагрузки.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re^2: Реализация перезагрузки
СообщениеДобавлено: 30 сен 2009, 22:31 

Зарегистрирован: 30 сен 2009, 20:26
Сообщения: 12
цель - реакция аналогичная нажатию кнопки Reset
желательно сбросить всё подобным образом. мало ли как я там запрограммирую устройства... думаю Reset аналогичен жесткой.
(пример: загружаюсь с флоппи, проверяю работу ОСи, вынимаю дискету, запускаю ОС в ребут - и гружусь обычным образом в винду)

BIOS - это реальный режим :(
моя же ОСька работает в защищенке
мне бы очень не хотелось вручную переходить в реальный режим...
и тем более лезть в ACPI (там кода наверно понадобится больше чем во всей ОСьке)...

если это поможет - могу расшарить образ ОСьки и сырцы
мож проблема где-то в другом месте... хотя верится слабо


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re^3: Реализация перезагрузки
СообщениеДобавлено: 30 сен 2009, 22:41 

Зарегистрирован: 05 дек 2008, 03:58
Сообщения: 57
Жесткая перезагрузка на разных материках выполняется по разному.
На Intel через 0CF9h вот код не помню уже давно тестировал.

Мягкая перезагрузка
Reset:
mov dx,0Cf9h
mov al,0
out dx,al
mov al,0+4
out dx,al

jmp $-2;


Жесткая перезагрузка
Reset:
mov dx,0Cf9h
mov al,2
out dx,al
mov al,2+4
out dx,al

jmp $-2;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Реализация перезагрузки
СообщениеДобавлено: 30 сен 2009, 22:57 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
Вот более-менее универсальный код. Используется CMOS и контроллер клавиатуры. На языке С++.
//Set CMOS
outp(0x70, 0x8F); //0xF "Reset Code", 0x80 "NMI Disabled"
outp(0x71, 0); //"Software reset or unexpected reset"
//Reset by Keyboard Controller
outp(0x64, 0xFE); //"Reset"
outp(0x64, 0xFF);
for(;;) {}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re^4: Реализация перезагрузки
СообщениеДобавлено: 30 сен 2009, 23:03 

Зарегистрирован: 30 сен 2009, 20:26
Сообщения: 12
сделал вот так:

// CMOS Reg 0x0F = 0
_outp(0x70, 0x0F);
_outp(0x71, 0x00);

for (;;)
{
// Keyb Reboot
while (TestBit(_inp(0x64), 1));
_outp(0x64, 0xFE);
}

результат тот же - точнее никакой
на ВМках всё по прежнему ОК
на реальном по прежнему ничего

интел это конечно хорошо
но хотелось бы совместимый метод
вроде через клавиатуру и должен быть совместимым
только вот с ним что-то не то

на всяк случай вот ОСь:
(может кто поможет или просто кому-то будет интересно)
"OS Image 2009.09.30 (02).rar" http://slil.ru/28032064
"Kernel 2009.09.30 (02).rar" http://slil.ru/28032067
"DriverPack 2009.09.27 (01).rar" http://slil.ru/28032073
"Tools 2009.09.25 (02).rar" http://slil.ru/28032075

P.S. на реальном компе глючит драйвер 'ATA.bin', поэтому его лучше убрать из Drivers.a


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re^2: Реализация перезагрузки
СообщениеДобавлено: 30 сен 2009, 23:06 

Зарегистрирован: 05 дек 2008, 03:58
Сообщения: 57
NMI я так понимаю надо запретить чтобы ACPI не перехватил.

outp(0x64, 0xFE); //"Reset"
outp(0x64, 0xFF); // если и делать то через 5мс
А то ресет может и не сработать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re^3: Реализация перезагрузки
СообщениеДобавлено: 01 окт 2009, 01:13 

Зарегистрирован: 30 сен 2009, 20:26
Сообщения: 12
попробовал разные варианты:
и такой:
// Set CMOS
_outp(0x70, 0x8F); // 0xF "Reset Code", 0x80 "NMI Disabled"
_outp(0x71, 0x00); // "Software reset or unexpected reset"
// Keyb Reboot
while (TestBit(_inp(0x64), 1));
_outp(0x64, 0xFE);
for (;;);

и такой:
// Set CMOS
_outp(0x70, 0x8F); // 0xF "Reset Code", 0x80 "NMI Disabled"
_outp(0x71, 0x00); // "Software reset or unexpected reset"
// Keyb Reboot
_outp(0x64, 0xFE);
_outp(0x64, 0xFF);
for (;;);

эффект тот же (
в ВМ - ок, на реальном - виснет
---
нашел пару багов в ядре и драйвере клавы+мыши
починил - оказалось что они не при чём
думал может ядро зависает до выполнения кода перезагрузки - тоже похоже не оно
(с юзер проги также попробовал выполнить код ребута)
---
вот последняя версия с некоторыми багфиксами:
"OS Image 2009.10.01 (02).rar" http://slil.ru/28032362
"Kernel 2009.10.01 (02).rar" http://slil.ru/28032363
"DriverPack 2009.10.01 (01).rar" http://slil.ru/28032366


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re^4: Реализация перезагрузки
СообщениеДобавлено: 05 окт 2009, 19:22 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
Тот код используется в моей ОС, и у меня он работает. Чтобы точно всё проверить, попробуй скачать образ CD, записать на CD-болванку и загрузиться. Когда появится белый квадрат нажми Ctrl-Alt-Del, потом любую клавишу. Должна сработать перезагрузка. Образ CD-ROM eos-img-2009.07.18.rar http://code.google.com/p/express-os/downloads/list


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re^5: Реализация перезагрузки
СообщениеДобавлено: 05 окт 2009, 20:59 

Зарегистрирован: 30 сен 2009, 20:26
Сообщения: 12
загадочно
твоя ОСь норм всё ребутает
значит как-то отличается окружение
может дело в видеорежиме? или еще что-то влияет...
---
пару дней назад я своей ОСьке таки написал драйвер CD
так что если не страшно, попробуй запустить из моей ОСи 'FastReboot.bin' :)
интересно - получится ли у тебя ребутнуть комп из моей ОС
код этого файла идентичен тому что используется у тебя
http://slil.ru/28046117


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

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


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

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


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

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