From c8de43bf43242c4ebac3d0ecb8e7951fe2371506 Mon Sep 17 00:00:00 2001 From: Nathan Ringo Date: Sat, 24 Feb 2024 22:03:49 -0600 Subject: Initial commit --- kernel/Cargo.lock | 7 +++++++ kernel/Cargo.toml | 12 ++++++++++++ kernel/default.nix | 9 +++++++++ kernel/src/lib.rs | 16 ++++++++++++++++ kernel/src/panic.rs | 12 ++++++++++++ 5 files changed, 56 insertions(+) create mode 100644 kernel/Cargo.lock create mode 100644 kernel/Cargo.toml create mode 100644 kernel/default.nix create mode 100644 kernel/src/lib.rs create mode 100644 kernel/src/panic.rs (limited to 'kernel') 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); + } + } + } +} -- cgit v1.2.3