feat: some clean up and validation of multiboot header

This commit is contained in:
2021-03-04 22:18:58 +01:00
parent 300e80c2e8
commit e532099ea7
9 changed files with 419 additions and 15 deletions

View File

@@ -49,7 +49,8 @@ void init_block_devices() {
fat_register_block_driver();
}
void noreturn kmain(multiboot_info_t *multiboot_info) {
void noreturn kmain(multiboot_info_t *multiboot_info, uint32_t mb_name) {
// early init
isr_install();
vga_clear_screen();
vga_clear_screen(' ', VGA_WHITE | (VGA_GRAY << VGA_SHIFT_BG));
@@ -57,25 +58,42 @@ void noreturn kmain(multiboot_info_t *multiboot_info) {
serial_init();
kprint_register(serial_kprint);
// parse multiboot
if (mb_name != MULTIBOOT_BOOTLOADER_MAGIC) {
k_panics("Not booted by multiboot\n");
}
store_bootloader_info(multiboot_info);
// initialize memory management
init_mmap(multiboot_info);
// initialize kprint functionality
kprint_init();
// identify cpu
cpuidx_print_info();
// init done, enable interrupts
// enable interrupts
__asm__ __volatile__("sti");
// start the timer
init_timer(1000);
// initialize devices
init_keyboard();
init_pci_system();
// register block device drivers
init_block_devices();
printf("Booted successfully v%d.%d.%d\n", version_major, version_minor, version_patch);
// initialize tasking
task_init();
kprint_start_task();
block_dev_start_task();
#ifdef K_SHELL
task_spawn(main_loop, NULL);
#endif
// switch to tasking
syscall_start_scheduler();
}