mbox series

[0/4] m68k: add Virtual M68k Machine

Message ID 20201013155124.451774-1-laurent@vivier.eu
Headers show
Series m68k: add Virtual M68k Machine | expand

Message

Laurent Vivier Oct. 13, 2020, 3:51 p.m. UTC
The Quadra 800 machine is very limited to run linux, it manages
only 1 GiB of memory and only some specific interfaces.

The Virtual M68k Machine is based on Goldfish interfaces defined by Google
for Android simulator. It uses Goldfish-rtc (timer and RTC),
Goldfish-pic (PIC) and Goldfish-tty (for serial port and early tty).

https://android.googlesource.com/platform/external/qemu/+/master/docs/GOLDFIS=
H-VIRTUAL-HARDWARE.TXT

The machine is created with 128 virtio-mmio busses, and they can
be used to add serial console, GPU, disk, NIC, HID, ...

This series re-use the goldfish-rtc implemented for RISCV, and
adds the two others based on the goldfish specs, the kernel driver
and android simulator ones.

The machine can manage up to 3.2 GiB of memory, not because of an hardware
limitation but because the kernel crashes after this value.

Simply configure qemu with:

    .../configure --target-list=3Dm68k-softmmu

To run the machine you need a modified kernel you can find here:

    https://github.com/vivier/linux/tree/m68k-virt

You need to compile the kernel with:

    make virt_defconfig
    make vmlinux

The disk must be installed using the q800 machine because the debian installer
doesn't want to be used with a kernel that is not the one on the ISO.

And then you can run the machine with something like:

qemu-system-m68k -M virt \
  -m 3399672K \
  -chardev stdio,signal=3Doff,mux=3Don,id=3Dchar0 \
  -mon chardev=3Dchar0,mode=3Dreadline \
  -kernel vmlinux \
  -append "console=3Dhvc0 root=3D/dev/vda2" \
  -blockdev node-name=3Dsystem,driver=3Dfile,filename=3Ddebian-10.0.qcow2 \
  -blockdev node-name=3Ddrive0,driver=3Dqcow2,file=3Dsystem \
  -device virtio-blk-device,drive=3Ddrive0 \
  -serial chardev:char0 \
  -device virtio-net-device,netdev=3Dhostnet0 \
  -netdev bridge,id=3Dhostnet0,br=3Dvirbr0 \
  -device virtio-rng-device \
  -device virtio-serial-device \
  -device virtio-gpu-device \
  -device virtconsole,chardev=3Dchar0 \
  -device virtio-keyboard-device \
  -device virtio-mouse-device

if you want to use Goldfish-tty for the console rather than virtconsole, you
can add "console=3DttyGF".

To start the debian-installer, you can try by adding:

  -device virtio-scsi-device \
  -blockdev node-name=3Ddebian10,driver=3Dfile,filename=3Ddebian-10.0.0-m68k-=
NETINST-1.iso \
  -blockdev node-name=3Dcdrom0,driver=3Draw,file=3Ddebian10 \
  -device scsi-cd,drive=3Dcdrom0 \
  -initrd installer-m68k/20200315/images/cdrom/initrd.gz

ISO:    https://cdimage.debian.org/cdimage/ports/snapshots/2020-10-12/debian-=
10.0.0-m68k-NETINST-1.iso
initrd: https://cdimage.debian.org/cdimage/ports/debian-installer/2020-10-12/=
m68k/debian-installer-images_20200315_m68k.tar.gz

I think there are some endianness issues with virtio-gpu, because when the
X server starts I have some errors in the kernel logs:

  vmap allocation for size 3149824 failed: use vmalloc=3D<size> to increase s=
ize

I also tried virtiofsd but there is also an endianness problem and the server
stops.

Have Fun,
Laurent

PS:

By reading the message to the end you have won the right to download the disk=
 image
and the vmlinux.

http://vivier.eu/debian-10.0.qcow2     343 MiB
http://vivier.eu/vmlinux-virt-m68k     5.2 MiB

Laurent Vivier (4):
  m68k: import bootinfo headers from linux
  char: add goldfish-tty
  intc: add goldfish-pic
  m68k: add Virtual M68k Machine

 default-configs/devices/m68k-softmmu.mak      |   1 +
 hw/m68k/bootinfo.h                            |  55 ----
 include/hw/char/goldfish_tty.h                |  36 +++
 include/hw/intc/goldfish_pic.h                |  28 ++
 .../standard-headers/asm-m68k/bootinfo-mac.h  | 120 +++++++
 .../standard-headers/asm-m68k/bootinfo-virt.h |  17 +
 include/standard-headers/asm-m68k/bootinfo.h  | 166 ++++++++++
 hw/char/goldfish_tty.c                        | 265 ++++++++++++++++
 hw/intc/goldfish_pic.c                        | 178 +++++++++++
 hw/m68k/q800.c                                |  20 +-
 hw/m68k/virt.c                                | 296 ++++++++++++++++++
 MAINTAINERS                                   |  11 +
 hw/char/Kconfig                               |   3 +
 hw/char/meson.build                           |   2 +
 hw/char/trace-events                          |   9 +
 hw/intc/Kconfig                               |   3 +
 hw/intc/meson.build                           |   1 +
 hw/intc/trace-events                          |   8 +
 hw/m68k/Kconfig                               |   8 +
 hw/m68k/meson.build                           |   1 +
 20 files changed, 1160 insertions(+), 68 deletions(-)
 create mode 100644 include/hw/char/goldfish_tty.h
 create mode 100644 include/hw/intc/goldfish_pic.h
 create mode 100644 include/standard-headers/asm-m68k/bootinfo-mac.h
 create mode 100644 include/standard-headers/asm-m68k/bootinfo-virt.h
 create mode 100644 include/standard-headers/asm-m68k/bootinfo.h
 create mode 100644 hw/char/goldfish_tty.c
 create mode 100644 hw/intc/goldfish_pic.c
 create mode 100644 hw/m68k/virt.c

--=20
2.26.2