Моя первая ОС заправлена кофеином.
Это учебный проект, мы увидим, как далеко он пойдет. Когда я говорю «подпитывается кофеином», я буквально имею в виду кофеин, а не какую -то новую структуру построения ОС. Но это было бы довольно крутым названием для структуры строительства ОС.
Я использую этот проект в Ubuntu18.04 LTS. Я использую удаленную сборку с помощью Visual Studio на ПК, но вы можете просто использовать Makefile непосредственно на машине Ubuntu. Моя ОС в настоящее время работает в виртуальной машине в Ubuntu. Я бы не рекомендовал запустить это «на металле», потому что ошибки могут кирпичить компьютер, персинтали, изменяя биос и данные ПЗУ. Ниже приведены пакеты, которые я установил, чтобы начать этот проект:
Makefile будет производить файл ISO в одном и том же месте с одним и тем же именем каждый раз, когда он запускается. В VirtualBox я сделал виртуальную машину с именем Caffeineos с 512 МБ оперативной памяти, без VDK/VMDK и с оптическим носителем, указывающим на файл ISO и проверенный флажок «Live».
Даже если файл ISO изменится с каждой сборкой, виртуальная машина всегда будет перейти в одно и то же место, чтобы найти ISO и загрузку от него.
Прямо сейчас у меня есть загрузочный кернал. Он не делает ничего, кроме распечатки имени ОС. До сих пор я следил за номиналами, но очень немногие покрывают что -либо за этот момент. Нет, я нашел, используйте C ++, только C.
Я исследую, какая следующая часть ядра, которую я должен построить дальше. Я предполагаю динамическую память. В настоящее время я достигаю вывода, используя адрес VGA для записи текста на экране. Я еще не понял вход. Как я уже сказал, учебные пособия на самом деле не преодолевают загрузочную ОС "Hello World".
Я обнаружил оперативную память и получил значения, которые составляют смысл (низкий mem ~ = 640 КБ, низкий+hi ~ = 512 МБ), поэтому я действительно счастлив. Я также смог получить строку от загрузчика, подготовив uint32_t в константный char* и печать на указателе. Я использовал спецификацию multiboot.h с сайта GNU.org. Файл multiboot.h содержит объявления emmpty struct и typedef, которые соответствуют блокам информации, которую загружает загрузчик (GRUB2.02) через multiboot_info_t*. Зная блоки, я могу вставить указатели в данные, которые мне нужны из загрузчика.