Un sistema operativo escrito en Rust.
Para construir el sistema operativo, asegúrese de usar la construcción de óxido nightly . Esto se requiere debido al uso de algunas banderas y propiedades inestables que solo están disponibles en la construcción nightly .
Nota: El objetivo se ha especificado en
.cargo/config.toml.
cargo buildNota: Si se compila para un objetivo personalizado, puede anular el objetivo utilizando el indicador
--target <target>.
cargo build --target x86_64-fractal_os.json Para crear una imagen de arranque, estamos utilizando la dependencia del cargador de arranque. Junto, utilizaremos la herramienta bootimage para compilar el núcleo y el cargador de arranque y vincularlos.
Asegúrese de tener instalado BootImage.
cargo install bootimageNota: Para ejecutar BootImage y construir el cargador de arranque, debe tener instalado el componente RUSTUP
llvm-tools-preview.
rustup component add llvm-tools-previewDespués de que se hayan instalado las dependencias y las herramientas, puede ejecutar carga de carga para crear una imagen de disco de arranque.
cargo bootimageDespués de generar un archivo de imagen de arranque, puede ejecutar fractal fácilmente en un emulador como QEMU.
qemu-system-x86_64 -drive format=raw,file=target/x86_64-fractal_os/debug/bootimage-fractal_os.binTambién puede ejecutarlo con un corredor de carga con la ayuda de BootImage Runner.
cargo runLo anterior apuntará a la última compilación de la imagen de arranque y comenzará una instancia de QEMU. También puede proporcionar un objetivo específico y pasar por las opciones de QEMU.
cargo run --target < target > -- [QEMU options] Todo después del -- se pasará a Qemu.
Para ejecutar el marco de prueba personalizado para Fractalos, puede ejecutar el comando de prueba de carga.
cargo testEsto ejecutará todas las pruebas de unidad y integración.
Nota: Las pruebas de integración se encuentran en el directorio
/tests, mientras que las pruebas unitarias son autónomas en los archivos de implementación concretos/src.
El kernel está utilizando la caja compiler_builtins junto con su implementación mem . Sin embargo, las funciones no son optimizadas. Actualmente hay un PR abierto contra este problema, por lo que esto debe usar nuestra propia implementación de funciones como memcmp y memcpy o esperar hasta que este PR se fusione.
Como ingeniero de software con experiencia en EEE (ingeniería eléctrica y electrónica), siempre me encanta descubrir qué hace que las cosas funcionen, y qué mejor manera de descubrir cómo funcionan los sistemas operativos junto con todo el hardware, y el software es aparte de escribir el suyo.
Al mismo tiempo, explorar lo que hace que todos los elementos de un sistema operativo limpio, también estoy aprendiendo óxido. Lo encuentro muy agradable.
Estos son solo algunos elementos esenciales que están en camino de ser implementados. No en orden.