Skip to content

Commit 2a8c9e9

Browse files
committed
FIX
1 parent aad9747 commit 2a8c9e9

2 files changed

Lines changed: 39 additions & 17 deletions

File tree

src/drivers/vga.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,8 @@ static void wait_ticks(uint64_t ticks) {
112112
uint32_t eflags;
113113
asm volatile("pushf; pop %0" : "=r"(eflags));
114114
if (!(eflags & 0x200)) {
115-
// Interrupts are disabled, use a busy loop instead
116-
for (uint64_t i = 0; i < ticks * 1000000; ++i) {
115+
// Interrupts are disabled, use a smaller busy loop to avoid hangs
116+
for (uint64_t i = 0; i < ticks * 100000; ++i) {
117117
asm volatile("nop");
118118
}
119119
return;

src/kernel.c

Lines changed: 37 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -355,8 +355,9 @@ void kernel_main(unsigned int multiboot_magic, unsigned int multiboot_info_addr)
355355
serial_init();
356356
serial_write_string("\n\n--- KERNEL STARTING ---\n");
357357

358-
// Display splash as early as possible
359-
vga_display_splash();
358+
// Temporarily disable splash to troubleshoot hang
359+
// vga_display_splash();
360+
serial_write_string("DEBUG: Splash skipped\n");
360361

361362
serial_write_string("DEBUG: Multiboot Magic: 0x");
362363
serial_write_hex32(multiboot_magic);
@@ -371,6 +372,7 @@ void kernel_main(unsigned int multiboot_magic, unsigned int multiboot_info_addr)
371372
syscall_init();
372373
serial_write_string("DEBUG: Syscall Initialized\n");
373374
diag_init();
375+
serial_write_string("DEBUG: Diag Initialized\n");
374376
diag_log(DIAG_INFO, "boot start");
375377

376378
multiboot_info_t* info = 0;
@@ -381,15 +383,21 @@ void kernel_main(unsigned int multiboot_magic, unsigned int multiboot_info_addr)
381383
mem_bytes = (info->mem_upper + 1024) * 1024;
382384
}
383385
}
384-
serial_write_string("DEBUG: Multiboot info parsed\n");
386+
serial_write_string("DEBUG: Multiboot info parsed, Memory: ");
387+
serial_write_hex32(mem_bytes);
388+
serial_write_string(" bytes\n");
389+
390+
fb_init(info);
391+
fb_clear(0);
392+
fb_console_init(0xFFFFFF, 0);
393+
fb_console_write("Kernel Loading...\n");
394+
serial_write_string("DEBUG: Framebuffer Initialized Early\n");
385395

386396
if (mem_bytes > 0x100000) {
387397
pmm_init(0x100000, mem_bytes - 0x100000);
388-
} else {
389-
pmm_init(0x100000, 0);
390-
}
391398
diag_log_hex32(DIAG_INFO, "mem_bytes", mem_bytes);
392399
serial_write_string("DEBUG: PMM Initialized\n");
400+
fb_console_write("PMM Initialized\n");
393401

394402
pmm_reserve_region((uint32_t)&kernel_start, (uint32_t)&kernel_end - (uint32_t)&kernel_start);
395403
if (info) {
@@ -405,12 +413,15 @@ void kernel_main(unsigned int multiboot_magic, unsigned int multiboot_info_addr)
405413
}
406414
}
407415
serial_write_string("DEBUG: Memory regions reserved\n");
416+
fb_console_write("Memory Reserved\n");
408417

409418
acpi_scan();
410419
serial_write_string("DEBUG: ACPI scan complete\n");
420+
fb_console_write("ACPI Scanned\n");
411421

412422
paging_init();
413423
serial_write_string("DEBUG: Paging Initialized\n");
424+
fb_console_write("Paging Initialized\n");
414425

415426
serial_write_string("DEBUG: Initializing Interrupt Controller...\n");
416427
apex_intc_init();
@@ -419,6 +430,7 @@ void kernel_main(unsigned int multiboot_magic, unsigned int multiboot_info_addr)
419430
serial_write_string("DEBUG: Initializing SMP...\n");
420431
smp_rally_init();
421432
serial_write_string("DEBUG: SMP/Interrupt Controller Initialized\n");
433+
fb_console_write("SMP/Intc Initialized\n");
422434

