Как создать свою собственную операционную систему x86 для современных ПК

Я бы хотел создать новую операционную систему для компьютеров x86 для ПК. Я бы хотел, чтобы он был 64-битным, но, возможно, выполнялся как 32-разрядный.

У меня есть такие вопросы:

С чего вы начинаете работать сначала? Знать, с чего начать писать свою собственную операционную систему, кажется мне сложной темой, поэтому меня интересует ваш вклад.

Как правило, как создать собственную 32-разрядную/64-разрядную операционную систему или хорошие ресурсы, в которых упоминается полезная информация о том, как писать собственную операционную систему для компьютеров x86. Меня не волнует, как старые источники до тех пор, пока они все еще актуальны и полезны для того, что я делаю.

Я знаю, что хочу, чтобы у него были драйверы ядра, напрямую связанные с периферийным оборудованием. Где я должен искать рекомендации и документацию для программирования и понимания интерфейса к периферийному оборудованию, с которым будет взаимодействовать операционная система? Мне нужно будет понять, как операционная система получит вход и взаимодействует с клавиатурами, мышами, компьютерными мониторами, жесткими дисками, USB и т.д. И т.д. Это, вероятно, область, о которой я знаю меньше всего.

У меня есть руководства по набору инструкций Intel и стали более знакомы с программированием на сборку, так что процессорная сторона вещей - это то, что я знаю больше всего.

В этот момент я думаю, что я хотел бы реализовать системные вызовы Linux в своей операционной системе, чтобы программы, которые запускались в Linux, могли работать в моей операционной системе. Я хочу, чтобы моя операционная система использовала двоичный формат ELF. Интересно, какие препятствия я должен преодолеть для достижения этой совместимости Linux. Являются ли основные функции реализацией системных вызовов, которые предоставляет Linux, и используя формат ELF? Что еще?

Мне также интересны мысли людей о том, почему не может быть хорошей идеей сделать вашу собственную операционную систему, и почему это хорошая идея для создания собственной операционной системы.

Спасибо за любой вклад.

Ответ 1

Вы, вероятно, просто захотите запустить его внутри виртуальной машины. Это PITA пытается разработать ОС на реальном оборудовании (с постоянной перезагрузкой и отладкой по сравнению с последовательным кабелем).

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

Вы также можете начать с чего-то, что уже началось и запущено изначально (например, Microsoft Singularity довольно аккуратно). Это позволит вам избавиться от всего скучного загрузчика и основных драйверов устройств, и вы можете быстрее перейти на "мясистые" вещи.

Ответ 2

Лучше всего взглянуть на Linux 0.01 исходный код. это первая версия ОС. он очень прост и информативен. Это хорошее место для запуска

Ответ 4

Я бы рекомендовал сначала изучить небольшую ОС, такую ​​как Minix1, которая была создана для образовательной цели или Minix3, который соответствует требованиям POSIX.

Ответ 5

Вам нужно будет реализовать несколько типов дескрипторных таблиц, чтобы включить 32-битный режим. Включение многопоточности - непростая задача и почти наверняка будет необходимым условием. Вероятно, вы также захотите начать поддержку файловой системы на ранней стадии, чтобы выйти из флоппи-образа или того, что вы сейчас используете.

Я уверен, что вы столкнулись с этим сайтом в прошлом http://wiki.osdev.org/Main_Page но в нем много замечательных статей.

Вы также можете найти эту книгу полезной для этапа разработки, на котором вы находитесь: Незаменимая аппаратная книга для ПК, она идет очень подробно и содержит множество диаграмм, а также некоторые фрагменты кода.

Ответ 6

Если вы хотите разработать свою собственную операционную систему, ваш лучший первый шаг - обходиться на форуме osdev (http://forum.osdev.org/), и хорошее чтение их wiki: http://wiki.osdev.org/Main_Page.

Я нашел людей там не только знающими, но и невероятно полезными, они даже укажут на ошибки в ваших фрагментах кода!

Я начал с учебника x86 Джеймса Моллоя (google, мне не разрешено публиковать эту ссылку). Вы можете начать с кода, а затем взломать, взломать, взломать: -).

Ответ 7

Начните с загрузчика, узнайте о получении карты памяти, сканировании шины PCI, инициализации различных чипов, таких как APIC, и о том, как переключиться в защищенный режим.

У вас есть начало загруженного ядра, попробуйте написать подпрограммы, которые будут выводиться на экран, читать с клавиатуры, получать простой отладчик, а затем диспетчер физической памяти, а затем менеджер виртуальной памяти. Последние два нельзя отложить надолго, потому что каждая программа, включая операционную систему, нуждается в способе распределения и освобождения памяти упорядоченным способом.

Ответ 8

Просто чтобы предложить новый подход к предложению... можно было бы изобразить загрузчик на компакт-диске USB или RW, а затем направлять компьютер для использования в качестве основного устройства. У меня установлена ​​Vista, и я просто подключаю USB с загрузчиком и файлом kernel.bin для тестирования моей игрушечной ОС. Обязательно используйте это же устройство для сохранения дополнительных файлов или каких-либо дополнительных функций, чтобы не повредить ваш жесткий диск. Когда ваша ОС имеет все основы, покупайте компьютер-мусор, устанавливайте на него свою ОС и расширяйте оттуда.

Ответ 9

https://github.com/rajneshrat/ratos

Это минимальное значение os со следующей поддержкой - сетей, vm поддержка, поддержка прерываний, Поддержка Pci.