Um sistema operacional escrito em ferrugem.
Para construir o sistema operacional, use a construção de ferrugem nightly . Isso é necessário devido ao uso de algumas bandeiras e propriedades instáveis que estão disponíveis apenas na construção nightly .
Nota: O destino foi especificado no
.cargo/config.toml.
cargo buildNOTA: Se compilar um destino personalizado, você pode substituir o destino usando o sinalizador
--target <target>.
cargo build --target x86_64-fractal_os.json Para criar uma imagem inicializável, estamos usando a dependência do carregador de inicialização. Ao lado, usaremos a ferramenta bootimage para compilar o kernel e o carregador de inicialização e vincular -os.
Verifique se você está instalado no BootImage.
cargo install bootimageNOTA: Para executar o BootImage e a criação do carregador de inicialização, você precisa ter o componente Rustup
llvm-tools-previewinstalado.
rustup component add llvm-tools-previewApós a instalação das dependências e ferramentas, você pode executar o Cargo BootImage para criar uma imagem de disco inicializável.
cargo bootimageDepois de gerar um arquivo de imagem inicializável, você pode executar fractal facilmente em um emulador como o QEMU.
qemu-system-x86_64 -drive format=raw,file=target/x86_64-fractal_os/debug/bootimage-fractal_os.binVocê também pode executá -lo com um corredor de carga com a ajuda do BootImage Runner.
cargo runO exposto acima apontará para a última construção da imagem inicializável e iniciará uma instância do Qemu. Você também pode fornecer alvo específico e passar pelas opções QEMU.
cargo run --target < target > -- [QEMU options] Tudo depois do -- será passado para Qemu.
Para executar a estrutura de teste personalizada para Fractalos, você pode executar o comando de teste de carga.
cargo testIsso executará todos os testes de unidade e integração.
Nota: Os testes de integração estão localizados no diretório
/tests, enquanto os testes de unidade são independentes nos arquivos de implementação de concreto/src.
O kernel está usando a caixa compiler_builtins junto com sua implementação mem . As funções, no entanto, não são otimizadas. Atualmente, existe um RP aberto contra esse problema; portanto, isso precisa usar nossa própria implementação de funções como memcmp e memcpy ou esperar até que este PR seja fundido.
Como engenheiro de software com experiência em EEE (engenharia elétrica e eletrônica), sempre adoro descobrir o que faz as coisas funcionarem e que melhor maneira de descobrir como os sistemas operacionais funcionam em conjunto com todo o hardware, e o software é diferente de escrever o seu?
Ao mesmo tempo de explorar o que faz com que todos os elementos de um sistema operacional limpo, também estou aprendendo ferrugem. Acho isso muito agradável.
Estes são apenas alguns itens essenciais que estão a caminho de ser implementados. Não em ordem.