int kernel_main(uint32_t esp) { initial_esp = esp; gdt_install(); idt_install(); isrs_install(); irq_install(); asm volatile("sti"); timer_install(); keyboard_install(); ASSERT(mboot_ptr != 0); ASSERT(mboot_ptr->mods_count > 0); uint32_t initrd_location = *((uint32_t*)mboot_ptr->mods_addr); uint32_t initrd_end = *(uint32_t*)(mboot_ptr->mods_addr + 4); // move the start of our kernel heap to past the initrd placement_address = initrd_end; initialize_paging(); initialize_tasking(); fs_root = initialize_initrd(initrd_location); // Create a new process in a new address space which is a clone of this. int ret = fork(); printf("fork() returned %x, ", ret); printf(" getpid() returned %x\n", getpid()); printf("Loading initial ramdisk...\n"); asm volatile("cli"); traverse_initrd(); asm volatile("sti"); printf("That's all folks\n"); for(;;); return 0; }
void init_kernel(uint32_t* modulep, void* kernmem, void* physbase, void* physfree) { printf("Booting Deep-OS\n"); printf("Initializing interrupt handler\n"); if(ENABLE_INTR) { init_pics(); idtStart(); } printf("Initializing memory manager\n"); init_mem_mgmt(modulep, kernmem, physbase, physfree); if (DEBUG) printf("Kernmem virt: %x\n", kernmem); if (DEBUG) printf("Kernmem before: %x\n", get_phy_addr((uint64_t)kernmem, kern_pml4e_virt)); printf("Initializing process manager\n"); initialize_tasking(); printf("Creating deep shell\n"); create_shell(); if (DEBUG) printf("Back after a simple switch. Current PID %d\n", getpid()); while(1); }