Meu primeiro sistema operacional alimentado por cafeína.
Este é um projeto de aprendizado, veremos o quão longe ele vai. Quando digo "alimentado por cafeína", eu literalmente quero dizer cafeína, não uma nova estrutura de construção do sistema operacional. Mas isso seria um nome bem legal para uma estrutura de construção do sistema operacional.
Estou executando este projeto no Ubuntu18.04 LTS. Estou usando uma compilação remota usando o Visual Studio no PC, mas você pode usar o Makefile diretamente em uma máquina Ubuntu. Meu sistema operacional está sendo executado atualmente em uma VM no Ubuntu. Eu não recomendaria a execução disso "no metal" porque os erros podem bloquear o computador, alterando os dados da BIOS e ROM de alteração. A seguir, estão os pacotes que instalei para que este projeto continue:
O Makefile produzirá um arquivo ISO no mesmo local com o mesmo nome sempre que for executado. No VirtualBox, fiz uma VM chamada Caffeineos com 512 MB de RAM, sem VDK/VMDK e com a mídia óptica apontando para o arquivo ISO e a caixa "Live CD" verificada.
Mesmo o arquivo ISO mudará com cada compilação, a VM sempre irá para o mesmo local para encontrar o ISO e inicializar a partir dele.
No momento, tenho um kernal inicializável. Não faz nada além de imprimir o nome do sistema operacional. Até agora, eu segui Totorials, mas muito poucos cobrem qualquer coisa após esse ponto. Nenhum que eu encontrei use c ++, apenas C.
Estou pesquisando qual é a próxima parte do kernel que devo construir a seguir. Meu palpite é memória dinâmica. Atualmente, estou alcançando a saída usando um endereço VGA para gravar texto na tela. Ainda não descobri a entrada. Como eu disse, os tutoriais realmente não passam pelo sistema operacional inicializável "Hello World".
Eu detectei a RAM e obtive valores que produzem Sence (baixo Mem ~ = 640kb, baixo+hi ~ = 512MB), então estou muito feliz. Também pude obter uma string do carregador de inicialização, lançando um UINT32_T em um const char* e imprimindo a matriz no ponteiro. Eu tenho usado a especificação multiboot.h no site gnu.org. O arquivo multiBoot.h contém declarações Emmpty Struct e Typedef que correspondem às bloqueios das informações que o carregador de inicialização (Grub2.02) envia através do multiboot_info_t*. Ao conhecer o Blocksizes, posso lançar os ponteiros nos dados de que preciso do carregador de inicialização.