

Esta es una serie tutorial para desarrolladores de Hobby OS que son nuevos en la arquitectura ARMV8-A de 64 bits de ARM. Los tutoriales darán un recorrido guiado y paso a paso de cómo escribir un kernel de sistema operativo monolítico para un embedded system desde cero. Cubren la implementación de tareas de sistemas operativos comunes, como escribir en la consola serie, configurar la memoria virtual y manejar las excepciones HW. Todo mientras aprovecha las características únicas de Rust para proporcionar seguridad y velocidad.
¡Divertirse!
Atentamente,
Andre (@Andre-Richter)
PD: Para otros idiomas, busque archivos de lectura alternativos. Por ejemplo, README.CN.md o README.ES.md . Muchas gracias a nuestros traductores?
kernel de arranque independiente.README tutorial tendrá una breve sección tl;dr que ofrece una breve descripción de las adiciones y mostrará el código fuente diff al tutorial anterior, para que pueda inspeccionar convenientemente los cambios/adiciones.tl;dr . El plan a largo plazo es que todos los tutoriales reciben un texto completo, pero por ahora esto es exclusivo de los tutoriales en los que creo que tl;dr y diff no son suficientes para tener la idea.QEMU .UART .make doc en cada tutorial. Le permite navegar el código ampliamente documentado de una manera conveniente.make doc 
Los tutoriales se dirigen principalmente a las distribuciones basadas en Linux . La mayoría de las cosas también funcionarán en macOS , pero esto es solo experimental .
Instale el motor Docker.
( Solo Linux ) Asegúrese de que su cuenta de usuario esté en el grupo Docker.
Prepare la cadena de herramientas Rust . La mayor parte se manejará en el primer uso a través del archivo Rust-ToolChain.toml. Lo que nos queda por hacer es:
Si ya tiene una versión de Rust instalada:
cargo install cargo-binutils rustfiltSi necesita instalar óxido desde cero:
curl --proto ' =https ' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME /.cargo/env
cargo install cargo-binutils rustfilt En caso de que use Visual Studio Code , le recomiendo instalar la extensión del analizador Rust.
( solo macOS ) Instale algunas gemas Ruby .
Esto fue probado por última vez por el autor con Ruby versión 3.0.2 en macOS Monterey . Si está utilizando rbenv , el archivo respectivo .ruby-version ya está en su lugar. Si nunca ha oído hablar de rbenv , intente usar esta pequeña guía.
Ejecute esto en la carpeta raíz del repositorio:
bundle config set --local path ' .vendor/bundle '
bundle config set --local without ' development '
bundle install Esta serie trata de enfocarse fuerte en la facilidad de uso. Por lo tanto, se hicieron esfuerzos para eliminar el punto de dolor más grande en el desarrollo integrado tanto como sea posible: Toolchain hassle .
Rust en sí ya está ayudando mucho en ese sentido, porque tiene soporte incorporado para la compilación cruzada. Todo lo que necesitamos para compilar de un host x86 a la arquitectura AArch64 de Raspberry Pi será instalado automáticamente por rustup . Sin embargo, además del compilador de óxido, usaremos algunas herramientas más. Entre otros:
QEMU para emular nuestro núcleo en el sistema host.Minipush para cargar un núcleo en la frambuesa Pi bajo demanda sobre UART .OpenOCD y GDB para depurar en el objetivo.Hay muchas cosas que pueden salir mal al instalar y/o compilar la versión correcta de cada herramienta en su máquina host. Por ejemplo, es posible que su distribución no proporcione la última versión que se necesita. O le falta algunas dependencias difíciles de obtener para la compilación de una de estas herramientas.
Es por eso que haremos uso de Docker siempre que sea posible. Estamos proporcionando un contenedor que lo acompaña que tiene todas las herramientas o dependencias necesarias preinstaladas, y se extrae automáticamente una vez que sea necesario. Si desea saber más sobre Docker y echar un vistazo al contenedor proporcionado, consulte la carpeta Docker del repositorio.
Dado que el núcleo desarrollado en los tutoriales se ejecuta en el hardware real, se recomienda obtener un cable serie USB para obtener la experiencia completa.
CP2102 .GND y GPIO 14/15 como se muestra a continuación.chainloader , que será el último archivo que necesita para copiar manualmente en la tarjeta SD por un tiempo. Le permitirá cargar los núcleos tutoriales durante el arranque a pedido a través de UART . 
La versión original de los tutoriales comenzó como una bifurcación de los increíbles tutoriales de Zoltan Baldaszti en la programación de metales desnudos en RPI3 en C . ¡Gracias por darme una ventaja!
Con licencia bajo cualquiera de
a tu opción.
A menos que declare explícitamente lo contrario, cualquier contribución presentada intencionalmente para su inclusión en el trabajo por usted, como se define en la licencia Apache-2.0, se debe tener doble licencia como se indicó anteriormente, sin ningún término o condiciones adicionales.