示例#1
0
void
bmk_multiboot(struct multiboot_info *mbi)
{
	unsigned long cmdlinelen;
	char *cmdline;

	bmk_printf_init(bmk_cons_putc, NULL);
	bmk_core_init(BMK_THREAD_STACK_PAGE_ORDER, PAGE_SIZE);

	bmk_printf("rump kernel bare metal multibootstrap\n\n");

	/* save the command line before something overwrites it */
	cmdline = (char *)(uintptr_t)mbi->cmdline;
	cmdlinelen = bmk_strlen(cmdline);
	if (cmdlinelen >= BMK_MULTIBOOT_CMDLINE_SIZE)
		bmk_platform_halt("command line too long, "
		    "increase BMK_MULTIBOOT_CMDLINE_SIZE");
	bmk_strcpy(bmk_multiboot_cmdline, cmdline);

	if ((mbi->flags & MULTIBOOT_MEMORY_INFO) == 0)
		bmk_platform_halt("multiboot memory info not available\n");

	if (parsemem(mbi->mmap_addr, mbi->mmap_length) != 0)
		bmk_platform_halt("multiboot memory parse failed");

	bmk_intr_init();
}
示例#2
0
文件: kernel.c 项目: gandro/rumprun
/*
 * INITIAL C ENTRY POINT.
 */
void _minios_start_kernel(start_info_t *si)
{

    bmk_printf_init(minios_putc, NULL);
    bmk_core_init(STACK_SIZE_PAGE_ORDER, PAGE_SHIFT);

    arch_init(si);
    trap_init();
    bmk_sched_init();

    /* print out some useful information  */
    minios_printk("  start_info: %p(VA)\n", si);
    minios_printk("    nr_pages: 0x%lx\n", si->nr_pages);
    minios_printk("  shared_inf: 0x%08lx(MA)\n", si->shared_info);
    minios_printk("     pt_base: %p(VA)\n", (void *)si->pt_base); 
    minios_printk("nr_pt_frames: 0x%lx\n", si->nr_pt_frames);
    minios_printk("    mfn_list: %p(VA)\n", (void *)si->mfn_list); 
    minios_printk("   mod_start: 0x%lx(VA)\n", si->mod_start);
    minios_printk("     mod_len: %lu\n", si->mod_len); 
    minios_printk("       flags: 0x%x\n", (unsigned int)si->flags);
    minios_printk("    cmd_line: %s\n",  
           si->cmd_line ? (const char *)si->cmd_line : "NULL");

    /* Set up events. */
    init_events();
    
    /* ENABLE EVENT DELIVERY. This is disabled at start of day. */
    __sti();

    arch_print_info();

    setup_xen_features();

    /* Init memory management. */
    init_mm();

    /* Init time and timers. */
    init_time();

    /* Init the console driver. */
    init_console();

    /* Init grant tables */
    init_gnttab();
 
    /* Init XenBus */
    init_xenbus();

    /* Init scheduler. */
    bmk_sched_startmain(_app_main, &start_info);
    bmk_platform_halt("unreachable");
}
示例#3
0
文件: boot.c 项目: gandro/rumprun
void
x86_boot(struct multiboot_info *mbi)
{

	bmk_printf_init(cons_putc, NULL);
	bmk_printf("rump kernel bare metal bootstrap\n\n");

	cpu_init();
	bmk_sched_init();
	multiboot(mbi);

	spl0();

	bmk_sched_startmain(mainthread, multiboot_cmdline);
}