|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
19.08.2008, 15:05 | #1 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
Разработка собственной ОС
Всем привет. Как бы это не звучало смешно, НО стоит призадуматся, а почему бы нет ? Я сам лично тоже изучаю, поэтому абсолютно на все вопросы дать ответы не смогу но буду стараться. Излагать буду не грамоздко, а как возможно компактнее.
Причины которые сподвигли меня на это: 1. Разобраться как все устроено в ПК. 2. Довести до ума мои знания Asm и C. 3. Существует ряд статей в сети на эту тему, но все они не дают полного понимания того, что просиходит в коде. 4. Просто это интересно По сути последнии и самые популярные ОС, всем известные Windows и Linux основаны на идеях еще 20го века И так главная идея всей этой задумки, это просто: "Для изучения и понимания". А в будущем будет видно что из этого выйдет. Начало будет обычным, а дальше будем думать уже вместе. И так к делу: 1. Софт Для разработки нашей ОС понадобится ( выбран софт, который я использую, можете выбрать какой вам угоден ): 1. Виртуальная машина для теста Bochs 2. Ассемблер Nasm 3. Для создания кода на языке С понадобится MinGW 4. Так же информация о Asm, C, Железе, Прерываниях BIOS HelpPC 2. Теория Так мы начинающие в этом деле то будем начинать с самого малого. Этапы запуска нашей ОС это 1. Загрузка ( в нашем случае будем грузиться с флоппика, в будущем будет видно ) 2. Проверка и инициализация оборудования 3. Загрузка всех необходимых данных для нашей ОС и запуск «диалога» с пользователем. 3. Загрузчик И так забываем о файловых системах, и вообще о понятии «файл». Флоппик ( дискета ) делится на сектора. Каждый сектор это 512 байт. При запуске ПК BIOS инициализирует все оборудование, проверяет его на ошибки. Дальше читает дискету, если она будет, то читаются первые 512 байт ( т.е. первый сектор ) по адресу 0000:07c0 и иму передается управление. Именно эти 512 байт и будут «первичным» загрузчиком. Почему первичным т.к. именно в этих 512 байт мы должны будем вместить код для передачи управления коду который будет распалогаться далее на дискете после первого сектора. Т.к. мы только загружаемся у нас есть BIOS и не более, поэтому начнем с Nasm. Последний раз редактировалось BOBAH13; 19.08.2008 в 16:01. |
19.08.2008, 15:06 | #2 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
boot.asm
Код:
Последний раз редактировалось BOBAH13; 19.08.2008 в 15:23. |
19.08.2008, 15:23 | #3 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
Теперь наша задача скопоновать код по адресу 0000:0700, это будет наш "вторичный загрузчик".
В этот раз наша задача состоит в: 1. Включить линию А20, это даст возможность использовать на полную память ПК 2. Загрузить GDT - таблица дескрипторов 3. Перейти в защищенный режим процессора. Есть еще реальный режим, в чем его недостатки можете прочитать в сети безовсяких проблем . 4. Скопировать ядро и передать ему управление. 5. Пишем уже на С . setup.asm Код:
Последний раз редактировалось BOBAH13; 19.08.2008 в 15:29. |
19.08.2008, 15:30 | #4 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
A20.asm я выудил с одного сайта, уже даже и не помню где именно, но писал его умный человек вот код:
Код:
|
19.08.2008, 15:37 | #5 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
И вот уже мы перешли непосредственно к ядру нашей ОС. И как разработчики-профи должны писать уже на С.
Для нормальной компановки нашего образа дискеты создадим один .c файл, как точка входа в язык С. entry.c Код:
Код:
И так чтобы собрать выше я указал нужный нам софт, если все скачали и поставили то приступим. Все что у нас уже есть так это boot.asm, setup.asm, A20.asm, entry.c, kenrle.c. Чтобы собрать создадим MyOS_build.bat такого содержания Код:
Код:
Последний раз редактировалось BOBAH13; 19.08.2008 в 15:50. |
19.08.2008, 23:06 | #6 |
Пользователь
Регистрация: 07.08.2008
Сообщений: 33
|
1. ^_^ Написание ос - дело трудное, а в одну харю и вовсе бесперспективное. Занимался этим вопросом, сваял подобие ядра со всеми приблудами - защищенный режим, станичная адрессация, менеджер памяти (страничный аллокатор+менеджер кучи), подобие интерфеса для драйверов, IPC (на основе механизма передачи сообщений), работа с ext2. По железу - флоп, клава....
писал на nasm-e и dev-c++ (типа gcc+Visual Studio.. между нами девочками, VS просто отдыхает) эмулятор - qemu manager-4.0 2. Загрузчик - дело последнее, как бы странно это ни звучало. На первых порах сгодится подобие, писанное левой задней ногой. Можно даже без файловой системы - лишь бы грузило конкретный участок кода в конкретный участок памяти. ИМХО в первую очередь надо написать мини-микроядро (понимайте как хотите =)) ) и интерфейсы к нему, а после этого уже становится возможным распределение задач между программистами. 3. Чтож.. я готов принять участие, но к таким вещам надо подходить как проектировщик, а не быдлокодер. (прошу не обижаться - сам был таким, когда хватался за это)
"... Раньше мы жили завтра, а теперь и сегодня - вчера
Вместо Роллингов - хакеры, вместо Битлов - юзера..." (с) Б.Г. |
20.08.2008, 08:14 | #7 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
Спасибо Но ведь я и писал что только учусь в эту сторону. На счет клавы уже все работает и текст выводим ну printf уже есть Дело встало т.к. требуется вызывать BIOS прерывания из под защищенного режима. Поможете с этим ? Вскоре могу продолжить выкладывать сорсы.
Я думаю строить ядро как наноядро. Будет класс как контейнер включать в себя другие классы. Т.е. Класс Ядро а от него идут уже другие, ну и конечно динамическое подключение модулей ядра. т.е. все API будет ввиде иерархии классов. Думаю это довольно таки не плохо, а то сообщения и дискрипторы уже надоели. Последний раз редактировалось BOBAH13; 20.08.2008 в 08:45. |
20.08.2008, 21:53 | #8 |
Пользователь
Регистрация: 07.08.2008
Сообщений: 33
|
1. BIOS-прерывания в защищенном режиме недоступны, за исключением BIOS32-прерываний. Cобственно я ими не пользовался.. Для чего, если не секрет, они понадобились?
2. Классы, это конечно здорово.. Только ведь IPC (межпроцессная коммуникация) на чем-то должна основываться, будь то каналы, шаренная память или пресловутые сообщение. У себя я их и реализовывал - при нажатии на клавишу в системную очередь отправлялось сообщение MSG_KEYDOWN. А обработчик, будь то консоль или ещё что, волен делать в ответ на сообщение что угодно (выводить на экран, пищать динамиком и т.д. - не суть важно).
"... Раньше мы жили завтра, а теперь и сегодня - вчера
Вместо Роллингов - хакеры, вместо Битлов - юзера..." (с) Б.Г. Последний раз редактировалось drRobert; 20.08.2008 в 22:03. |
21.08.2008, 09:26 | #9 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
Ну например в Си в dos.h описан int86 вызов прерывания. Например тот же видеорежим установить ( VESA ). Ну конечно сообщения это привычно. Ну ведь полюбому придется обращаться к BIOS прерываниям, поэтому и хочу реализовать это. А вот как.. пока неизвестно
|
21.08.2008, 17:16 | #10 |
Пользователь
Регистрация: 07.08.2008
Сообщений: 33
|
Поехали по порядку.
В защищенном режиме вектора 0х0-0х1f резервированы для обработки исключений, т.е. обращение к BIOS-прерыванию 0х10 (работа с экраном) приведёт к исключению. Можно конечно определить собственные обработчики программных прерываний, но это удар - по скорости. VESA я включал до перехода в PM (для PM есть VESA32-расширение, я с ним особо не разбирался - без надобности было). После перехода работал только с портами ввода\вывода. (что для клавы, что для флоппа). На чем конкретно стопор? Если "чисто прерываний бивис хочу" - не мучайся
"... Раньше мы жили завтра, а теперь и сегодня - вчера
Вместо Роллингов - хакеры, вместо Битлов - юзера..." (с) Б.Г. Последний раз редактировалось drRobert; 21.08.2008 в 17:25. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Объявление собственной глобальной процедуры | Gorin | Общие вопросы Delphi | 11 | 06.11.2007 17:49 |
РАЗРАБОТКА DLL | Leo | Общие вопросы Delphi | 2 | 26.10.2007 21:35 |
Разработка протокола | OrdJONY | Общие вопросы по программированию, компьютерный форум | 2 | 04.10.2007 13:21 |