status_t load_kernel(stage2_args* args, BootVolume& volume) { const char *name; int fd = find_kernel(volume, &name); if (fd < B_OK) return fd; dprintf("load kernel %s...\n", name); elf_init(); preloaded_image *image; status_t status = elf_load_image(fd, &image); close(fd); if (status < B_OK) { dprintf("loading kernel failed: %lx!\n", status); return status; } gKernelArgs.kernel_image = image; status = elf_relocate_image(gKernelArgs.kernel_image); if (status < B_OK) { dprintf("relocating kernel failed: %lx!\n", status); return status; } gKernelArgs.kernel_image->name = kernel_args_strdup(name); return B_OK; }
status_t load_kernel(stage2_args *args, Directory *volume) { int fd = open_from(volume, KERNEL_PATH, O_RDONLY); if (fd < B_OK) return fd; dprintf("load kernel...\n"); elf_init(); status_t status = elf_load_image(fd, &gKernelArgs.kernel_image); close(fd); if (status < B_OK) { dprintf("loading kernel failed: %lx!\n", status); return status; } status = elf_relocate_image(&gKernelArgs.kernel_image); if (status < B_OK) { dprintf("relocating kernel failed: %lx!\n", status); return status; } gKernelArgs.kernel_image.name = kernel_args_strdup(KERNEL_IMAGE); return B_OK; }