All of lore.kernel.org
 help / color / mirror / Atom feed
* Risc-V, qemu, and initrd
@ 2018-06-21  6:11 Guenter Roeck
  2018-06-21  8:11 ` Atish Patra
  2018-06-21 14:30 ` Andreas Schwab
  0 siblings, 2 replies; 11+ messages in thread
From: Guenter Roeck @ 2018-06-21  6:11 UTC (permalink / raw)
  To: linux-riscv

Hi folks,

I tried to boot the latest Linux kernel with qemu from https://github.com/riscv/riscv-qemu.git,
branch qemu-2.13-for-upstream.

My command line is something like

     riscv64-softmmu/qemu-system-riscv64 -machine virt -m 512M -bios bbl -kernel vmlinux \
         -nographic -monitor none -initrd rootfs.cpio -append "rdinit=/sbin/init"

Unfortunately this doesn't work; the image crashes, complaining about a missing
root file system.

Loking into the kernel source, I found arch/riscv/kernel/setup.c:setup_initrd().
Debugging shows that initrd_start and initrd_end is set correctly in
drivers/of/fdt.c:early_init_dt_check_for_initrd(), but overwritten with the value
of __initramfs_start / __initramfs_size in setup_initrd(). This doesn't make
sense to me, since populate_rootfs() tries to populate the root file system
from both __initramfs_start and initrd_start.

Has anyone else noticed this problem ? Any idea what I need to do to load an
initrd with the -initrd option of qemu ?

Thanks,
Guenter

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Risc-V, qemu, and initrd
  2018-06-21  6:11 Risc-V, qemu, and initrd Guenter Roeck
@ 2018-06-21  8:11 ` Atish Patra
  2018-06-21 14:30 ` Andreas Schwab
  1 sibling, 0 replies; 11+ messages in thread
From: Atish Patra @ 2018-06-21  8:11 UTC (permalink / raw)
  To: linux-riscv

On 6/20/18 11:12 PM, Guenter Roeck wrote:
> Hi folks,
> 
> I tried to boot the latest Linux kernel with qemu from https://github.com/riscv/riscv-qemu.git,
> branch qemu-2.13-for-upstream.
> 

Did you try the upstream kernel? That doesn't boot directly. You need 
some additional patches which you can find here.

https://github.com/riscv/riscv-linux/tree/riscv-all


> My command line is something like
> 
>       riscv64-softmmu/qemu-system-riscv64 -machine virt -m 512M -bios bbl -kernel vmlinux \
>           -nographic -monitor none -initrd rootfs.cpio -append "rdinit=/sbin/init"
>

AFAIK, qemu -kernel argument expects the bbl file which as vmlinux 
embedded in it. At least that's what the makefile from freedom-u-sdk says:

https://github.com/sifive/freedom-u-sdk/blob/master/Makefile

Regards,
Atish

> Unfortunately this doesn't work; the image crashes, complaining about a missing
> root file system.
> 
> Loking into the kernel source, I found arch/riscv/kernel/setup.c:setup_initrd().
> Debugging shows that initrd_start and initrd_end is set correctly in
> drivers/of/fdt.c:early_init_dt_check_for_initrd(), but overwritten with the value
> of __initramfs_start / __initramfs_size in setup_initrd(). This doesn't make
> sense to me, since populate_rootfs() tries to populate the root file system
> from both __initramfs_start and initrd_start.
> 
> Has anyone else noticed this problem ? Any idea what I need to do to load an
> initrd with the -initrd option of qemu ?
> 
> Thanks,
> Guenter
> 
> _______________________________________________
> linux-riscv mailing list
> linux-riscv at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-riscv
> 

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Risc-V, qemu, and initrd
  2018-06-21  6:11 Risc-V, qemu, and initrd Guenter Roeck
  2018-06-21  8:11 ` Atish Patra
@ 2018-06-21 14:30 ` Andreas Schwab
  2018-06-21 14:48   ` Guenter Roeck
  1 sibling, 1 reply; 11+ messages in thread
From: Andreas Schwab @ 2018-06-21 14:30 UTC (permalink / raw)
  To: linux-riscv

On Jun 20 2018, Guenter Roeck <linux@roeck-us.net> wrote:

> Loking into the kernel source, I found arch/riscv/kernel/setup.c:setup_initrd().
> Debugging shows that initrd_start and initrd_end is set correctly in
> drivers/of/fdt.c:early_init_dt_check_for_initrd(), but overwritten with the value
> of __initramfs_start / __initramfs_size in setup_initrd(). This doesn't make
> sense to me, since populate_rootfs() tries to populate the root file system
> from both __initramfs_start and initrd_start.
>
> Has anyone else noticed this problem ? Any idea what I need to do to load an
> initrd with the -initrd option of qemu ?

Try removing the offending lines in setup_initrd.

Andreas.

-- 
Andreas Schwab, SUSE Labs, schwab at suse.de
GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE  1748 E4D4 88E3 0EEA B9D7
"And now for something completely different."

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Risc-V, qemu, and initrd
  2018-06-21 14:30 ` Andreas Schwab
