Tentei fazer um sistema operacional no conjunto de montagem. Eu falhei. O código foi crocante. Esta é a minha segunda tentativa, eu acho.
Estou usando o Limine Bootloader com o protocolo Stivale.
Como esse repositório usa limine como submódulo, você precisará clonar esse repositório usando recursivamente:
git clone --recursive https://github.com/soumitradev/BruhOS.git
A configuração de um compilador cruzado é fortemente recomendado se você deseja compilar este projeto. Um arquivo básico toolchain.sh .
Depois de instalar o compilador cruzado, você pode executar make run para executar o sistema operacional no Qemu.
A partir de agora, estão disponíveis os seguintes comandos:
make all : faça o arquivo .hdd para o sistema operacional. É isso.make disk : faça o arquivo .hdd para o sistema operacional. É isso.make run : faça o arquivo .hdd para o sistema operacional e execute -o no Qemu.make log : faça o arquivo .hdd para o sistema operacional, execute -o e deixe o Qemu gerar logs.make logs : faça o arquivo .hdd para o sistema operacional, execute -o e deixe Qemu gerar logs.make debug : faça o arquivo .hdd para o sistema operacional, execute -o e anexe -o ao GDB para depuração.make clean : limpe o diretório de trabalho e remova todos os artefatos de construção. A execução do script toolchain.sh instalará o compilador cruzado em ~/.local/bin/cross_compiler/x86_64/ . Inclui GCC, GDB e Binutils. Os binários do compilador cruzado têm o prefixo x86-64-elf- . Por exemplo, para executar gcc , você terá que executar ~/.local/bin/cross_compiler/x86_64/bin/x86-64-elf-gcc . Observe como o prefixo é antecipado ao binário que queremos executar.
Nota: Para tornar esse processo mais rápido, você precisará definir o número de threads como uma variável, que geralmente é 1 a mais do que o número de threads que sua máquina possui. Minha máquina possui 8 threads, então eu defino a variável THREADS no script da toolchain.sh toolchain.sh .
Até o escrito, as versões mais recentes do GCC, GDB e Binutils são 10.2.0, 9.2 e 2.35, respectivamente. Se você deseja uma versão diferente, substitua as variáveis BINUTILSVERSION , GCCVERSION e GDBVERSION no mesmo script toolchain.sh .
Nota: Não execute este script como superusuário. A execução do script exigirá uma conexão estável à Internet e uma xícara de café porque leva um tempo;)
Limine é o carregador de inicialização mais épico que já existiu.
QWORD, Rock e Dripos foram muito úteis. Este código é praticamente um clusterfuck do código. Seu código está bem escrito, fácil de entender e, em geral, é um ótimo lugar para começar a aprender OSDEV.
O OSDEV Discord Server também é um ótimo lugar para aprender, fazer perguntas e geralmente é uma ótima comunidade.
Capturas de tela porque simplesmente não vale o tempo gasto na cadeia de ferramentas para testar um kernel semi-acabado.


Todos os arquivos usam o padrão C ++ 17, não use nenhuma biblioteca padrão, exceto LibGCC (óbvio para o desenvolvimento OS/kernel). Todos os arquivos de objeto e arquivos de construção do kernel devem ser limpos antes de se comprometer usando, make clean ou excluir manualmente os arquivos. O Gitignore inclui alguns filtros básicos, mas sempre verifique se você não está cometendo nenhum artefato de construção.
Todos os arquivos, exceto o Makefile, são o espaço recuado com um recuo de 2 espaços. Sim, eu gosto de 4 espaços, mas com alguma experiência anterior, isso pode gerar enormes estruturas como estruturas, e parece mais limpo com 2 indentação espacial. O Makefile requer indentação da guia por definição. A formatação fará com que ele quebre.
Verifique se você está usando as diretrizes de formatação Google . Isso pode ser definido no código VS.
Não empurre nenhum cometimento sem testar e garantir que eles funcionem.
Se os recursos básicos funcionarem como se destinam a ser usados, pressione seus compromissos. Não espero que você pretenda todas as falhas de segurança e corrigi -la antes de empurrar.
Eu posso adicionar um script de verificação pré-push mais tarde que garante que seu código siga esses padrões.