From 365b581ca5c37305f9583cf08d0c25c4426f47e2 Mon Sep 17 00:00:00 2001 From: littleblack111 Date: Sat, 5 Sep 2026 19:01:32 +0800 Subject: migrate: limine -> bootloader_api --- kernel/Cargo.toml | 8 ++++++++ kernel/src/io.rs | 2 ++ kernel/src/io/input.rs | 0 kernel/src/io/output.rs | 2 ++ kernel/src/io/output/render.rs | 0 kernel/src/io/output/serial.rs | 1 + kernel/src/io/output/serial/uart_16550.rs | 15 +++++++++++++++ kernel/src/io/render/fb.rs | 2 ++ kernel/src/io/render/fb/graphic.rs | 0 kernel/src/io/render/fb/text.rs | 1 + kernel/src/lib.rs | 4 ++++ kernel/src/main.rs | 16 ++++++++++++++++ kernel/src/pm.rs | 10 ++++++++++ kernel/src/pm/panic.rs | 8 ++++++++ 14 files changed, 69 insertions(+) create mode 100644 kernel/Cargo.toml create mode 100644 kernel/src/io.rs create mode 100644 kernel/src/io/input.rs create mode 100644 kernel/src/io/output.rs create mode 100644 kernel/src/io/output/render.rs create mode 100644 kernel/src/io/output/serial.rs create mode 100644 kernel/src/io/output/serial/uart_16550.rs create mode 100644 kernel/src/io/render/fb.rs create mode 100644 kernel/src/io/render/fb/graphic.rs create mode 100644 kernel/src/io/render/fb/text.rs create mode 100644 kernel/src/lib.rs create mode 100644 kernel/src/main.rs create mode 100644 kernel/src/pm.rs create mode 100644 kernel/src/pm/panic.rs (limited to 'kernel') 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 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 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 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() +} -- cgit v1.2.3