

Esta é uma série de tutoriais para desenvolvedores de Hobby OS, que são novos na arquitetura ARMV8-A de 64 bits do Arm. Os tutoriais darão um tour guiado e passo a passo de como escrever um kernel sistema operacional monolítico para um embedded system do zero. Eles cobrem a implementação de tarefas comuns de sistemas operacionais, como escrever no console serial, configurar a memória virtual e lidar com exceções HW. Ao mesmo tempo, alavancando os recursos exclusivos da Rust para fornecer segurança e velocidade.
Divirta-se!
Atenciosamente,
Andre (@Andre-Richter)
PS: Para outros idiomas, procure arquivos de leitura alternativos. Por exemplo, README.CN.md ou README.ES.md . Muito obrigado aos nossos tradutores?
kernel autônomo e inicializado.README do tutorial terá uma seção curta tl;dr , fornecendo uma breve visão geral das adições e mostrará o código diff do tutorial anterior, para que você possa inspecionar convenientemente as alterações/adições.tl;dr . O plano de longo prazo é que todos os tutoriais recebem um texto completo, mas, por enquanto, é exclusivo dos tutoriais onde acho que tl;dr e diff não são suficientes para obter a ideia.QEMU .UART .make doc em cada tutorial. Ele permite navegar pelo código extensivamente documentado de uma maneira conveniente.make doc 
Os tutoriais são direcionados principalmente para distribuições baseadas em Linux . A maioria das coisas também funcionará no macOS , mas isso é apenas experimental .
Instale o motor Docker.
( Somente Linux ) Verifique se sua conta de usuário está no grupo Docker.
Prepare a cadeia de ferramentas Rust . A maior parte será tratada no primeiro uso através do arquivo Rust-toolchain.toml. O que resta para fazermos é:
Se você já possui uma versão do Rust instalado:
cargo install cargo-binutils rustfiltSe você precisar instalar a ferrugem do zero:
curl --proto ' =https ' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME /.cargo/env
cargo install cargo-binutils rustfilt Caso você use Visual Studio Code , recomendo fortemente a instalação da extensão do Rust Analyzer.
( Somente macOS ) Instale algumas gemas Ruby .
Isso foi testado pela última vez pelo autor com Ruby versão 3.0.2 no macOS Monterey . Se você estiver usando rbenv , o respectivo arquivo .ruby-version já está em vigor. Se você nunca ouviu falar do rbenv , tente usar este pequeno guia.
Execute isso na pasta raiz do repositório:
bundle config set --local path ' .vendor/bundle '
bundle config set --local without ' development '
bundle install Esta série tenta colocar um forte foco na facilidade de uso. Portanto, foram feitos esforços para eliminar o maior ponto de dor no desenvolvimento incorporado o máximo possível: Toolchain hassle .
A própria ferrugem já está ajudando muito a esse respeito, porque possui suporte integrado à compilação cruzada. Tudo o que precisamos para compilar cruzado de um host x86 para a arquitetura AArch64 do Raspberry Pi será instalado automaticamente pelo rustup . No entanto, além do compilador de ferrugem, usaremos mais algumas ferramentas. Entre outros:
QEMU para imitar nosso kernel no sistema host.Minipush para carregar um kernel no Raspberry Pi sob demanda sobre UART .OpenOCD e GDB para depuração no alvo.Há muito que pode dar errado ao instalar e/ou compilar a versão correta de cada ferramenta na sua máquina host. Por exemplo, sua distribuição pode não fornecer a versão mais recente necessária. Ou você está perdendo algumas dependências difíceis de obter para a compilação de uma dessas ferramentas.
É por isso que usaremos o Docker sempre que possível. Estamos fornecendo um contêiner que possui todas as ferramentas ou dependências necessárias pré-instaladas e ele é puxado automaticamente quando for necessário. Se você quiser saber mais sobre o Docker e o Peek no contêiner fornecido, consulte a pasta Docker do repositório.
Como o kernel se desenvolveu nos tutoriais é executado no hardware real, é altamente recomendável obter um cabo serial USB para obter a experiência completa.
CP2102 .GND e GPIO 14/15 como mostrado abaixo.chainloader é desenvolvido, que será o último arquivo que você precisa para copiar manualmente no cartão SD por um tempo. Isso permitirá que você carregue os grãos do tutorial durante a demanda de inicialização sobre UART . 
A versão original dos tutoriais começou como um garfo dos incríveis tutoriais de Zoltan Baldaszti sobre programação nua de metal no RPI3 em C . Obrigado por me dar uma vantagem!
Licenciado sob qualquer um de
por sua opção.
A menos que você declare explicitamente o contrário, qualquer contribuição enviada intencionalmente para inclusão no trabalho por você, conforme definido na licença Apache-2.0, será licenciado como acima, sem termos ou condições adicionais.