# basic-os A minimal os to showcase the usage of bootloader. ## Overview The top level `basic` crate defines a [workspace](https://doc.rust-lang.org/cargo/reference/workspaces.html). - The `kernel` crate is a member of that workspace ```toml # in Cargo.toml [workspace] members = ["kernel"] ``` - An [artifact dependency](https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#artifact-dependencies) is used add the `kernel` crate as a `build-dependency`: ```toml # in Cargo.toml [build-dependencies] kernel = { path = "kernel", artifact = "bin", target = "x86_64-unknown-none" } ``` Enable the unstable artifact-dependencies feature: ```toml # .cargo/config.toml [unstable] bindeps = true ``` Experimental features are only available on the nightly channel: ```toml # rust-toolchain.toml [toolchain] channel = "nightly" components = ["llvm-tools"] targets = ["x86_64-unknown-none", "x86_64-unknown-uefi"] ``` The `basic` create combines the kernel with `bootloader`, creates a bootable disk image and launches them. - A [cargo build script](https://doc.rust-lang.org/cargo/reference/build-scripts.html) is used to create a bootable disk image ([`build.rs`](build.rs)). - `basic` launches the images in QEMU. See also [basic-kernel.md](kernel/basic-kernel.md) in the `kernel` subdirectory. ## Usage Install dependencies: ```sh $ sudo apt update && sudo apt install qemu-system-x86 ``` Build: ```sh $ cargo build ``` Run: ```sh $ cargo run bios ``` ```sh $ cargo run uefi ```