423435
serial_write_string("DEBUG: Initializing Power Subsystems...\n");
424436
power_plane_init();
@@ -448,6 +460,7 @@ void kernel_main(unsigned int multiboot_magic, unsigned int multiboot_info_addr)
448460
sys_view_init();
449461
sys_config_init();
450462
serial_write_string("DEBUG: Subsystems Initialized\n");
463+
fb_console_write("Subsystems Initialized\n");
451464

452465
if (cpu_has_sse()) {
453466
sse_enable();
@@ -457,11 +470,13 @@ void kernel_main(unsigned int multiboot_magic, unsigned int multiboot_info_addr)
457470
}
458471
ai_model_init();
459472
serial_write_string("DEBUG: AI Model Initialized\n");
473+
fb_console_write("AI Model Initialized\n");
460474

461475
heap_init();
462476
slab_init();
463477
kswapd_init();
464478
serial_write_string("DEBUG: Memory Management (Heap/Slab) Initialized\n");
479+
fb_console_write("Heap/Slab Initialized\n");
465480

466481
numa_init(get_ram_size());
467482
ipc_init();
@@ -475,42 +490,49 @@ void kernel_main(unsigned int multiboot_magic, unsigned int multiboot_info_addr)
475490
btrfs_init();
476491
job_init();
477492
serial_write_string("DEBUG: FS/IPC/Jobs Initialized\n");
478-
479-
fb_init(info);
480-
fb_clear(0);
481-
fb_console_init(0xFFFFFF, 0);
482-
fb_console_write("Kernel Loaded Successfully\n");
483-
serial_write_string("DEBUG: Framebuffer Initialized\n");
493+
fb_console_write("FS/IPC/Jobs Initialized\n");
484494

485495
vfs_init();
486496
serial_write_string("DEBUG: VFS Initialized\n");
497+
fb_console_write("VFS Initialized\n");
487498

488499
if (info && info->mods_count > 0) {
489500
multiboot_module_t* module = (multiboot_module_t*)info->mods_addr;
490501
uint32_t size = module->mod_end - module->mod_start;
491502
vfs_set_root(ramdisk_init(module->mod_start, size));
492503
}
493504
serial_write_string("DEBUG: Ramdisk mounted\n");
505+
fb_console_write("Ramdisk Mounted\n");
494506

495507
scheduler_init();
508+
serial_write_string("DEBUG: Scheduler Initialized\n");
509+
fb_console_write("Scheduler Initialized\n");
496510
process_create(task_a, 0);
511+
serial_write_string("DEBUG: Task A created\n");
497512
process_create(task_b, 0);
513+
serial_write_string("DEBUG: Task B created\n");
498514
pit_init(100);
499-
serial_write_string("DEBUG: Scheduler/PIT Initialized.\n");
515+
serial_write_string("DEBUG: PIT Initialized (100Hz)\n");
516+
fb_console_write("PIT Initialized\n");
500517

501-
fb_clear(0);
502-
fb_console_init(0xFFFFFF, 0);
518+
fb_console_write("Shell Initializing...\n");
503519
keyboard_init();
504520
keyboard_set_callback(shell_on_input);
505521
shell_init();
522+
serial_write_string("DEBUG: Shell Initialized\n");
523+
fb_console_write("Shell Initialized\n");
506524

507525
serial_write_string("DEBUG: Kernel Main complete, enabling interrupts...\n");
526+
fb_console_write("Enabling Interrupts...\n");
508527
enable_interrupts();
509528
serial_write_string("DEBUG: Interrupts enabled\n");
529+
fb_console_write("Interrupts Enabled\n");
510530
#ifdef SELFTEST_AUTORUN
531+
serial_write_string("DEBUG: Running Selftests...\n");
511532
selftest_run();
512533
#endif
513534

535+
serial_write_string("DEBUG: Entering Kernel Idle Loop\n");
514536
for (;;) {
515537
asm volatile("hlt");
516538
}

0 commit comments

Comments
 (0)