hw/riscv: Extend the kernel loading support

Extend the RISC-V kernel loader to support Image and uImage files.
A Linux kernel can now be booted with:

    qemu-system-riscv64 -machine virt -bios fw_jump.bin -kernel Image

Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Tested-by: Bin Meng <bmeng.cn@gmail.com>
Signed-off-by: Palmer Dabbelt <palmer@sifive.com>
This commit is contained in:
Alistair Francis 2019-06-24 15:11:54 -07:00 committed by Palmer Dabbelt
parent b30422231b
commit 395fd69582
No known key found for this signature in database
GPG Key ID: EF4CA1502CCBAB41
1 changed files with 14 additions and 4 deletions

View File

@ -56,12 +56,22 @@ target_ulong riscv_load_kernel(const char *kernel_filename)
uint64_t kernel_entry, kernel_high;
if (load_elf(kernel_filename, NULL, NULL, NULL,
&kernel_entry, NULL, &kernel_high, 0, EM_RISCV, 1, 0) < 0) {
error_report("could not load kernel '%s'", kernel_filename);
exit(1);
&kernel_entry, NULL, &kernel_high, 0, EM_RISCV, 1, 0) > 0) {
return kernel_entry;
}
return kernel_entry;
if (load_uimage_as(kernel_filename, &kernel_entry, NULL, NULL,
NULL, NULL, NULL) > 0) {
return kernel_entry;
}
if (load_image_targphys_as(kernel_filename, KERNEL_BOOT_ADDRESS,
ram_size, NULL) > 0) {
return KERNEL_BOOT_ADDRESS;
}
error_report("could not load kernel '%s'", kernel_filename);
exit(1);
}
hwaddr riscv_load_initrd(const char *filename, uint64_t mem_size,