Um pequeno sistema operacional de PC x86 de 32 bits com base em um kernel monolítico com alguns recursos do tipo Unix, escritos em um subconjunto de C ++.
Observação: esta meta-documentação ainda é um trabalho em andamento :-)
Um pequeno sistema operacional de desktop, com recursos do tipo Unix, que é escrito em um subconjunto C ++ compreensível para os alunos do TI do primeiro ano do Hogeschool Utrecht, de modo que possa ser usado em um contexto educacional.
Sempre que possível, o desempenho e os recursos são sacrificados para reduzir a complexidade e aumentar a legibilidade. Isso deve ajudar o software a ser mais compreensível para uso em um contexto educacional. No entanto, assuntos importantes dos cursos de OS no Hogeschool Utrecht devem ser implementados.
Embora deva inicializar bem em hardware real, o Rikaios é desenvolvido com um emulador ou máquina virtual em mente - o hardware suportado é intencionalmente limitado por uma questão de simplicidade.
Um aviso obrigatório: o sistema operacional pode derreter sua placa -mãe e comer seu mouse de estimação quando executado em hardware de verdade, sem garantias, yada yada, leia o aviso no arquivo de licença antes de executar isso no seu computador de família.
Veja o diretório ./aux. Não espere nada chamativo - atualmente são todas as capturas de terminais em série!
O sistema operacional com seu conjunto atual de recursos foi desenvolvido em um período de aproximadamente 6 meses, de fevereiro a julho de 2019.
Rikaios ainda não é um substituto completo do Linux ;-)
Existem alguns recursos que precisam de trabalho ou estão sendo trabalhados no momento (consulte também a seção contribuinte):
grep -ERn 'TODO|FIXME|XXX' src/kernel/src src/kernel/include src/user/Observe que o objetivo do Rikaios é permanecer pequeno: uma pilha de rede ou driver USB, por exemplo, provavelmente não será considerado para implementação.
Você precisa deste software instalado (em um host Linux-ish) para construir e executar Rikaios:
Os números de versão devem ser recentes, especialmente para Clang, LLVM e LLD. É fornecido um Dockerfile do Arch Linux (graças ao @Peikos) que inclui versões compatíveis das dependências acima.
Você pode usar o GCC em vez de Clang/LLVM, se assim o desejar, desde que tenha um cross-toolchain do GCC para i686-HIF. Consulte src/kernel/Makefile para obter detalhes sobre como trocar de ferramenta.
| Diretório | Descrição |
|---|---|
/src/boot | Bootloader (BootSector e Stage2) |
/src/boot/utils | Instalador de bootloader |
/src/kernel | Código do kernel |
/src/kernel/include | Cabeçalhos do kernel expostos à terra do usuário |
/src/kernel/include/os-std | Biblioteca padrão do sistema operacional (matemática, contêineres, etc.) |
/src/user | Software de Userland |
/src/user/libsys | Biblioteca de sistemas C ++ do usuário C ++ |
/src/disk | (FAT32) sistema de arquivos disponível para o sistema operacional |
| Makefile | Descrição |
/src/Makefile | Construa tudo, cria discos de inicialização e executa emuladores |
/src/boot/Makefile | Construa o carregador de inicialização e instalador |
/src/kernel/Makefile | Construa kernel |
/src/user/Makefile | Construa Userland |
Cada Makefile acima inclui (se disponível) um arquivo Makefile.local no mesmo diretório. Isso permite que você substitua qualquer nomes e caminhos executáveis da cadeia de ferramentas e, opcionalmente, adicione alvos adicionais.
Não se esqueça de passar -j 4 (ou superior) para aumentar o desempenho da construção em sistemas multicore.
Isso constrói o kernel e o carregador de inicialização e cria um disco de inicialização que é executado com o virtualizador / emulador QEMU. Uma conexão serial com o sistema operacional é aberta no terminal do qual você executa o comando make.
fazer disco e fazer executar
Atualmente, o SHELL e o TTY Driver não possuem recursos sofisticados de edição de linha e suporte à história da linha de comando. Por conveniência, você pode embrulhar Qemu com rlwrap para usar as instalações de edição de linha no lado do host das coisas (fortemente recomendadas):
fazer disco && rlwrap -a fazer executar
Para executar no VirtualBox, faça o seguinte:
vdi :faça VDI
Então:
disk.vdi como um disco IDEAgora você deve poder iniciar a VM através do VirtualBox.
Observe que a E/S serial pode ser difícil começar a trabalhar. A versão atual do SO não interage muito com a tela e o teclado/ratos por padrão.
Depois de ter o sistema em funcionamento, você deve ver um prompt no terminal serial (se você conectar um monitor, uma tela de respingo também poderá aparecer). Você pode interagir com o sistema operacional usando o terminal serial. Para começar, tente o comando de help .
Vários programas de utilidade são fornecidos no disco. Veja os programas instalados digitando ls bin (supondo que você ainda esteja no diretório /disk0p1 ). Todos os programas ELFs em /disk0p1/bin podem ser executados como comandos sem digitar o caminho completo (pense nele como um diretório $PATH ). Da mesma forma, todos os arquivos ELF no diretório de trabalho, como forth.elf , podem ser executados apenas digitando seu nome.
Para ver como os utilitários funcionam ou para adicionar o seu próprio, consulte o arquivo ReadMe no diretório src/user deste repositório.
Pressionar ESC no teclado (na janela de vídeo, não no terminal serial) permitirá que o shell do kernel, um utilitário de depuração integrado. Isso pode ser usado para imprimir várias estatísticas e informações sobre processos e memória em execução (consulte o comando de ajuda help quando estiver em Kshell).
Você pode depurar o kernel com Qemu ou Bochs:
Veja ./src/gdbrc para opções de inicialização (você pode substituir esse caminho de arquivo em um Makefile.local ).
fazer disco e fazer depuração
Consulte ./src/bochsrc para opções de configuração (você pode substituir esse caminho de arquivo em um Makefile.local ).
fazer disco e fazer bochs
LD.LLD: Erro: Não é possível encontrar biblioteca -lclang_rt.builtins -i386
locate clang_rt.builtins )kernel/Makefile.local , com conteúdo: LD_BUILTIN_DIR += /the/directory/containing/the/clang/lib Entendo que a documentação disponível ao público é limitada atualmente; portanto, não hesite em abrir um problema ou me enviar um e-mail.
Por favor, abra um problema do Github / Gitlab para que não possamos garantir que nenhum esforço seja duplicado :-)
Um processo para isso deve ser formalizado nas próximas semanas - existem alguns problemas / recursos abertos que podem definitivamente ser trabalhados, com graus variados de dificuldade / tamanho. Vou documentar isso em breve ™.
Este projeto está licenciado sob a licença Apache 2.0. Consulte ./license para mais informações.
Este sistema operacional foi escrito do zero, com apenas a seguinte exceção: