summaryrefslogtreecommitdiff
path: root/src/kernel/main.cc
diff options
context:
space:
mode:
authorRichard Qin <richard.qin.x@gmail.com>2026-01-03 02:19:57 +0800
committerRichard Qin <richard.qin.x@gmail.com>2026-01-03 02:19:57 +0800
commit210025560c80b48af4875af199f183ad709e3bf0 (patch)
treeeb11aeb7b641187f207e3b572c5184cf3526b463 /src/kernel/main.cc
parentbde87490d61135dcaa94d9b1489ff6c39876d169 (diff)
parent10614e04929a6d109a5e90524e446b637aaf0c13 (diff)
downloadlume-210025560c80b48af4875af199f183ad709e3bf0.tar.gz
lume-210025560c80b48af4875af199f183ad709e3bf0.tar.xz
Merge pull request #4 from Richard-Qin-001/dev/shell
Rebuilt the system's underlying structure; it is now stable enough to merge. The system now supports a read-only file system and has a simple shell implemented.
Diffstat (limited to 'src/kernel/main.cc')
-rw-r--r--src/kernel/main.cc107
1 files changed, 50 insertions, 57 deletions
diff --git a/src/kernel/main.cc b/src/kernel/main.cc
index c6d794d..9a24028 100644
--- a/src/kernel/main.cc
+++ b/src/kernel/main.cc
@@ -1,75 +1,68 @@
+#include "common/types.h"
+#include "kernel/riscv.h"
#include "drivers/uart.h"
+#include "drivers/plic.h"
+#include "drivers/virtio.h"
#include "kernel/pmm.h"
#include "kernel/mm.h"
-#include "kernel/trap.h"
+#include "kernel/slab.h"
#include "kernel/proc.h"
+#include "kernel/trap.h"
#include "kernel/timer.h"
-#include "kernel/config.h"
-
-void fdt_init(uint64 dtb);
+#include "kernel/cpu.h"
+#include "kernel/buf.h"
+#include "fs/fs.h"
+#include "fs/file.h"
+#include "fs/fat32.h"
+#include "lib/string.h"
-void delay()
-{
- for(volatile int i = 0; i < 1000000; i++)
- {
+extern void fdt_init(uint64 dtb);
+extern uint64 g_dtb_addr;
- }
-}
-
-void task_a()
-{
- while(1)
- {
- Drivers::uart_putc('A');
- delay();
- // ProcManager::yield();
- }
-}
+volatile static int started = 0;
-void task_b()
+extern "C" void kernel_main(uint64 hartid, uint64 dtb)
{
- while (1)
+ if (hartid == 0)
{
- Drivers::uart_putc('B');
- delay();
- // ProcManager::yield();
- }
-
-}
-
-extern "C" void kernel_main()
-{
-
- fdt_init(g_dtb_addr);
- Drivers::uart_init();
- Drivers::uart_puts("\n[Lume OS Kernel] Booted in S-Mode.\n");
- Drivers::uart_puts("2025 Richard Qin\n");
- Drivers::uart_puts("\n");
- Drivers::uart_puts("\n[Boot] Kernel started.\n");
+ fdt_init(dtb);
- PMM::init();
- Drivers::uart_puts("[Boot] PMM initialized.\n");
+ Drivers::uart_init();
+ Drivers::uart_puts("\n[Lume OS] Booting...\n");
- VM::kvminit();
- Drivers::uart_puts("[Boot] Kernel page table created.\n");
+ Drivers::uart_puts("[Boot] PMP configured.\n");
- VM::kvminithart();
- Drivers::uart_puts("[Boot] MMU ENABLED! We are now using virtual addresses.\n");
+ PMM::init(); // Physical Memory Management
+ VM::kvminit(); // Kernel Pagetable
+ VM::kvminithart(); // Enable MMU
+ Slab::init();
+ Trap::init(); // Trap Management
+ Trap::inithart();
+ PLIC::init();
+ PLIC::inithart();
+ VirtIO::init();
+ BufferCache::init();
+ VFS::init();
+ FileTable::init();
+ Timer::init();
+ ProcManager::init(); // Process Management
+ ProcManager::user_init(); // Initialize first user process
- Trap::init();
- Drivers::uart_puts("[Boot] Trap Handler Installed.\n");
+ __atomic_store_n(&started, 1, __ATOMIC_RELEASE);
- Timer::init();
- Drivers::uart_puts("[Boot] Timer Interrupt Enabled.\n");
-
- ProcManager::init();
- Drivers::uart_puts("[Boot] ProcManager Initialized.\n");
+ Drivers::uart_puts("[Boot] System initialized. Entering scheduler...\n");
+ }
+ else
+ {
+ while (__atomic_load_n(&started, __ATOMIC_ACQUIRE) == 0)
+ ;
- void task_a();
- void task_b();
- // ProcManager::create_kernel_thread(task_a, "Task A");
- // ProcManager::create_kernel_thread(task_b, "Task B");
- ProcManager::user_init();
+ VM::kvminithart();
+ Trap::inithart();
+ PLIC::inithart();
+ Timer::init();
+ Drivers::uart_puts("[Boot] Hart started.\n");
+ }
- ProcManager::scheduler();
+ ProcManager::scheduler(); // Enable Scheduler
} \ No newline at end of file