Я попытался сделать ОС в сборе. Я потерпел неудачу. Код был хрустящим. Я думаю, это моя вторая попытка.
Я использую загрузчик Limine с протоколом Stivale.
Поскольку этот репо использует Limine в качестве подмодуля, вам придется клонировать этот репо рекурсивно, используя:
git clone --recursive https://github.com/soumitradev/BruhOS.git
Настройка Cross Compiler настоятельно рекомендуется, если вы хотите собрать этот проект. Основной файл toolchain.sh включен в корень этого репо, который устанавливает перекрестный компилятор для платформы x86_64 для файлов ELF.
После установки Cross Compiler вы можете запустить make run для запуска ОС в QEMU.
На данный момент доступны следующие команды:
make all : сделайте файл .hdd для ОС. Вот и все.make disk : сделайте файл .hdd для ОС. Вот и все.make run : Сделайте файл .hdd для ОС и запустите его в QEMU.make log : Сделайте файл .hdd для ОС, запустите его и позвольте QEMU генерировать журналы.make logs : сделайте файл .hdd для ОС, запустите его и позвольте QEMU генерировать журналы.make debug : сделайте файл .hdd для ОС, запустите его и прикрепите его к GDB для отладки.make clean : очистите рабочий каталог и удалите все сборки артефактов. Запуск сценария toolchain.sh установит Cross Compiler по адресу ~/.local/bin/cross_compiler/x86_64/ . Он включает в себя GCC, GDB и Binutils. В двоичных файлах Cross Compiler есть префикс x86-64-elf- . Так, например, для запуска gcc вам придется запустить ~/.local/bin/cross_compiler/x86_64/bin/x86-64-elf-gcc . Обратите внимание, как префикс приготовлен к двоичному изготовлению, который мы хотим запустить.
ПРИМЕЧАНИЕ. Чтобы сделать этот процесс быстрее, вам придется установить количество потоков в качестве переменной, которая обычно на 1 больше, чем количество потоков, которые есть у вашей машины. У моей машины есть 8 потоков, поэтому я устанавливаю переменную THREADS в сценарии toolchain.sh на 9. Пожалуйста, проверьте количество потоков, которые у вас есть, и изменить эту переменную в сценарии toolchain.sh соответственно.
На момент написания, последние версии GCC, GDB и Binutils составляют 10.2.0, 9,2 и 2,35 соответственно. Если вам нужна другая версия, замените переменные BINUTILSVERSION , GCCVERSION и GDBVERSION в одном сценарии toolchain.sh .
Примечание: не запускайте этот скрипт в качестве суперпользователя. Запуск сценария потребует стабильного интернет -соединения и чашки кофе, потому что это занимает некоторое время;)
Limine - самый эпический загрузчик, который когда -либо существовал.
Qword, Rock и Dripos были очень полезны. Этот код в значительной степени является кластером их кода. Их код хорошо написан, простым для понимания и в целом является отличным местом для начала изучения Осдева.
Сервер Discord Osdev также является отличным местом для изучения, задавать вопросы и, как правило, отличное сообщество.
Скриншоты, потому что это просто не стоит времени, затрачиваемого на то, чтобы набрать набором инструментов, чтобы проверить наполовину ядро.


Все файлы используют стандарт C ++ 17, не используйте какую -либо стандартную библиотеку, кроме LIBGCC (очевидно для разработки ОС/ядра). Все файлы объектов и файлы сборки ядра должны быть очищены перед совершением использования make clean или вручную удалять файлы. Gitignore включает в себя некоторые основные фильтры, но всегда проверяйте, вы не совершаете никаких артефактов сборки.
Все файлы, кроме Makefile, имеют пространство с отступом с углублением с 2 пространствами. Да, мне нравятся 4 пространства, но имея некоторый предыдущий опыт, это может генерировать огромные конструкции, похожие на дерево, и выглядит чище с 2 космическими отступами. Makefile требует вкладки по определению. Форматирование его заставит его сломаться.
Убедитесь, что вы используете рекомендации по форматированию Google . Это может быть установлено в VS -коде.
Не толкайте какие -либо коммиты, не тестируя и не убедившись, что они работают.
Если основные функции работают так, как они предназначены для использования, подтолкните ваши коммиты. Я не ожидаю, что вы отрегулируете каждый недостаток безопасности и исправляют его, прежде чем нажимать.
Позже я мог бы добавить скрипт Pre-Push, который гарантирует, что ваш код следует этим стандартам.