Extend the RISC-V kernel loader to support uImage and Image files. A Linux kernel can now be booted with:
qemu-system-riscv64 -machine virt -bios fw_jump.elf -kernel Image Signed-off-by: Alistair Francis <alistair.fran...@wdc.com> --- hw/riscv/boot.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/hw/riscv/boot.c b/hw/riscv/boot.c index 392ca0cb2e..7f68035a3f 100644 --- a/hw/riscv/boot.c +++ b/hw/riscv/boot.c @@ -67,13 +67,22 @@ target_ulong riscv_load_kernel(MachineState *machine, uint64_t kernel_entry, kernel_high; if (load_elf(kernel_filename, NULL, kernel_translate, machine, - &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; + } + + if (load_uimage_as(kernel_filename, &kernel_entry, NULL, NULL, + kernel_translate, machine, NULL) > 0) { + return kernel_entry; + } + + if (load_image_targphys_as(kernel_filename, KERNEL_BOOT_ADDRESS, + ram_size, NULL) > 0) { + return kernel_entry; } - return kernel_entry; + error_report("could not load kernel '%s'", kernel_filename); + exit(1); } hwaddr riscv_load_initrd(const char *filename, uint64_t mem_size, -- 2.22.0