summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/Cargo.toml8
-rw-r--r--kernel/src/io.rs2
-rw-r--r--kernel/src/io/input.rs0
-rw-r--r--kernel/src/io/output.rs2
-rw-r--r--kernel/src/io/output/render.rs0
-rw-r--r--kernel/src/io/output/serial.rs1
-rw-r--r--kernel/src/io/output/serial/uart_16550.rs15
-rw-r--r--kernel/src/io/render/fb.rs2
-rw-r--r--kernel/src/io/render/fb/graphic.rs0
-rw-r--r--kernel/src/io/render/fb/text.rs1
-rw-r--r--kernel/src/lib.rs4
-rw-r--r--kernel/src/main.rs16
-rw-r--r--kernel/src/pm.rs10
-rw-r--r--kernel/src/pm/panic.rs8
14 files changed, 69 insertions, 0 deletions
diff --git a/kernel/Cargo.toml b/kernel/Cargo.toml
new file mode 100644
index 0000000..fda2a4a
--- /dev/null
+++ b/kernel/Cargo.toml
@@ -0,0 +1,8 @@
+[package]
+name = "kernel"
+version = "0.1.0"
+edition = "2024"
+
+[dependencies]
+bootloader_api = { git = "https://github.com/rust-osdev/bootloader" }
+uart_16550 = "0.8.0"
diff --git a/kernel/src/io.rs b/kernel/src/io.rs
new file mode 100644
index 0000000..7d1a548
--- /dev/null
+++ b/kernel/src/io.rs
@@ -0,0 +1,2 @@
+pub mod input;
+pub mod output;
diff --git a/kernel/src/io/input.rs b/kernel/src/io/input.rs
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/kernel/src/io/input.rs
diff --git a/kernel/src/io/output.rs b/kernel/src/io/output.rs
new file mode 100644
index 0000000..19bad9c
--- /dev/null
+++ b/kernel/src/io/output.rs
@@ -0,0 +1,2 @@
+pub mod render;
+pub mod serial;
diff --git a/kernel/src/io/output/render.rs b/kernel/src/io/output/render.rs
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/kernel/src/io/output/render.rs
diff --git a/kernel/src/io/output/serial.rs b/kernel/src/io/output/serial.rs
new file mode 100644
index 0000000..0fb7194
--- /dev/null
+++ b/kernel/src/io/output/serial.rs
@@ -0,0 +1 @@
+pub mod uart_16550;
diff --git a/kernel/src/io/output/serial/uart_16550.rs b/kernel/src/io/output/serial/uart_16550.rs
new file mode 100644
index 0000000..984854a
--- /dev/null
+++ b/kernel/src/io/output/serial/uart_16550.rs
@@ -0,0 +1,15 @@
+pub enum SerialPortAddress {
+ Com1 = 0x3F8,
+ Com2 = 0x2F8,
+ Com3 = 0x3E8,
+ Com4 = 0x2E8,
+}
+
+#[derive(Default)]
+pub struct Uart16550 {}
+
+impl Uart16550 {
+ pub fn new() -> Self {
+ Self {}
+ }
+}
diff --git a/kernel/src/io/render/fb.rs b/kernel/src/io/render/fb.rs
new file mode 100644
index 0000000..2924838
--- /dev/null
+++ b/kernel/src/io/render/fb.rs
@@ -0,0 +1,2 @@
+pub mod graphic;
+pub mod text;
diff --git a/kernel/src/io/render/fb/graphic.rs b/kernel/src/io/render/fb/graphic.rs
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/kernel/src/io/render/fb/graphic.rs
diff --git a/kernel/src/io/render/fb/text.rs b/kernel/src/io/render/fb/text.rs
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/kernel/src/io/render/fb/text.rs
@@ -0,0 +1 @@
+
diff --git a/kernel/src/lib.rs b/kernel/src/lib.rs
new file mode 100644
index 0000000..2832ab2
--- /dev/null
+++ b/kernel/src/lib.rs
@@ -0,0 +1,4 @@
+#![no_std]
+
+pub mod io;
+pub mod pm;
diff --git a/kernel/src/main.rs b/kernel/src/main.rs
new file mode 100644
index 0000000..bfa20e6
--- /dev/null
+++ b/kernel/src/main.rs
@@ -0,0 +1,16 @@
+#![no_std]
+#![no_main]
+#![feature(used_with_arg)]
+
+// extern crate alloc;
+
+use bootloader_api::{BootInfo, BootloaderConfig, entry_point};
+use kernel::pm::hcf;
+
+const CONFIG: BootloaderConfig = BootloaderConfig::new_default();
+
+fn kmain(boot_info: &'static mut BootInfo) -> ! {
+ hcf()
+}
+
+entry_point!(kmain);
diff --git a/kernel/src/pm.rs b/kernel/src/pm.rs
new file mode 100644
index 0000000..1b45b84
--- /dev/null
+++ b/kernel/src/pm.rs
@@ -0,0 +1,10 @@
+pub mod panic;
+
+pub fn hcf() -> ! {
+ unsafe {
+ core::arch::asm!("cli");
+ loop {
+ core::arch::asm!("hlt");
+ }
+ }
+}
diff --git a/kernel/src/pm/panic.rs b/kernel/src/pm/panic.rs
new file mode 100644
index 0000000..6446cd9
--- /dev/null
+++ b/kernel/src/pm/panic.rs
@@ -0,0 +1,8 @@
+use core::panic::PanicInfo;
+
+use crate::pm::hcf;
+
+#[panic_handler]
+fn panic(_info: &PanicInfo) -> ! {
+ hcf()
+}