@ 2018-06-21 14:48   ` Guenter Roeck
  2018-06-21 14:52     ` Christoph Hellwig
  0 siblings, 1 reply; 11+ messages in thread
From: Guenter Roeck @ 2018-06-21 14:48 UTC (permalink / raw)
  To: linux-riscv

On Thu, Jun 21, 2018 at 04:30:55PM +0200, Andreas Schwab wrote:
> On Jun 20 2018, Guenter Roeck <linux@roeck-us.net> wrote:
> 
> > Loking into the kernel source, I found arch/riscv/kernel/setup.c:setup_initrd().
> > Debugging shows that initrd_start and initrd_end is set correctly in
> > drivers/of/fdt.c:early_init_dt_check_for_initrd(), but overwritten with the value
> > of __initramfs_start / __initramfs_size in setup_initrd(). This doesn't make
> > sense to me, since populate_rootfs() tries to populate the root file system
> > from both __initramfs_start and initrd_start.
> >
> > Has anyone else noticed this problem ? Any idea what I need to do to load an
> > initrd with the -initrd option of qemu ?
> 
> Try removing the offending lines in setup_initrd.
> 
I did. The resulting image hangs (I tried v4.17.2 and v4.18-rc1).
However, I can boot the latest image from the risc-v repository
to shell after commenting out the code in setup_initrd().

This is with qemu -M virt. The other machine types in qemu fail with
"rom: address overlap" errors. I didn't try to track down the reason.

Thanks,
Guenter

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Risc-V, qemu, and initrd
  2018-06-21 14:48   ` Guenter Roeck
@ 2018-06-21 14:52     ` Christoph Hellwig
  2018-06-21 16:34       ` Guenter Roeck
  2018-06-21 17:33       ` Guenter Roeck
  0 siblings, 2 replies; 11+ messages in thread
From: Christoph Hellwig @ 2018-06-21 14:52 UTC (permalink / raw)
  To: linux-riscv

On Thu, Jun 21, 2018 at 07:48:21AM -0700, Guenter Roeck wrote:
> I did. The resulting image hangs (I tried v4.17.2 and v4.18-rc1).

The upstream kernel is missing support for irq controllers and timers,
so I don't think it can boot on anything.

