[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-arm] RFC: raspberry pi / pi2 / Windows-on-ARM support
From: |
Stefan Weil |
Subject: |
Re: [Qemu-arm] RFC: raspberry pi / pi2 / Windows-on-ARM support |
Date: |
Tue, 17 Nov 2015 07:01:38 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Icedove/31.8.0 |
Am 16.11.2015 um 23:22 schrieb Andrew Baumann:
> Hi all,
>
> I have been working on Raspberry Pi 2 emulation, building on the previous
> work of Gregory Estrade, Stefan Weil and others on the original Raspberry Pi
> target. My current working tree (based off a recent master) is here:
> https://github.com/0xabu/qemu/tree/raspi
>
> The present status is:
> * The original Raspberry Pi (-M raspi) support works only with older kernels
> from Raspbian releases up to 2014-09-09, for unknown reasons that I haven't
> investigated. [1]
> * Pi 2 (-M raspi2) supports both Raspbian and Windows.
> * Raspbian boots on pi2, but fails on an implemented SETEND instruction in
> early userspace. I'm told there are patches/workarounds for this floating
> around, but have not tried them.
> * The Windows IoT image [2] boots completely, but the USB emulation is
> broken, so the only IO devices are framebuffer and serial console (which can
> be used for a kernel debugger).
> * All four Pi2 cores must be enabled for Windows, since the bootloader
> panics if the expected cores are not present. Conversely, Raspbian fails to
> boot if multiple cores are enabled, but I haven't debugged this, since qemu
> is faster with a single-core guest.
>
> I realise that getting this code integrated will require a series of smaller
> patches, but wanted to solicit any early feedback before I start doing that.
> I've verified that checkpatch.pl is happy, but if there are other stylistic
> or general problems with the code it would be helpful to know about them
> sooner rather than later :) If anyone has specific suggestions for how to
> split up the patch, that would also be welcome. If not, I will start
> submitting patches for the individual pieces, probably starting with the
> machine definition and then the larger devices, followed by the
> Windows-specific fixes described below.
>
> There are also a couple of significant (non Pi-specific) changes that I made
> in order to boot a Windows on ARM guest, which also I plan to submit:
> 1. UEFI (TianoCore / EDK2) has a couple of bugs in its MMC support -- it
> assumes support for CMD23 (set multiple block count, which is supposed to be
> optional), and also fails to initialise correctly if the card is ready
> immediately upon issuing ACMD41. My tree includes workarounds for both issues
> -- I implemented CMD23, and modelled a small delay when initialising the SD
> card.
> 2. For better or worse, Windows relies on taking alignment faults on a
> misaligned LDREX, however qemu doesn't perform any alignment checks, leading
> to a bluescreen very early in boot. The changes in target-arm implement a
> generic infrastructure for testing/raising alignment exceptions, and add a
> suitable check to LDREX. (This is almost certainly applicable to arm64 as
> well, but I don't have a means to test it.)
>
> Here's the current diffstat (ignore the minor unrelated bugfixes in lan9118
> and tap-win32):
> default-configs/arm-softmmu.mak | 1 +
> hw/arm/Makefile.objs | 1 +
> hw/arm/raspi.c | 514 ++++++++++++++++
> hw/char/Makefile.objs | 1 +
> hw/char/bcm2835_aux.c | 250 ++++++++
> hw/display/Makefile.objs | 1 +
> hw/display/bcm2835_fb.c | 384 ++++++++++++
> hw/dma/Makefile.objs | 1 +
> hw/dma/bcm2835_dma.c | 352 +++++++++++
> hw/intc/Makefile.objs | 1 +
> hw/intc/bcm2835_ic.c | 248 ++++++++
> hw/intc/bcm2836_control.c | 373 ++++++++++++
> hw/misc/Makefile.objs | 5 +
> hw/misc/bcm2835_mphi.c | 176 ++++++
> hw/misc/bcm2835_power.c | 113 ++++
> hw/misc/bcm2835_property.c | 409 +++++++++++++
> hw/misc/bcm2835_sbm.c | 294 ++++++++++
> hw/misc/bcm2835_vchiq.c | 113 ++++
> hw/net/lan9118.c | 18 +-
> hw/sd/Makefile.objs | 1 +
> hw/sd/bcm2835_emmc.c | 844 +++++++++++++++++++++++++++
> hw/sd/sd.c | 78 ++-
> hw/timer/Makefile.objs | 2 +
> hw/timer/arm_timer.c | 39 ++
> hw/timer/bcm2835_st.c | 201 +++++++
> hw/timer/bcm2835_timer.c | 242 ++++++++
> hw/usb/Makefile.objs | 2 +
> hw/usb/bcm2835_usb.c | 655 +++++++++++++++++++++
> hw/usb/bcm2835_usb_regs.h | 1061
> ++++++++++++++++++++++++++++++++++
> include/hw/arm/bcm2835_arm_control.h | 481 +++++++++++++++
> include/hw/arm/bcm2835_common.h | 35 ++
> include/hw/arm/raspi_platform.h | 155 +++++
> net/tap-win32.c | 51 +-
> target-arm/helper.c | 8 +
> target-arm/helper.h | 1 +
> target-arm/internals.h | 3 +
> target-arm/op_helper.c | 21 +
> target-arm/translate.c | 29 +
> 38 files changed, 7141 insertions(+), 23 deletions(-)
>
> The command line I've used for Raspbian is:
> qemu-system-arm -M raspi2 -m 1024 -kernel kernel7.img -sd
> 2015-09-24-raspbian-jessie.img -append "rw earlyprintk loglevel=8
> bcm2708_fb.fbwidth=1024 bcm2708_fb.fbheight=768 bcm2708.boardrev=0xf
> bcm2708.serial=0xcad0eedf vc_mem.mem_base=0x1c000000
> vc_mem.mem_size=0x20000000 dwc_otg.lpm_enable=0 root=/dev/mmcblk0p2"
>
> The command line for Windows is:
> qemu-system-arm -M raspi2 -smp 4 -m 1024 -bios kernel.img -sd
> th2preview_pi2_iot.vhd
> (where kernel.img is the EDK2 bootloader from the first partition of the
> Windows image).
>
> Cheers,
> Andrew
>
> [1] https://www.raspberrypi.org/forums/viewtopic.php?f=72&t=26561&start=125
> [2] http://ms-iot.github.io/content/en-US/Downloads.htm
>
Hi Andrew,
thanks for this great overview of your activities regarding QEMU with
Raspberry Pi 2 support.
The QEMU development is currently preparing the new version 2.5 (see
http://wiki.qemu.org/Planning/2.5, http://wiki.qemu.org/ChangeLog/2.5).
This should be finished until 2015-12-10 (maybe a little later).
New patches for RPi can be discussed earlier, but won't be applied
to Git master before version 2.5 is finished.
I wish you good luck and hope RPi will be available to all QEMU users
soon. This target should be added to http://wiki.qemu.org/Planning/2.6
(or will it be http://wiki.qemu.org/Planning/3.0?), so nobody forgets
it. :-)
Kind regards,
Stefan
- [Qemu-arm] RFC: raspberry pi / pi2 / Windows-on-ARM support, Andrew Baumann, 2015/11/17
- Re: [Qemu-arm] RFC: raspberry pi / pi2 / Windows-on-ARM support,
Stefan Weil <=
- Re: [Qemu-arm] [Qemu-devel] RFC: raspberry pi / pi2 / Windows-on-ARM support, Peter Crosthwaite, 2015/11/18
- Re: [Qemu-arm] [Qemu-devel] RFC: raspberry pi / pi2 / Windows-on-ARM support, Andrew Baumann, 2015/11/18
- Re: [Qemu-arm] [Qemu-devel] RFC: raspberry pi / pi2 / Windows-on-ARM support, Peter Crosthwaite, 2015/11/18
- Re: [Qemu-arm] [Qemu-devel] RFC: raspberry pi / pi2 / Windows-on-ARM support, Andrew Baumann, 2015/11/24
- Re: [Qemu-arm] [Qemu-devel] RFC: raspberry pi / pi2 / Windows-on-ARM support, Peter Crosthwaite, 2015/11/25
- Re: [Qemu-arm] [Qemu-devel] RFC: raspberry pi / pi2 / Windows-on-ARM support, Peter Maydell, 2015/11/25
- Re: [Qemu-arm] [Qemu-devel] RFC: raspberry pi / pi2 / Windows-on-ARM support, Andrew Baumann, 2015/11/25
- Re: [Qemu-arm] [Qemu-devel] RFC: raspberry pi / pi2 / Windows-on-ARM support, Paolo Bonzini, 2015/11/29
- Re: [Qemu-arm] [Qemu-devel] RFC: raspberry pi / pi2 / Windows-on-ARM support, Andrew Baumann, 2015/11/25
- Re: [Qemu-arm] [Qemu-devel] RFC: raspberry pi / pi2 / Windows-on-ARM support, Peter Crosthwaite, 2015/11/26