From f07ff5fad29c63fc4e332afcb08f99fff3df3e0c Mon Sep 17 00:00:00 2001 From: littleblack111 Date: Thu, 10 Sep 2026 21:19:02 +0800 Subject: refactor: move init cpu specific into cpu/ --- kernel/src/init.rs | 4 +++- kernel/src/init/cpu.rs | 1 + kernel/src/init/cpu/int.rs | 7 +++++++ kernel/src/init/cpu/int/idt.rs | 24 ++++++++++++++++++++++++ kernel/src/init/int.rs | 7 ------- kernel/src/init/int/idt.rs | 24 ------------------------ 6 files changed, 35 insertions(+), 32 deletions(-) create mode 100644 kernel/src/init/cpu.rs create mode 100644 kernel/src/init/cpu/int.rs create mode 100644 kernel/src/init/cpu/int/idt.rs delete mode 100644 kernel/src/init/int.rs delete mode 100644 kernel/src/init/int/idt.rs diff --git a/kernel/src/init.rs b/kernel/src/init.rs index 5870a18..cb125ba 100644 --- a/kernel/src/init.rs +++ b/kernel/src/init.rs @@ -1,6 +1,8 @@ +use crate::init::cpu::int; + pub mod acpi; pub mod earlyprintk; -pub mod int; +pub mod cpu; pub fn init() { int::init(); diff --git a/kernel/src/init/cpu.rs b/kernel/src/init/cpu.rs new file mode 100644 index 0000000..8aa5d8f --- /dev/null +++ b/kernel/src/init/cpu.rs @@ -0,0 +1 @@ +pub mod int; diff --git a/kernel/src/init/cpu/int.rs b/kernel/src/init/cpu/int.rs new file mode 100644 index 0000000..e2b1c9f --- /dev/null +++ b/kernel/src/init/cpu/int.rs @@ -0,0 +1,7 @@ +use crate::init::cpu::int::idt::IDT; + +pub mod idt; + +pub fn init() { + IDT.load(); +} diff --git a/kernel/src/init/cpu/int/idt.rs b/kernel/src/init/cpu/int/idt.rs new file mode 100644 index 0000000..80d42f8 --- /dev/null +++ b/kernel/src/init/cpu/int/idt.rs @@ -0,0 +1,24 @@ +use spin::LazyLock; +use x86_64::structures::idt::{InterruptDescriptorTable, InterruptStackFrame}; + +use crate::init::earlyprintk::printlnk; + +pub static IDT: LazyLock = LazyLock::new( + || { + let mut idt = InterruptDescriptorTable::new(); + idt.breakpoint.set_handler_fn(breakpoint_handler); + idt.double_fault.set_handler_fn(double_fault_handler); + idt + }, +); + +extern "x86-interrupt" fn double_fault_handler( + stack_frame: InterruptStackFrame, + error_code: u64, +) -> ! { + panic!("EXCEPTION: DOUBLE FAULT\n{stack_frame:#?}\nERROR CODE:{error_code}"); +} + +extern "x86-interrupt" fn breakpoint_handler(stack_frame: InterruptStackFrame) { + _ = printlnk!("EXCEPTION: BREAKPOINT\n{stack_frame:#?}"); +} diff --git a/kernel/src/init/int.rs b/kernel/src/init/int.rs deleted file mode 100644 index 97a96a7..0000000 --- a/kernel/src/init/int.rs +++ /dev/null @@ -1,7 +0,0 @@ -use crate::init::int::idt::IDT; - -pub mod idt; - -pub fn init() { - IDT.load(); -} diff --git a/kernel/src/init/int/idt.rs b/kernel/src/init/int/idt.rs deleted file mode 100644 index 80d42f8..0000000 --- a/kernel/src/init/int/idt.rs +++ /dev/null @@ -1,24 +0,0 @@ -use spin::LazyLock; -use x86_64::structures::idt::{InterruptDescriptorTable, InterruptStackFrame}; - -use crate::init::earlyprintk::printlnk; - -pub static IDT: LazyLock = LazyLock::new( - || { - let mut idt = InterruptDescriptorTable::new(); - idt.breakpoint.set_handler_fn(breakpoint_handler); - idt.double_fault.set_handler_fn(double_fault_handler); - idt - }, -); - -extern "x86-interrupt" fn double_fault_handler( - stack_frame: InterruptStackFrame, - error_code: u64, -) -> ! { - panic!("EXCEPTION: DOUBLE FAULT\n{stack_frame:#?}\nERROR CODE:{error_code}"); -} - -extern "x86-interrupt" fn breakpoint_handler(stack_frame: InterruptStackFrame) { - _ = printlnk!("EXCEPTION: BREAKPOINT\n{stack_frame:#?}"); -} -- cgit v1.2.3