O Netuno OS é uma personalidade do Windows NT para o microokernel Sel4. Ele implementa o que a Microsoft chama de "Executivo do NT", a camada superior do Windows Kernel NTOSKRNL.EXE , como um processo de usuário no microkernel Sel4. O executivo da NT implementa a chamada API nativa do NT, a interface de chamada do sistema nativo do Windows sobre a qual a API Win32 mais familiar é construída. Estes são expostos ao modo de usuário por meio de funções de stub no NTDLL.DLL com nomes como NtCreateProcess . O executivo da NT também é responsável por expor uma interface de programação aos drivers de dispositivo. A interface inclui funções como IoConnectInterrupt e IoCallDriver . Nossa arquitetura permite que os drivers de dispositivo sejam executados em processos de espaço de usuários separados e se comuniquem com o processo executivo do NT por meio de primitivas IPC Sel4 padrão.
O objetivo eventual do projeto Netuno OS é implementar a semântica NT suficiente para que uma terra do usuário do Reactos possa ser portada sob o Netuno OS, bem como a maioria dos drivers do Kernel Reactos. Em teoria, devemos ser capazes de obter compatibilidade binária com executáveis nativos do Windows, desde que nossa implementação da API nativa do NT seja suficientemente fiel. Também devemos conseguir um alto grau de portabilidade do código-fonte com drivers de dispositivo do Windows e drivers de sistema de arquivos, embora não busquemos a compatibilidade completa de código-fonte de linha por linha devido às diferenças arquitetônicas com o Windows/Reactos que tornam esse objetivo não realista. Consulte a seção de documentação para obter mais informações.
O status atual do projeto é que implementamos componentes executivos de NT suficientes para suportar uma pilha de sistema de arquivos razoavelmente completa com suporte de armazenamento em cache de leitura e back-back, que inclui os fatfs.sys do driver do sistema de arquivos FAT12/16/32 e um driver de controlador de disquete fdc.sys . Também temos uma pilha básica de driver de teclado, que inclui o driver de classe do teclado kbdclass.sys e o driver de porta PS/2 i8042prt.sys . Isso nos permite executar um prompt de comando básico ntcmd.exe , retirado do projeto Reactos, que suporta a maioria dos comandos de shell comum, como pwd , cd , copy , move , del , mount e umount . Também incluímos um driver beep.sys , que emite um som irritante no alto -falante do PC.
Todo o sistema se encaixa em um disquete e pode ser baixado da versão v0.2.0002. Você pode assistir a uma demonstração curta no YouTube. Você também pode construir você mesmo. Veja a seção sobre edifício.
Para o próximo lançamento, planejamos portar a pilha de driver ATA/AHCI da Reactos para que possamos suportar a maioria dos discos rígidos PATA/SATA. Também planejamos escrever/portar um conjunto de referência de disco para que possamos demonstrar que um design de microkernel não leva a penalidades inaceitáveis de desempenho.
Para os sistemas i386 (provavelmente deve ser chamado i686):
enable_paging no sel4/src/arch/x86/32/head.S ).Para sistemas AMD64:
fsgsbase ativada. Isso é suportado apenas na Ivy Bridge e mais tarde. Para executar o AMD64 se baseia nas CPUs anteriores, você pode desativar a instrução FSGSBASE em private/ntos/cmake/sel4.cmake . Também precisamos do CMPXCHG16B, que está disponível desde o Nehalem, e possivelmente mais cedo (os processadores Core 2 anteriores podem precisar de uma atualização de microcódigo). Para máquinas amd64 , o ThinkPad X230 foi testado para funcionar.
Você precisará construir no Linux (o SEL4 não é construído em nenhum outro sistema operacional). Você precisará das seguintes dependências do Python e provavelmente mais.
jinja2
future
ply
setuptools
six
lxml
Você também precisará cmake , clang , llvm e lld como uma cadeia de ferramentas básica. clang é um compilador cruzado nativo que pode gerar alvos de ELF e PE. O GCC não é suportado, mas em teoria pode ser feito para funcionar. Você precisará de uma cadeia de ferramentas ELF e uma cadeia de ferramentas PE (e provavelmente uma tonelada de paciência) se quiser fazer o GCC funcionar. Você também precisa do windmc , que é o compilador de recursos de mensagens PE da mingw . Dê uma olhada no build.sh para o script de construção. A versão preferida de Clang é 15, mas as versões recentes devem funcionar. Você também precisa do utilitário cpio para criar o initcpio. Finalmente, para o disquete de inicialização e a ISO de inicialização, você precisará das seguintes ferramentas: syslinux (para disquete de inicialização), grub e xorriso (para inicialização ISO) e mtools (para ambos).
Recomenda-se usar um IDE habilitado para servidor de idiomas para navegar no código-fonte. A configuração testada é o pacote lsp-mode no emacs com clangd como o servidor de idiomas. O script build.sh gerará o arquivo compile_commands.json para clangd . Você precisará instalar o JQ para esse fim.
Clone o projeto primeiro (certifique-se de usar git clone --recurse-submodules , pois incluímos o kernel Sel4 como submodule) e depois executamos
./build.sh [amd64] [release]
Se você não especificar amd64 , é uma construção i686 . Se você não especificar release , é uma construção de depuração. Para criar floppies de inicialização, digite
./mkfloopy.sh [amd64] [release]
Para criar ISOs de inicialização, digite
./mkiso.sh [amd64] [release]
Para simular usando o qemu, execute
./run.sh [direct|iso|uefi] [amd64] [release] [extra-qemu-args]
Se você especificar direct , o Qemu carregará diretamente o kernel Sel4 e a imagem NTOS (usando -kernel e -initrd ). Se você especificar iso ou uefi , ele carregará o ISO de inicialização construído pelo mkiso.sh . A opção uefi também configurará o QEMU para carregar o firmware da UEFI, que fornece um bom console de combate a estrutura de alta definição. Caso contrário, o disquete de inicialização criado por mkfloppy.sh é usado. Argumentos extras são passados para Qemu. Por exemplo, para executar a versão de lançamento i386 com o alto -falante PC ativado no Qemu, você pode passar o seguinte (isso pressupõe que você esteja usando uma versão recente do Qemu e tenha Pulseaudio)
./run.sh release -machine pcspk-audiodev=snd0 -audiodev pa,id=snd0
A construção de depuração pode funcionar lentamente, especialmente se você ativar o log de portas em série. Você pode desligar o log modificando o cabeçalho mestre do NT Executive Project (consulte private/ntos/inc/ntos.h ).
Usamos a cadeia de ferramentas LLVM, para que a compilação cruzada em teoria deve simplesmente funcionar sem nenhum manuseio especial. Na prática, no i386 / amd64 o script do vinculado para o executável final do kernel Sel4 depende de recursos que apenas o ligante LD GNU suporta, para que não possamos usar o ligante LLVM (LLD) para vincular o kernel Sel4. Isso significa que você precisará dos reticuladores GNU LD para o alvo Triplos i686-pc-linux-gnu e x86_64-pc-linux-gnu instalados no local usual ( /usr/bin ) para que clang possa encontrá-los e invocá-los corretamente ao vincular o kernel Sel4. A parte do PE da cadeia de ferramentas é completamente independente e não requer manuseio especial ao compilar cruzado (já é um tipo de ferramenta cruzado porque estamos direcionando janelas em um host Linux).
A compilação cruzada é testada no ArchLinux em execução no Loongarch64 (processador Loongson 3A5000) com llvm-14 e parece gerar o código correto. Por favor, abra um problema se você tiver algum problema.
Observe que, se o seu grub for construído para a plataforma nativa, em vez do i686/amd64, o ISO de inicialização gerado pelo mkiso.sh não funcionará, pois grub-mkrescue tentará copiar os arquivos de inicialização da plataforma nativa para a ISO. Para corrigir isso, construa o pacote cruzado para o i686/amd64 (ou simplesmente execute a geração ISO final em um sistema i686/amd64).
As documentações estão localizadas no diretório docs . Para os desenvolvedores e os interessados em entender o funcionamento interno do Netuno OS, leia o Developer-Guide.md , que começa com uma visão geral arquitetônica do sistema operacional e prossegue para explicar as várias decisões de design de componentes individuais do sistema operacional. Ele também contém o guia de portas do driver para os interessados em portar drivers da Reactos.