From mboxrd@z Thu Jan 1 00:00:00 1970 From: Anup Patel Date: Wed, 2 Dec 2020 19:58:38 +0530 Subject: [sw-dev] Booting Linux from U-Boot in qemu-system-riscv64? In-Reply-To: <6071db20-58af-55d3-5bec-8561d18a1707@bootlin.com> References: <6071db20-58af-55d3-5bec-8561d18a1707@bootlin.com> Message-ID: List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hi Michael, Set bootargs to "root=/dev/vda2 rootwait console=ttyS0 earlycon=sbi" in U-Boot before doing bootm Regards, Anup On Wed, 2 Dec, 2020, 12:51 Michael Opdenacker, < michael.opdenacker@bootlin.com> wrote: > Greetings, > > To prepare an embedded Linux demo (on RiscV), I'm trying to boot Linux > from U-Boot in qemu-system-riscv64, using the "virt" emulated machine... > Note that I'm using QEMU 5.0. > > The well documented way to boot Linux works: > > In Linux master: > CROSS_COMPILE=riscv64-linux-gnu- (toolchain built by Buildroot) > ARCH=riscv > make defconfig > make > > In opensbi: > make PLATFORM=generic FW_PAYLOAD_PATH=../linux/arch/riscv/boot/Image > > Running QEMU: > qemu-system-riscv64 -nographic -machine virt -kernel > opensbi/build/platform/generic/firmware/fw_payload.elf -append > "console=ttyS0" > > I can also boot U-Boot, but cannot manage to boot the Linux kernel with it: > > In U-Boot mainline: > > CROSS_COMPILE=riscv64-linux-gnu- > make qemu-riscv64_smode_defconfig > Modify the environment: > - Unset CONFIG_ENV_IS_NOWHERE > - CONFIG_ENV_IS_IN_FAT=y > - CONFIG_ENV_FAT_INTERFACE="virtio" > - CONFIG_ENV_FAT_DEVICE_AND_PART="0:1" > - CONFIG_ENV_FAT_FILE="uboot.env" > make > > Note that having U-Boot in "S" mode seems to be required to boot Linux. > If U-Boot is in "M" mode, it works, but there are faults (as expected) > when trying to execute Linux. > > In opensbi: > make PLATFORM=generic FW_PAYLOAD_PATH=../u-boot/u-boot.bin > > I then prepared a disk.img image with a first FAT partition containing: > - A "dtb" file captured from the first Linux boot (from /sys/firmware/fdt) > - A "uImage" file made from the command: > mkimage -A riscv -O linux -C none -T kernel -a 80200000 -e 80200000 -n > "Linux" -d arch/riscv/boot/Image uImage > > Then I'm starting QEMU as follows: > > qemu-system-riscv64 -m 1G -nographic -machine virt -bios > opensbi/build/platform/generic/firmware/fw_payload.bin -device > virtio-blk-device,drive=hd0 -drive file=disk.img,format=raw,id=hd0 > > OpenSBI v0.8-58-g781cafd > ____ _____ ____ _____ > / __ \ / ____| _ \_ _| > | | | |_ __ ___ _ __ | (___ | |_) || | > | | | | '_ \ / _ \ '_ \ \___ \| _ < | | > | |__| | |_) | __/ | | |____) | |_) || |_ > \____/| .__/ \___|_| |_|_____/|____/_____| > | | > |_| > > Platform Name : riscv-virtio,qemu > Platform Features : timer,mfdeleg > Platform HART Count : 1 > Firmware Base : 0x80000000 > Firmware Size : 104 KB > Runtime SBI Version : 0.2 > > Domain0 Name : root > Domain0 Boot HART : 0 > Domain0 HARTs : 0* > Domain0 Region00 : 0x0000000080000000-0x000000008001ffff () > Domain0 Region01 : 0x0000000000000000-0xffffffffffffffff (R,W,X) > Domain0 Next Address : 0x0000000080200000 > Domain0 Next Arg1 : 0x0000000082200000 > Domain0 Next Mode : S-mode > Domain0 SysReset : yes > > Boot HART ID : 0 > Boot HART Domain : root > Boot HART ISA : rv64imafdcsu > Boot HART Features : scounteren,mcounteren,time > Boot HART PMP Count : 16 > Boot HART PMP Granularity : 4 > Boot HART PMP Address Bits: 54 > Boot HART MHPM Count : 0 > Boot HART MHPM Count : 0 > Boot HART MIDELEG : 0x0000000000000222 > Boot HART MEDELEG : 0x000000000000b109 > > > U-Boot 2021.01-rc2-00161-gf6cf78dc6a (Dec 02 2020 - 07:05:39 +0100) > > CPU: rv64imafdcsu > Model: riscv-virtio,qemu > DRAM: 1 GiB > Loading Environment from FAT... OK > In: uart at 10000000 > Out: uart at 10000000 > Err: uart at 10000000 > Net: No ethernet found. > Hit any key to stop autoboot: 0 > bootcmd=printenv bootcmd; fatload virtio 0:1 0x84000000 uImage; fatload > virtio 0:1 0x88000000 dtb; bootm 0x84000000 - 0x88000000 > 17704512 bytes read in 39 ms (432.9 MiB/s) > 3618 bytes read in 1 ms (3.5 MiB/s) > ## Booting kernel from Legacy Image at 84000000 ... > Image Name: Linux > Image Type: RISC-V Linux Kernel Image (uncompressed) > Data Size: 17704448 Bytes = 16.9 MiB > Load Address: 80200000 > Entry Point: 80200000 > Verifying Checksum ... OK > ## Flattened Device Tree blob at 88000000 > Booting using the fdt blob at 0x88000000 > Loading Kernel Image > Using Device Tree in place at 0000000088000000, end 0000000088003e21 > > Starting kernel ... > > > ... and that's all I get, no further output. I'm not sure my dtb file is > suitable though. I'm surprised there is no DTS file for the riscv64 > "virt" board emulated by QEMU in the Linux kernel sources, as U-Boot > will refuse to boot Linux without one. > > Note that in U-Boot, the bootargs environment is set to: > bootargs=console=ttyS0 > > I'll be interested in your advise, if you already managed to do > something like this. > > Cheers, > > Michael. > > -- > Michael Opdenacker, CEO, Bootlin > Embedded Linux and Kernel engineering > https://bootlin.com > > -- > You received this message because you are subscribed to the Google Groups > "RISC-V SW Dev" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to sw-dev+unsubscribe at groups.riscv.org. > To view this discussion on the web visit > https://groups.google.com/a/groups.riscv.org/d/msgid/sw-dev/6071db20-58af-55d3-5bec-8561d18a1707%40bootlin.com > . >