summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/Cargo.lock7
-rw-r--r--kernel/Cargo.toml12
-rw-r--r--kernel/default.nix9
-rw-r--r--kernel/src/lib.rs16
-rw-r--r--kernel/src/panic.rs12
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);
+ }
+ }
+ }
+}