Here is my branch that allows me to boot qemu with 4.18-rc:

	http://git.infradead.org/users/hch/riscv.git/shortlog/refs/heads/riscv-linux-4.18

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Risc-V, qemu, and initrd
  2018-06-21 14:52     ` Christoph Hellwig
@ 2018-06-21 16:34       ` Guenter Roeck
  2018-06-21 17:33       ` Guenter Roeck
  1 sibling, 0 replies; 11+ messages in thread
From: Guenter Roeck @ 2018-06-21 16:34 UTC (permalink / raw)
  To: linux-riscv

On Thu, Jun 21, 2018 at 07:52:17AM -0700, Christoph Hellwig wrote:
> On Thu, Jun 21, 2018 at 07:48:21AM -0700, Guenter Roeck wrote:
> > I did. The resulting image hangs (I tried v4.17.2 and v4.18-rc1).
> 
> The upstream kernel is missing support for irq controllers and timers,
> so I don't think it can boot on anything.
> 
Hmm ... not as bad as a car with no engine, but getting close.

> Here is my branch that allows me to boot qemu with 4.18-rc:
> 
> 	http://git.infradead.org/users/hch/riscv.git/shortlog/refs/heads/riscv-linux-4.18

Yes, that boots if I disable setup_initrd(). I am still puzzled about the
purpose of setup_initrd() - it effectively disables external initrd,
initrd built into the kernel via CONFIG_INITRAMFS_SOURCE works just fine
without it, and no other architecture has similar code. Can/should it be
removed ?

Thanks,
Guenter

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Risc-V, qemu, and initrd
  2018-06-21 14:52     ` Christoph Hellwig
  2018-06-21 16:34       ` Guenter Roeck
@ 2018-06-21 17:33       ` Guenter Roeck
  2018-06-21 17:55         ` Christoph Hellwig
  1 sibling, 1 reply; 11+ messages in thread
From: Guenter Roeck @ 2018-06-21 17:33 UTC (permalink / raw)
  To: linux-riscv

Hi Christoph,

On Thu, Jun 21, 2018 at 07:52:17AM -0700, Christoph Hellwig wrote:
> On Thu, Jun 21, 2018 at 07:48:21AM -0700, Guenter Roeck wrote:
> > I did. The resulting image hangs (I tried v4.17.2 and v4.18-rc1).
> 
> The upstream kernel is missing support for irq controllers and timers,
> so I don't think it can boot on anything.
> 
> Here is my branch that allows me to boot qemu with 4.18-rc:
> 
> 	http://git.infradead.org/users/hch/riscv.git/shortlog/refs/heads/riscv-linux-4.18

Are you able to boot anything but -M virt ? If yes, can you send me the
necessary command line parameters ?

Thanks,
Guenter

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Risc-V, qemu, and initrd
  2018-06-21 17:33       ` Guenter Roeck
@ 2018-06-21 17:55         ` Christoph Hellwig
  2018-06-21 22:08           ` Guenter Roeck
  0 siblings, 1 reply; 11+ messages in thread
From: Christoph Hellwig @ 2018-06-21 17:55 UTC (permalink / raw)
  To: linux-riscv

On Thu, Jun 21, 2018 at 10:33:14AM -0700, Guenter Roeck wrote:
> Are you able to boot anything but -M virt ? If yes, can you send me the
> necessary command line parameters ?

Just -m virt.  For the SiFive board emulations a lot more driver
support is required.

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Risc-V, qemu, and initrd
  2018-06-21 17:55         ` Christoph Hellwig
@ 2018-06-21 22:08           ` Guenter Roeck
  2018-06-22  5:38             ` Christoph Hellwig
  0 siblings, 1 reply; 11+ messages in thread
From: Guenter Roeck @ 2018-06-21 22:08 UTC (permalink / raw)
  To: linux-riscv

On Thu, Jun 21, 2018 at 10:55:09AM -0700, Christoph Hellwig wrote:
> On Thu, Jun 21, 2018 at 10:33:14AM -0700, Guenter Roeck wrote:
> > Are you able to boot anything but -M virt ? If yes, can you send me the
> > necessary command line parameters ?
> 
> Just -m virt.  For the SiFive board emulations a lot more driver
> support is required.

Ok. At least it is a start. Have you managed to connect a hard drive ?
I was only able to get it to work with initrd.

Thanks,
Guenter

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Risc-V, qemu, and initrd
  2018-06-21 22:08           ` Guenter Roeck
@ 2018-06-22  5:38             ` Christoph Hellwig
  2018-06-22 16:34               ` Guenter Roeck
  0 siblings, 1 reply; 11+ messages in thread
