Exemple #1
0
void isr_handler(pt_regs *regs)
{
	if (interrupt_handlers[regs->int_no]) {
		interrupt_handlers[regs->int_no](regs);
	} else {
		printk_color(rc_black, rc_blue, "Unhandled interrupt: %d\n", regs->int_no);
	}
}
Exemple #2
0
int kern_entry()
{
    init_debug();

    console_clear();

    printk_color(rc_black, rc_green, "Hello, OS kernel!\n");

    //panic("test");

	printk("kernel in memory start: 0x%08X\n", kern_start);
	printk("kernel in memory end:   0x%08X\n", kern_end);
	printk("kernel in memory used:   %d KB\n\n", (kern_end - kern_start) / 1024);
	
	show_memory_map();
	init_pmm();

	printk_color(rc_black, rc_red, "\nThe Count of Physical Memory Page is: %u\n\n", phy_page_count);

	uint32_t allc_addr = NULL;
	printk_color(rc_black, rc_light_brown, "Test Physical Memory Alloc :\n");
	allc_addr = pmm_alloc_page();
	printk_color(rc_black, rc_light_brown, "Alloc Physical Addr: 0x%08X\n", allc_addr);
	allc_addr = pmm_alloc_page();
	printk_color(rc_black, rc_light_brown, "Alloc Physical Addr: 0x%08X\n", allc_addr);
	allc_addr = pmm_alloc_page();
	printk_color(rc_black, rc_light_brown, "Alloc Physical Addr: 0x%08X\n", allc_addr);
	allc_addr = pmm_alloc_page();
	printk_color(rc_black, rc_light_brown, "Alloc Physical Addr: 0x%08X\n", allc_addr);

    return 0;
}
Exemple #3
0
// 调用中断处理函数
void isr_handler(pt_regs_t *regs)
{
        if (interrupt_handlers[regs->int_no]) {
              interrupt_handlers[regs->int_no](regs);
        } else {
                printk_color(rc_black, rc_blue, "Unhandled interrupt: %d %s\n", regs->int_no, intrname(regs->int_no));
                cpu_hlt();
        }
}
Exemple #4
0
// 调用中断处理函数
void idt_handler(registers_t *regs)
{
	if (interrupt_handlers[regs->int_no]) {
	      interrupt_handlers[regs->int_no](regs);
	} else {
		printk_color(rc_black, rc_blue, "Unhandled interrupt: %d\n", regs->int_no);
	}
	#if CHAPTER >= 6
		panic("Unhandled interrupt");
	#endif
}
Exemple #5
0
//调用中断处理函数
void idt_handler(registers_t *regs)
{
	if (interrupt_handlers[regs->int_no])
	{
		interrupt_handlers[regs->int_no](regs);
	}
	else
	{
		printk_color(rc_black, rc_blue, "Unhandler interrupt: %d\n", regs->int_no);
	}
}
Exemple #6
0
int kern_entry()
{
	init_debug();

	console_clear();

	printk_color(rc_black, rc_green, "Hello, OS kernel!\n");

	panic("test");

	return 0;
}
Exemple #7
0
void int_handler(struct trap_frame *frame)
{
    interrupt_handler_t handler = interrupt_handlers[frame->int_no];
    if (frame->int_no >= 32) {
        irq_eoi(frame->int_no);
    }
    if(handler){
        handler(frame);
    }else{
        printk_color(COLOR_BLUE, COLOR_BLACK, "INT: %d NO HANDLER\n", frame->int_no);
    }
}
Exemple #8
0
int main(multiboot_t * mbp)
{
	cpu_state_t *cpu;

	// first is to save critical info from bootloader
	// and get symbol tables so we can print back traces
	mbootp = mbp;
	init_debug(mbp);

	// reset text-mode
	c80_clear();
	printk_color(rc_black, rc_red, "\t\t\t\tRed Magic\n");

	// init processors
	init_bootstrap_processor();
	cpu = get_boot_processor();
	ASSERT(cpu != NULL);

	// initialize descriptors
	init_global_descriptor_table(cpu);
	init_interrupt_descriptor_table();
	init_io_apic();

	// interrupt on
	local_irq_enable();

	// memory management
	show_kernel_pos();
	show_ARDS_from_multiboot(mbp);
	init_paging();
	init_kheap();

	// initialize devices and rootfs
	init_dev();
	//init_root_fs();

	// start all APs
	if (mpinfo.ismp)
		start_smp();

	// start system clock
	if (!mpinfo.ismp)
		init_pit_timer(CLOCK_INT_HZ);
	else
		init_apic_timer(CLOCK_INT_HZ);

	// initialize kernel task and scheduling
	setup_init_task();
	init_sched();

	// All our initialisation calls will go in here.
	return 0xDEADBABA;
}
Exemple #9
0
int kern_entry()
{
    init_debug();
    init_gdt();
    init_idt();

    console_clear();
    printk_color(rc_black, rc_green, "Hello, OS kernel!\n");

    init_timer(200);

    // 开启中断
    asm volatile ("sti");

    return 0;
}
Exemple #10
0
void test_heap()
{
	printk_color(rc_black, rc_magenta, "Test kmalloc() && kfree() now ...\n\n");

	void *addr1 = kmalloc(50);
	printk("kmalloc    50 byte in 0x%X\n", addr1);
	void *addr2 = kmalloc(500);
	printk("kmalloc   500 byte in 0x%X\n", addr2);
	void *addr3 = kmalloc(5000);
	printk("kmalloc  5000 byte in 0x%X\n", addr3);
	void *addr4 = kmalloc(50000);
	printk("kmalloc 50000 byte in 0x%X\n\n", addr4);

	printk("free mem in 0x%X\n", addr1);
	kfree(addr1);
	printk("free mem in 0x%X\n", addr2);
	kfree(addr2);
	printk("free mem in 0x%X\n", addr3);
	kfree(addr3);
	printk("free mem in 0x%X\n\n", addr4);
	kfree(addr4);
}
Exemple #11
0
void test_heap(){
  printk_color(black, light_magenta, "Test kmalloc() && kfree()\n");

  void *addr1 = kmalloc(100);
  printk_color(black, light_cyan, "kmalloc 100 bytes in 0x%x\n", addr1);

  void *addr2 = kmalloc(10);
  printk_color(black, light_cyan, "kmalloc 10 bytes in 0x%x\n", addr2);

  kfree(addr1);
  printk_color(black, light_cyan, "kfree 100 bytes in 0x%x\n", addr1);

  void *addr3 = kmalloc(30);
  printk_color(black, light_cyan, "kmalloc 30 bytes in 0x%x\n", addr3);

  printk("\n");

  kfree(addr2);
  printk_color(black, light_cyan, "kfree 10 bytes in 0x%x\n", addr2);

  kfree(addr3);
  printk_color(black, light_cyan, "kfree 30 bytes in 0x%x\n", addr3);
}