OSDev

для всех
Текущее время: 21 дек 2024, 19:23

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




Начать новую тему Ответить на тему  [ Сообщений: 53 ]  На страницу Пред.  1, 2, 3, 4, 5, 6  След.
Автор Сообщение
 Заголовок сообщения: Re: QSinit
СообщениеДобавлено: 25 сен 2022, 20:37 

Зарегистрирован: 10 окт 2013, 14:54
Сообщения: 98
Ну, тут живая (как минимум, undead :lol:) 16/32 система, написанная в эпоху роста PC.
Из плюсов в этом то, что она готова к глючным биосам, т.е. использование редких сервисов минимально.

Но VDM это таки жесть, да. Осевой VDM суров в целом, ось же умеет роутить реальные прерывания в VDM, если нету системного драйвера, который их обрабатывает. Когда-то оч. давно даже отлаживал досовский SB16 софт с прямым доступом к железу в осевой VDM.

Но тут весь BIOS эмулировать не надо, т.е. железо остаётся в том же состоянии, в котором его оставила EFI фирмварь. Задача - проскочить от её до старта собственных драйверов системы. Там уже ACPI разберётся с прерываниями, а всё остальное даст и клавиатуру и диски и прочее ...

А сервисы BIOS - строго на уровне необходимого ... пришлось, конечно, даже экзотику типа int 14h эмулировать ибо ось гонит вызовы из VDM прямо в BIOS. Надо хотя бы код ошибки корректный отдать, поскольку некоторые игрушки пытаются лезть к компортам именно так ;)

В итоге слово Virtual в VDM получило куда более явное наполнение. Но оно работает - и славно. Всяческая тьма досовского софта - текстовые редакторы, игры, итд.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: QSinit
СообщениеДобавлено: 21 мар 2023, 00:11 

Зарегистрирован: 10 окт 2013, 14:54
Сообщения: 98
Много лет собирался проапдейтить описание с картинками и это таки удалось ;)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: QSinit
СообщениеДобавлено: 21 мар 2023, 07:57 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1426
Смотрю, EFI тоже используете. Поэтому вопрос на засыпку: есть ли где готовое описание сей фигни, достаточно подробное для, грубо говоря, продвинутого хелловорлда, но без лишних заморочек? (Так-то понятно, что надо брать и читать стандарт, но лениво только ради "побаловаться").


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: QSinit
СообщениеДобавлено: 21 мар 2023, 10:17 

Зарегистрирован: 10 окт 2013, 14:54
Сообщения: 98
Сам я начал с того, что взял древнейший EFI тулкит и пример оттуда за основу. Оно аж под EFI 1.0/1.1, но чудесно работает до сих пор и моя сборка на нём и основана - с добавлением хедеров для более новых протоколов :)

Это, как бы, наиболее гуманный вариант по сравнению с монстроидальными вещами типа UDK ... Для сборки хватает любого 64-битного cl из виндовой DDK ....

Если это не подходит, то можно просто глянуть примеры оттуда :) Это то, с чего оно когда-то начиналось 20 лет назад. Собрать тот же apps\osloader и запустить из EFI шелла - оно до сих пор так в реальных загрузчиках OS и происходит (с тем небольшим исключением, что некоторые творческие фирмвари подразумевают вызов SetVirtualAddressMap и вешаются потом на рантайм функциях если его не сделать - но для для Hello, world-а оно и не надо ;)).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: QSinit
СообщениеДобавлено: 21 мар 2023, 12:16 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1426
Спасибо, будет (надеюсь) время -- гляну :)

А сам UEFI ограничивает загруженный им код в плане доступа к железу? Т.е. можно ли, скажем, самому запрограммировать контроллер USB, UART и всё такое примерно так, как делалось бы под ДОСом (т.е. забив на систему и взяв управление на себя)? Или пляски нужны?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: QSinit
СообщениеДобавлено: 21 мар 2023, 18:22 

Зарегистрирован: 10 окт 2013, 14:54
Сообщения: 98
А как фирмварь может это сделать?
Ring 0, плоская память (некоторые, правда, прячут таблицу страниц, замапив по её адресам нули) ...

Никто не мешает писать что угодно в железо, другой вопрос, что собственные драйвера фирмвари поведут себя неизвестным образом.
Поэтому, у меня, например, запрещёна прямая посекторная запись на системный EFI раздел с которого стартанул модуль - хз как и что они там кэшируют ...
Тоже самое со всеми USB клавами, мышами, флешками и пр ...

Но всё это работает только пока есть boot сервисы - выход в OS подразумевает их удаление и остаётся только самый минимум (доступ к переменным и ребут). Тут уже только чистое железо и загрузчик.

Писать в компорты никто не запрещает ... GDT подменяю на свою, сохранив в начале все селекторы фирмвари, IDT тоже патчу напрямую - и это всё работает практически везде на x64.

Стоит только иметь в виду, что вставные внешние компорты могут быть запрещены на PCI, фирмварь парится их разрешением только если включен CSM.

Плюс, фирмварь может сама ходить в реальный (в VESA биос, например). Поэтому все селекторы при уходе в код фирмвари должны быть валидны ... иначе оно молча помрёт на чём-ньть, когда туда полезет чтобы поставить графический режим (например). В общем, тьма подводных камней вполне себе присутствует ... ;)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: QSinit
СообщениеДобавлено: 22 мар 2023, 13:54 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1426
Ну, я вообще давно от программирования под ПК отошёл, всё на микроконтроллерах сижу (на АРМах, главным образом), вот и не в курсе, как ЕФИ себя ведёт: под него ничего ж не делал. А что там полно подводных камней -- оно как бы очевидно: Интел же делала, а они отродясь ничего прямо в плане архитектуры не делали. COM-порт на моих материнках железный, почему про него и спросил: его ж завести проще простого, а значит, легко дать знать внешнему миру, что ты живой.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: QSinit
СообщениеДобавлено: 23 мар 2023, 11:36 

Зарегистрирован: 10 окт 2013, 14:54
Сообщения: 98
У меня тоже привычка к компорту/логгированию всего, с тех пор как много лет писал под TV боксы ...
Нахождение багов исключительно по логам, итд ;)

EFI хорош своим деревом устройств ... но всё это только для начальной загрузки - т.е. подразумеваемая схема - загрузчик OS читает в память все свои базовые драйвера, выходит из EFI в голое железо (там реально ничего не остаётся из сервисов) и стартует уже всё своё ...
В какой-то степени это даже рационально - ибо ест EFI куда больше, чем BIOS и эту память лучше отдать OS.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: QSinit
СообщениеДобавлено: 23 мар 2023, 12:29 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1426
Эх, хорошо на мэйнфреймах, в т.ч. современных: никаких тебе BIOSов и EFI (вообще никакого ПЗУ нет, вся память -- оператива), загрузка, с точки зрения программиста, инициируется чисто аппаратно и всегда стандартная, работа с периферией тоже стандартизована (одинаковые базовые наборы команд для любых типов дисков, например; разница -- в "геометрических" характеристиках и во всяких вспомогательно-диагностических вещах, для ОС бесполезных)...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: QSinit
СообщениеДобавлено: 24 мар 2023, 11:52 

Зарегистрирован: 10 окт 2013, 14:54
Сообщения: 98
Ну, PC - это, ж, своего рода, "живой музей эволюции".
Ну кто в здравом уме придумает ту же MBR разбивку, например? Со всеми дикими заморочками её расширенного раздела.
Чисто результат метода проб и ошибок ... И так всё.


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

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


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

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


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

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