From: Christoph Hellwig @ 2018-06-22  5:38 UTC (permalink / raw)
  To: linux-riscv

On Thu, Jun 21, 2018 at 03:08:59PM -0700, Guenter Roeck wrote:
> On Thu, Jun 21, 2018 at 10:55:09AM -0700, Christoph Hellwig wrote:
> > On Thu, Jun 21, 2018 at 10:33:14AM -0700, Guenter Roeck wrote:
> > > Are you able to boot anything but -M virt ? If yes, can you send me the
> > > necessary command line parameters ?
> > 
> > Just -m virt.  For the SiFive board emulations a lot more driver
> > support is required.
> 
> Ok. At least it is a start. Have you managed to connect a hard drive ?
> I was only able to get it to work with initrd.

Yes, I use virtio-blk.  Here is my qemu command line:

/opt/qemu-riscv/bin/qemu-system-riscv64 \
        -nographic \
        -machine virt \
        -kernel bbl \
        -append "root=/dev/vda ro console=ttyS0" \
        -drive file=../../busybear-linux/busybear.bin,format=raw,id=hd0 \
        -device virtio-blk-device,drive=hd0 \
        -netdev user,id=net0, \
        -device virtio-net-device,netdev=net0

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Risc-V, qemu, and initrd
  2018-06-22  5:38             ` Christoph Hellwig
@ 2018-06-22 16:34               ` Guenter Roeck
  0 siblings, 0 replies; 11+ messages in thread
From: Guenter Roeck @ 2018-06-22 16:34 UTC (permalink / raw)
  To: linux-riscv

On Thu, Jun 21, 2018 at 10:38:05PM -0700, Christoph Hellwig wrote:
> On Thu, Jun 21, 2018 at 03:08:59PM -0700, Guenter Roeck wrote:
> > On Thu, Jun 21, 2018 at 10:55:09AM -0700, Christoph Hellwig wrote:
> > > On Thu, Jun 21, 2018 at 10:33:14AM -0700, Guenter Roeck wrote:
> > > > Are you able to boot anything but -M virt ? If yes, can you send me the
> > > > necessary command line parameters ?
> > > 
> > > Just -m virt.  For the SiFive board emulations a lot more driver
> > > support is required.
> > 
> > Ok. At least it is a start. Have you managed to connect a hard drive ?
> > I was only able to get it to work with initrd.
> 
> Yes, I use virtio-blk.  Here is my qemu command line:
> 
> /opt/qemu-riscv/bin/qemu-system-riscv64 \
>         -nographic \
>         -machine virt \
>         -kernel bbl \
>         -append "root=/dev/vda ro console=ttyS0" \
>         -drive file=../../busybear-linux/busybear.bin,format=raw,id=hd0 \
>         -device virtio-blk-device,drive=hd0 \
>         -netdev user,id=net0, \
>         -device virtio-net-device,netdev=net0
> 

Yes, that worked. For some reason I had tried to use virtio-scsi-device.

With your Linux kernel ToT, after removing setup_initrd(), and with qemu
built from riscv/qemu-2.13-for-upstream, my testing now reports:

Building virt:defconfig:initrd ... running .... passed
Building virt:defconfig:rootfs ... running .... passed

Let's hope that upstream Linux soon gets to a point where I can activate
those tests.

Thanks a lot!

Guenter

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2018-06-22 16:34 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-06-21  6:11 Risc-V, qemu, and initrd Guenter Roeck
2018-06-21  8:11 ` Atish Patra
2018-06-21 14:30 ` Andreas Schwab
2018-06-21 14:48   ` Guenter Roeck
2018-06-21 14:52     ` Christoph Hellwig
2018-06-21 16:34       ` Guenter Roeck
2018-06-21 17:33       ` Guenter Roeck
2018-06-21 17:55         ` Christoph Hellwig
2018-06-21 22:08           ` Guenter Roeck
2018-06-22  5:38             ` Christoph Hellwig
2018-06-22 16:34               ` Guenter Roeck

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.