diff options
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/Cargo.lock | 7 | ||||
-rw-r--r-- | kernel/Cargo.toml | 12 | ||||
-rw-r--r-- | kernel/default.nix | 9 | ||||
-rw-r--r-- | kernel/src/lib.rs | 16 | ||||
-rw-r--r-- | kernel/src/panic.rs | 12 |
5 files changed, 56 insertions, 0 deletions
diff --git a/kernel/Cargo.lock b/kernel/Cargo.lock new file mode 100644 index 0000000..0dd1539 --- /dev/null +++ b/kernel/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "kernel" +version = "0.1.0" diff --git a/kernel/Cargo.toml b/kernel/Cargo.toml new file mode 100644 index 0000000..cef382e --- /dev/null +++ b/kernel/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "kernel" +version = "0.1.0" +edition = "2021" + +[lib] +crate-type = ["staticlib"] + +[dependencies] + +[profile.release] +debug = true diff --git a/kernel/default.nix b/kernel/default.nix new file mode 100644 index 0000000..46352fb --- /dev/null +++ b/kernel/default.nix @@ -0,0 +1,9 @@ +{ rust }: + +let toml = builtins.fromTOML (builtins.readFile ./Cargo.toml); +in rust.buildRustPackage { + pname = toml.package.name; + version = toml.package.version; + src = ./.; + cargoLock.lockFile = ./Cargo.lock; +} diff --git a/kernel/src/lib.rs b/kernel/src/lib.rs new file mode 100644 index 0000000..bd5a19f --- /dev/null +++ b/kernel/src/lib.rs @@ -0,0 +1,16 @@ +#![no_std] + +mod panic; + +/// The entrypoint to the kernel. This should be executed by hart0 alone. It performs some early +/// boot tasks, then wakes up any other harts. +#[no_mangle] +pub extern "C" fn hart0_boot() { + for byte in "Hello, world!\n".bytes() { + unsafe { + core::ptr::write_volatile(0x10000000 as *mut u8, byte); + } + } + + todo!() +} diff --git a/kernel/src/panic.rs b/kernel/src/panic.rs new file mode 100644 index 0000000..ed6e5d4 --- /dev/null +++ b/kernel/src/panic.rs @@ -0,0 +1,12 @@ +use core::panic::PanicInfo; + +#[panic_handler] +fn panic(_info: &PanicInfo) -> ! { + loop { + for byte in "panic\n".bytes() { + unsafe { + core::ptr::write_volatile(0x10000000 as *mut u8, byte); + } + } + } +} |