Exemple #1
0
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;
}
Exemple #2
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);
}