Ejemplo n.º 1
0
Archivo: kernel.c Proyecto: Kloniks/muk
void kernel_main(unsigned long magic,
		 unsigned long addr)
{
  multiboot_info_t *mbi;

  if (magic != MULTIBOOT_BOOTLOADER_MAGIC)
    return;

  mbi = (multiboot_info_t*)addr;

  /* kernel init
   */
  serial_init(DEBUG_SERIAL_PORT,
	      DEBUG_SERIAL_SPEED,
	      UART_8BITS_WORD,
	      UART_NO_PARITY,
	      UART_1_STOP_BIT);
  cls();

  cpu_cli();
  printf("[x] interrupts disabled\n");

  gdt_initialize();
  printf("[x] gdt initialized\n");

  idt_initialize();
  printf("[x] idt initialized\n");

  breakpoint_initialize();

#if defined(USE_APIC)
  apic_initialize();
  serial_printl("[x] apic initialized\n");
#else
  pic_initialize();
  serial_printl("[x] pic initialized\n");
#endif /* USE_APIC */

  /* initialize the kernel
   */
  {
    kernel_init(mbi);
  }

  /* memory initialization
   */
  {
    phys_init(mbi);
    phys_debug();
/*     vm_init(); */
/*     unit_test_vm(); */
/*     cpu_hlt(); */
  }

#if defined(USE_PCI)
  pci_initialize();
  pci_list();
#endif

  cpu_sti();

#if defined(USE_TASK)
 {
   /* subsystems
    */
   event_initialize();
   sched_initialize();
   task_initialize();

   /* tasks
    */
   idle_initialize();
   muksh_initialize();
   net_initialize();

/*    task_test(); */

   /* start scheduling
    */
   sched_start();
 }
#endif

 /* endless loop
  */
 serial_printl("[?] kernel loop\n");
 while (1)
   {
     serial_printl("k");
     cpu_hlt();
   }
}
Ejemplo n.º 2
0
void kernel(long magic, multiboot_info_t *multiboot_info_pointer)
{
	if(magic != 0x2BADB002)
	{
		print("Multiboot isn't magic", COLOR_RED);
		reboot();
	}

	memcpy(&multiboot_info, multiboot_info_pointer, sizeof(struct multiboot_info_t));

	if((multiboot_info.flags & 0x40) == 0)
	{
		print("Can't get memory map", COLOR_RED);
		reboot();
	}

	print("ASXSoft ", COLOR_GRAY);
	print("Nuke\r\n", COLOR_BLUE);
	print("================================================================================", COLOR_GRAY);

	print("Switching to ", COLOR_GRAY);
	print("Long Mode", COLOR_YELLOW);
	print("...", COLOR_GRAY);

	ewrin();

	if(inb(0x03CC) == 0)	
	{
		byte old = inb(0x03B4);
		outb(0x03B4, 0x0A);
		outb(0x03B5, 0x3F);
		outb(0x03B4, old);
	}
	else
	{
		byte old = inb(0x03D4);
		outb(0x03D4, 0x0A);
		outb(0x03D5, 0x3F);
		outb(0x03D4, old);
	}

	print("Setting up GDT...", COLOR_GRAY);

	gdt_initialize();
	
	gdt_load();

	gdt_flush_registers(0x08, 0x10, 0x10, 0x00, 0x00, 0x10);

	ewrin();

	print("Setting up IDT...", COLOR_GRAY);

	idt_initialize();

	idt_load();

	ewrin();
	

	while(1) { asm("hlt"); };
}