Building a Rust OS: Issue and Solution
Problem
While following the Minimal Rust Kernel tutorial from the blog_os
project, I encountered multiple errors when running cargo build
with a custom target (x86_64-fusion_os.json
):
$ cargo build --target x86_64-fusion_os.json
Compiling std v0.0.0
error[E0432]: unresolved imports `super::key::Key`, `super::key::LazyKey`, `super::key::get`, `super::key::set`
...
error[E0425]: cannot find function `fill_bytes` in module `sys`
...
error[E0277]: the trait bound `System: core::alloc::GlobalAlloc` is not satisfied
...
error[E0599]: no method named `alloc` found for struct `System` in the current scope
...
error: could not compile `std` (lib) due to 15 previous errors
These errors indicate issues with missing imports, functions, and trait implementations, primarily related to the standard library and memory allocation.
Solution
To resolve these errors, enable the alloc
crate by adding the following configuration to the .cargo/config.toml
file:
[unstable]
build-std = ["core", "alloc", "compiler_builtins"]
Then, rebuild it:
cargo build --target x86_64-fusion_os.json
Compiling fusion_os v0.1.0
Finished `dev` profile [unoptimized + debuginfo] target(s) in 1.31s
This configuration ensures the required core
, alloc
, and compiler_builtins
crates are included, allowing the custom target to compile successfully.