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(); }
void bmk_main(struct multiboot_info *mbi) { bmk_cons_puts("rump kernel bare metal bootstrap\n\n"); if ((mbi->flags & MULTIBOOT_MEMORY_INFO) == 0) { bmk_cons_puts("multiboot memory info not available\n"); return; } if (parsemem(mbi->mmap_addr, mbi->mmap_length)) return; bmk_cpu_init(); bmk_sched_init(); rump_init(); rump_pub_netconfig_dhcp_ipv4_oneshot("wm0"); #ifdef RUMPRUN_APP /* run 'em if you got 'em */ bmk_app_main(); #endif }