@@ -35,7 +35,7 @@ use uefi::proto::console::gop::GraphicsOutput;
3535fn early_serial_print ( s : & [ u8 ] ) {
3636 // Serial port can hang bare metal if not present (reading 0x00 from status = infinite loop)
3737 // Default to FALSE for safety on real hardware. Enable for QEMU only.
38- const ENABLE_SERIAL : bool = true ;
38+ const ENABLE_SERIAL : bool = false ;
3939
4040 if !ENABLE_SERIAL { return ; }
4141
@@ -56,24 +56,17 @@ fn early_serial_print(s: &[u8]) {
5656#[ cfg( not( target_arch = "x86_64" ) ) ]
5757fn early_serial_print ( _s : & [ u8 ] ) { }
5858
59- struct SerialWriter ;
60- impl core:: fmt:: Write for SerialWriter {
61- fn write_str ( & mut self , s : & str ) -> core:: fmt:: Result {
62- for b in s. bytes ( ) { crate :: drivers:: console:: write_serial ( b) ; }
63- Ok ( ( ) )
64- }
65- }
66-
6759#[ cfg( not( test) ) ]
6860#[ panic_handler]
6961fn panic ( info : & core:: panic:: PanicInfo ) -> ! {
7062 // FORCE SERIAL OUTPUT ON PANIC
7163 let msg = b"\n !!!! KERNEL PANIC !!!!\n " ;
7264 for & b in msg { crate :: drivers:: console:: write_serial ( b) ; }
7365
74- use core:: fmt:: Write ;
75- let mut writer = SerialWriter ;
76- let _ = write ! ( writer, "{}\n " , info) ;
66+ if let Some ( location) = info. location ( ) {
67+ // We can't format easily without alloc, but we can print basic info if possible
68+ // For now, just a marker
69+ }
7770
7871 loop {
7972 core:: hint:: spin_loop ( ) ;
@@ -181,7 +174,7 @@ fn main(_image_handle: Handle, mut system_table: SystemTable<Boot>) -> Status {
181174 early_serial_print ( b"[BOOT] Initializing MM...\r \n " ) ;
182175 screen_print ! ( system_table, "[Kernel] Initializing Memory Management..." ) ;
183176 // STALL 0.5s
184- // system_table.boot_services().stall(500_000);
177+ system_table. boot_services ( ) . stall ( 500_000 ) ;
185178
186179 let ( phys_offset, memory_map_iter) = mm:: init ( & system_table) ;
187180 screen_print ! ( system_table, "[Kernel] Memory Management initialized" ) ;
@@ -191,7 +184,7 @@ fn main(_image_handle: Handle, mut system_table: SystemTable<Boot>) -> Status {
191184 screen_print ! ( system_table, "[Kernel] Initializing Filesystem..." ) ;
192185 fs:: init ( phys_offset) ;
193186 // STALL 0.5s
194- // system_table.boot_services().stall(500_000);
187+ system_table. boot_services ( ) . stall ( 500_000 ) ;
195188
196189 // 5. Initialize Scheduler
197190 screen_print ! ( system_table, "[Kernel] Initializing Scheduler..." ) ;
@@ -200,11 +193,11 @@ fn main(_image_handle: Handle, mut system_table: SystemTable<Boot>) -> Status {
200193 // 6. Initialize Drivers
201194 screen_print ! ( system_table, "[Kernel] Initializing Drivers..." ) ;
202195 drivers:: init ( ) ;
203- // system_table.boot_services().stall(500_000); // STALL 0.5s
196+ system_table. boot_services ( ) . stall ( 500_000 ) ; // STALL 0.5s
204197
205198 // 7. Enable Interrupts (Testing in QEMU)
206199 screen_print ! ( system_table, "[Kernel] About to enable interrupts (STI)..." ) ;
207- // system_table.boot_services().stall(1_000_000); // STALL 1s
200+ system_table. boot_services ( ) . stall ( 1_000_000 ) ; // STALL 1s
208201 #[ cfg( target_arch = "x86_64" ) ]
209202 {
210203 interrupts:: enable ( ) ;
@@ -218,8 +211,6 @@ fn main(_image_handle: Handle, mut system_table: SystemTable<Boot>) -> Status {
218211 // 7. Load Init Process
219212 let init_path = if USE_SIMPLE_INIT { "/init" } else { "/bin/busybox" } ;
220213 screen_print ! ( system_table, "[Kernel] Loading init..." ) ;
221- let msg_path = alloc:: format!( "[Kernel] Init Path: {}" , init_path) ;
222- screen_print ! ( system_table, msg_path. as_str( ) ) ;
223214
224215 screen_print ! ( system_table, "[Kernel] DEBUG: About to call fs::open" ) ;
225216
@@ -233,6 +224,8 @@ fn main(_image_handle: Handle, mut system_table: SystemTable<Boot>) -> Status {
233224 let len = inode. read_at ( 0 , & mut buffer) ;
234225 screen_print ! ( system_table, "[Kernel] DEBUG: Read bytes" ) ;
235226
227+ system_table. boot_services ( ) . stall ( 1_000_000 ) ; // STALL 1s
228+
236229 if len > 64 {
237230 use crate :: syscall:: elf:: { load_elf, setup_user_stack, AuxvEntry , AT_PAGESZ } ;
238231
@@ -243,7 +236,7 @@ fn main(_image_handle: Handle, mut system_table: SystemTable<Boot>) -> Status {
243236 match load_elf ( & buffer[ ..len] , 0 ) {
244237 Ok ( loaded) => {
245238 screen_print ! ( system_table, "[Kernel] BusyBox loaded!" ) ;
246- // system_table.boot_services().stall(1_000_000); // STALL 1s
239+ system_table. boot_services ( ) . stall ( 1_000_000 ) ; // STALL 1s
247240
248241 // Set up Auxv
249242 let auxv = alloc:: vec![
@@ -255,31 +248,16 @@ fn main(_image_handle: Handle, mut system_table: SystemTable<Boot>) -> Status {
255248 let envp: & [ & [ u8 ] ] = & [ ] ;
256249
257250 // Set up stack (at high address)
258- let stack_top = 0x10000000u64 ; // 256MB (Safe Low Memory)
251+ let stack_top = 0x7FFFFF000000u64 ;
259252 let stack_size = 128 * 1024 ; // 128KB
260253
261254 screen_print ! ( system_table, "[Kernel] Mapping user stack..." ) ;
262255 mm:: paging:: make_user_accessible ( stack_top - stack_size, stack_size) ;
263256 screen_print ! ( system_table, "[Kernel] User stack mapped!" ) ;
264257
265- // PROBE STACK
266- unsafe {
267- let ptr = ( stack_top - 8 ) as * mut u64 ;
268- // Use format! for complex logs
269- let s = alloc:: format!( "[Kernel] Probing stack at {:p}..." , ptr) ;
270- screen_print ! ( system_table, s. as_str( ) ) ;
271-
272- * ptr = 0xAA55AA55 ;
273-
274- let s2 = alloc:: format!( "[Kernel] Probe OK: 0x{:x}" , * ptr) ;
275- screen_print ! ( system_table, s2. as_str( ) ) ;
276- }
277-
278258 screen_print ! ( system_table, "[Kernel] Setting up user stack..." ) ;
279259 let user_sp = setup_user_stack ( stack_top, argv, envp, & auxv) ;
280-
281- let s3 = alloc:: format!( "[Kernel] User stack set up! SP=0x{:x}" , user_sp) ;
282- screen_print ! ( system_table, s3. as_str( ) ) ;
260+ screen_print ! ( system_table, "[Kernel] User stack set up!" ) ;
283261
284262 screen_print ! ( system_table, "[Kernel] Setting up kernel stack for TSS..." ) ;
285263 // CRITICAL: Allocate Kernel Stack for this process (PID 1) and update TSS!
@@ -297,22 +275,9 @@ fn main(_image_handle: Handle, mut system_table: SystemTable<Boot>) -> Status {
297275 // Prevent deallocation of stack
298276 core:: mem:: forget ( kernel_stack) ;
299277 screen_print ! ( system_table, "[Kernel] Kernel stack ready!" ) ;
300-
301- // DEBUG: Dump code at entry point
302- unsafe {
303- let entry_ptr = loaded. entry_point as * const u64 ;
304- let w1 = * entry_ptr;
305- let w2 = * entry_ptr. add ( 1 ) ;
306-
307- let msg_ep = alloc:: format!( "[Kernel] Entry Point: 0x{:x}" , loaded. entry_point) ;
308- screen_print ! ( system_table, msg_ep. as_str( ) ) ;
309-
310- let msg_code = alloc:: format!( "[Kernel] CODE at 0x{:x}: {:016x} {:016x}" , loaded. entry_point, w1, w2) ;
311- screen_print ! ( system_table, msg_code. as_str( ) ) ;
312- }
313278
314279 screen_print ! ( system_table, "[Kernel] STALL 3s before User Mode..." ) ;
315- // system_table.boot_services().stall(3_000_000); // STALL 3s
280+ system_table. boot_services ( ) . stall ( 3_000_000 ) ; // STALL 3s
316281
317282 screen_print ! ( system_table, "[Kernel] Jumping to Ring 3..." ) ;
318283 // Jump to Ring 3
0 commit comments