Qemu
m |
|||
Line 1: | Line 1: | ||
== QEMU support status regarding hppa/parisc == | == QEMU support status regarding hppa/parisc == | ||
− | + | Since QEMU version 2.12 (April 2018), qemu fully supports 32-bit hppa user emulation (hppa-linux-user) and 32-bit hppa system emulation (qemu-system-hppa). | |
All necessary changes have been merged into the [https://git.qemu.org/?p=qemu.git;a=summary upstream qemu git tree]. | All necessary changes have been merged into the [https://git.qemu.org/?p=qemu.git;a=summary upstream qemu git tree]. | ||
PA-RISC machines need a firmware ("PDC" = Processor Dependend Code). | PA-RISC machines need a firmware ("PDC" = Processor Dependend Code). | ||
− | Qemu | + | Qemu comes with a precompiled PDC firmware for hppa ([https://git.qemu.org/?p=qemu.git;a=blob;f=pc-bios/hppa-firmware.img;h=86930974b9e12bec214fb464eee443a0d844e6ff;hb=HEAD pc-bios/hppa-firmware.img]), which is based on a [https://github.com/hdeller/seabios-hppa/commits/parisc_firmware fork of SeaBIOS ]. |
The emulated machine is a [https://www.openpa.net/systems/hp-visualize_b132l_b160l_b180l.html HP B160L desktop machine], with one or more 32-bit PA7100LC CPUs. | The emulated machine is a [https://www.openpa.net/systems/hp-visualize_b132l_b160l_b180l.html HP B160L desktop machine], with one or more 32-bit PA7100LC CPUs. | ||
− | The QEMU emulation is able to run Linux and HP-UX | + | The QEMU emulation is able to run Linux and HP-UX. |
− | QEMU on parisc has been | + | QEMU on parisc has been developed by: |
* [mailto:rth@twiddle.net Richard Henderson]: QEMU CPU emulation (32-bit only), QEMU hardware divers | * [mailto:rth@twiddle.net Richard Henderson]: QEMU CPU emulation (32-bit only), QEMU hardware divers | ||
* [mailto:deller@gmx.de Helge Deller]: QEMU hardware drivers, SeaBIOS PDC firmware | * [mailto:deller@gmx.de Helge Deller]: QEMU hardware drivers, SeaBIOS PDC firmware | ||
* [mailto:svens@stackframe.org Sven Schnelle]: Lots of fixes all over QEMU and SeaBIOS (SCSI, CPU emulation fixes, SeaBIOS PDC firmware) | * [mailto:svens@stackframe.org Sven Schnelle]: Lots of fixes all over QEMU and SeaBIOS (SCSI, CPU emulation fixes, SeaBIOS PDC firmware) | ||
− | == | + | == QEMU runtime options == |
− | + | Possible qemu options: | |
− | + | * -accel tcg,thread=multi - always use this to enable parallel tcg (otherwise all guest CPUs run on one host CPU) | |
− | + | * -smp cpus=4 - define number of CPUs in the guest (maximum CPUs: 32) | |
− | + | * -boot menu=on - Firmware: enable interactive mode (boot prompt) | |
− | + | * -boot order=c - Firmware: Boot from hard disc | |
− | + | * -boot order=d - Firmware: Boot from CD/DVD | |
− | + | * -serial mon:stdio use serial console | |
+ | * -nographic - disable artist graphic card emulation, so no graphics output | ||
+ | * -fw_cfg pdc_debug,string=255, enable all firmware debug infos | ||
== How to build QEMU from source == | == How to build QEMU from source == | ||
Line 36: | Line 38: | ||
Run "make" | Run "make" | ||
− | == How to run QEMU with Debian-10 installer image == | + | == Emulation guest targets == |
+ | |||
+ | * Linux (Debian, Gentoo) | ||
+ | * [https://en.wikipedia.org/wiki/HP-UX HP-UX], versions 9.x up to 11.11 | ||
+ | * [https://wiki.netbsd.org/ports/hppa/ NetBSD], >= 8.0 | ||
+ | * [https://winworldpc.com/product/nextstep/3x NextSTEP] | ||
+ | * [ftp://ftp.cirr.com/pub/hppa/mklinux/ OSF/MkLinux] | ||
+ | |||
+ | == Linux == | ||
+ | |||
+ | * Linux kernel >= 4.14 runs best, with initial optimizations added for kernels >= 4.9. | ||
+ | * Prefer the Tulip NIC, then e1000 over the rtl8129 card. The latter gives irq issues with Dino emulation. | ||
+ | |||
+ | === Debian Linux QEMU image for parisc === | ||
+ | |||
+ | Download Debian hard disc image: | ||
+ | wget http://backup.parisc-linux.org/qemu/debian-10-hdd-img.tar.bz2 | ||
+ | Unzip image: | ||
+ | tar xvfj debian-10-hdd-img.tar.bz2 | ||
+ | Run qemu: | ||
+ | ./hppa-softmmu/qemu-system-hppa -drive file=debian-10-hdd.img -nographic -serial mon:stdio -accel tcg,thread=multi -smp cpus=4 | ||
+ | Log in as '''root''', root password is "'''rootme'''" | ||
+ | |||
+ | === How to run QEMU with Debian-10 installer image === | ||
* Create a virtual hard disc once: | * Create a virtual hard disc once: | ||
Line 57: | Line 82: | ||
deb-src http://ftp.debian.org/debian unstable main | deb-src http://ftp.debian.org/debian unstable main | ||
− | |||
− | + | == HP-UX == | |
− | + | * Still LASI NIC emulation and NCR 710 Emulation needed in order to be able to boot older HP-UX releases. | |
− | * | + | * [https://astr0baby.wordpress.com/2019/04/28/running-hp-ux-11-11-on-qemu-system-hp Astrobaby wrote about his test results.] |
− | + | ||
− | + | ||
− | * | + | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
* The "INTERRUPT KEY" mentioned sometimes by HP-UX can be emulated with the "Ctrl-\" key combination | * The "INTERRUPT KEY" mentioned sometimes by HP-UX can be emulated with the "Ctrl-\" key combination | ||
* In case you lost the HP-UX root password, boot at ISL 'hpux -is' and then give a new password with running "passwd". | * In case you lost the HP-UX root password, boot at ISL 'hpux -is' and then give a new password with running "passwd". | ||
− | + | * How to test dtwm Windows Manager: start "xinit", then run "/usr/dt/bin/dtwm". | |
− | + | ||
− | * | + | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | How to test dtwm Windows Manager: | + | |
− | start "xinit", then run "/usr/dt/bin/dtwm". | + | |
== NetBSD == | == NetBSD == | ||
Line 116: | Line 104: | ||
-nographic \ | -nographic \ | ||
-serial telnet::55555,server | -serial telnet::55555,server | ||
+ | |||
+ | * at least NetBSD-8 required. | ||
+ | * NetBSD-7 doesn't work, since the trap handler code is complaining about the stack pointer it sees in the trap frame. 0xa0 for the stack pointer isn't good (analyzed with Nick Hudson <nick.hudson@gmx.co.uk>): | ||
+ | ** insanity: 'tf->tf_sp >= minsp && tf->tf_sp < maxsp' at trap:556 type 0xf tf 0xe00040 lwp 0xe38140 sp 0xa0 pc 0x200240 | ||
(info by Nick Hudson <nick.hudson@gmx.co.uk>) | (info by Nick Hudson <nick.hudson@gmx.co.uk>) | ||
Line 148: | Line 140: | ||
== Future QEMU work == | == Future QEMU work == | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
Still need to do: | Still need to do: | ||
Line 161: | Line 146: | ||
* Does HP-UX has some kind of "sleep" assembler instruction in it's idle loop which can be used to lower qemu power consumption? | * Does HP-UX has some kind of "sleep" assembler instruction in it's idle loop which can be used to lower qemu power consumption? | ||
* Fix virtio-drivers in SeaBIOS (endianess-bugs, because SeaBIOS is originally only Little-endian from x86) | * Fix virtio-drivers in SeaBIOS (endianess-bugs, because SeaBIOS is originally only Little-endian from x86) | ||
− | |||
* More correct emulation of B160L in Qemu | * More correct emulation of B160L in Qemu | ||
* Emulate a 712 and/or j5000/c3000 machine | * Emulate a 712 and/or j5000/c3000 machine | ||
Line 169: | Line 153: | ||
* ... | * ... | ||
* '''Push SeaBIOS changes upstream!!''' | * '''Push SeaBIOS changes upstream!!''' | ||
+ | |||
+ | == List of QEmu important patches == | ||
+ | * [https://git.qemu.org/?p=qemu.git;a=commit;h=b1af755c33bf0d690553a5ccd93689dfd15a98e8 target/hppa: Allow, but diagnose, LDCW aligned only mod 4] - prevents crash with unaligned LDCW instruction. Missing in qemu v4.2.1, see: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=964805 | ||
+ | * [https://lists.gnu.org/archive/html/qemu-devel/2020-07/msg05904.html target/hppa: Free some temps in do_sub] - fixes https://bugs.launchpad.net/qemu/+bug/1880287 | ||
== Screenshots == | == Screenshots == |
Revision as of 08:07, 30 August 2020
Contents |
QEMU support status regarding hppa/parisc
Since QEMU version 2.12 (April 2018), qemu fully supports 32-bit hppa user emulation (hppa-linux-user) and 32-bit hppa system emulation (qemu-system-hppa). All necessary changes have been merged into the upstream qemu git tree.
PA-RISC machines need a firmware ("PDC" = Processor Dependend Code). Qemu comes with a precompiled PDC firmware for hppa (pc-bios/hppa-firmware.img), which is based on a fork of SeaBIOS .
The emulated machine is a HP B160L desktop machine, with one or more 32-bit PA7100LC CPUs.
The QEMU emulation is able to run Linux and HP-UX.
QEMU on parisc has been developed by:
- Richard Henderson: QEMU CPU emulation (32-bit only), QEMU hardware divers
- Helge Deller: QEMU hardware drivers, SeaBIOS PDC firmware
- Sven Schnelle: Lots of fixes all over QEMU and SeaBIOS (SCSI, CPU emulation fixes, SeaBIOS PDC firmware)
QEMU runtime options
Possible qemu options:
- -accel tcg,thread=multi - always use this to enable parallel tcg (otherwise all guest CPUs run on one host CPU)
- -smp cpus=4 - define number of CPUs in the guest (maximum CPUs: 32)
- -boot menu=on - Firmware: enable interactive mode (boot prompt)
- -boot order=c - Firmware: Boot from hard disc
- -boot order=d - Firmware: Boot from CD/DVD
- -serial mon:stdio use serial console
- -nographic - disable artist graphic card emulation, so no graphics output
- -fw_cfg pdc_debug,string=255, enable all firmware debug infos
How to build QEMU from source
Check out the qemu git tree
Run configure, e.g.
- (for system emulation) ./configure --target-list=hppa-softmmu --enable-numa
- (for user emulation) ./configure --target-list=hppa-linux-user --disable-stack-protector --prefix=/home/qemu-hppa/chroot-unstable --interp-prefix=/home/qemu-hppa/chroot-unstable --static
Run "make"
Emulation guest targets
- Linux (Debian, Gentoo)
- HP-UX, versions 9.x up to 11.11
- NetBSD, >= 8.0
- NextSTEP
- OSF/MkLinux
Linux
- Linux kernel >= 4.14 runs best, with initial optimizations added for kernels >= 4.9.
- Prefer the Tulip NIC, then e1000 over the rtl8129 card. The latter gives irq issues with Dino emulation.
Debian Linux QEMU image for parisc
Download Debian hard disc image:
wget http://backup.parisc-linux.org/qemu/debian-10-hdd-img.tar.bz2
Unzip image:
tar xvfj debian-10-hdd-img.tar.bz2
Run qemu:
./hppa-softmmu/qemu-system-hppa -drive file=debian-10-hdd.img -nographic -serial mon:stdio -accel tcg,thread=multi -smp cpus=4
Log in as root, root password is "rootme"
How to run QEMU with Debian-10 installer image
- Create a virtual hard disc once:
qemu-img create -f qcow2 hdd.img 50G
- download a Linux install image, e.g.
- Start emulator with the installer image once:
./hppa-softmmu/qemu-system-hppa -drive file=hdd.img -drive file=debian-10.0-hppa-NETINST-1.iso,media=cdrom -boot order=d -nographic -serial mon:stdio
- Choose typical installation options, the defaults are OK.
- Either skip the step "Configure the Package manager", or configure the mirror as with hostname "ftp.ports.debian.org", and directory "/debian-ports"
- Shut down virtual machine after installation
- Start emulator with installed operating system any time:
./hppa-softmmu/qemu-system-hppa -drive file=hdd.img -nographic -serial mon:stdio -accel tcg,thread=multi -smp cpus=2
- Edit the sources.list (/etc/apt/sources.list) file:
deb http://ftp.ports.debian.org/debian-ports unstable main deb [arch=all] http://ftp.debian.org/debian unstable main deb-src http://ftp.debian.org/debian unstable main
HP-UX
- Still LASI NIC emulation and NCR 710 Emulation needed in order to be able to boot older HP-UX releases.
- Astrobaby wrote about his test results.
- The "INTERRUPT KEY" mentioned sometimes by HP-UX can be emulated with the "Ctrl-\" key combination
- In case you lost the HP-UX root password, boot at ISL 'hpux -is' and then give a new password with running "passwd".
- How to test dtwm Windows Manager: start "xinit", then run "/usr/dt/bin/dtwm".
NetBSD
Images at http://nycdn.netbsd.org/pub/NetBSD-daily/HEAD/latest/images/
Info at https://www.netbsd.org/releases/current.html
KERNEL=netbsd qemu-system-hppa \ -kernel ${KERNEL} \ -drive file=hdd.img \ -drive file=NetBSD-8.99.37-hppa.iso,media=cdrom \ -nographic \ -serial telnet::55555,server
- at least NetBSD-8 required.
- NetBSD-7 doesn't work, since the trap handler code is complaining about the stack pointer it sees in the trap frame. 0xa0 for the stack pointer isn't good (analyzed with Nick Hudson <nick.hudson@gmx.co.uk>):
- insanity: 'tf->tf_sp >= minsp && tf->tf_sp < maxsp' at trap:556 type 0xf tf 0xe00040 lwp 0xe38140 sp 0xa0 pc 0x200240
(info by Nick Hudson <nick.hudson@gmx.co.uk>)
OSF/MkLinux
Download at ftp://ftp.cirr.com/pub/hppa/mklinux/ The file root_ext2_g.dd.bin.gz doesn't cleanly decompress.. so I did a gzip -dc into root_ext2_g.dd.bin.
MkLinux sources: https://github.com/slp/osfmk-mklinux
qemu-system-hppa -boot c -drive if=scsi,bus=0,index=3,file=root_ext2_g.dd.bin,format=raw \ -serial mon:stdio -nographic -m 128
It boots, but fails during device detection because Qemu currently emulates a B160, while MkLinux expects a HP700. So it fails to see the LASI chip below the GSC bridge.
NVM bootdata Bad Checksum (0) OSF Mach boot : /mach text (0x95618) at 0x11000 data (0x48594) at 0xa8000 Mach 3.0 VERSION(PMK1.1): cb <pmk1_1>; Wed Nov 26 17:20:37 MET 1997; mach_kernel/PRODUCTION (cameleon) HP9000/ unknown machine type 0x502 good luck :-) , 0K Icache, 0K Dcache, 256 entry shared TLB) Warning: unsupported module at ffc00000 (type:7 svers:0 hvers:50) Stack Trace (depth=1): 0x00084d68 End of Stack
(info by Jason Stevens <neozeed@gmail.com>)
Future QEMU work
Still need to do:
- Add Dino/Lasi serial port
- Harmony sound card in Lasi
- Does HP-UX has some kind of "sleep" assembler instruction in it's idle loop which can be used to lower qemu power consumption?
- Fix virtio-drivers in SeaBIOS (endianess-bugs, because SeaBIOS is originally only Little-endian from x86)
- More correct emulation of B160L in Qemu
- Emulate a 712 and/or j5000/c3000 machine
- Emulate built-in LASI SCI controller instead of PCI SCSI add-on card
- Elroy PCI emulation, then emulate e.g. a C3000?
- PA2.0/64bit (low prio)
- ...
- Push SeaBIOS changes upstream!!
List of QEmu important patches
- target/hppa: Allow, but diagnose, LDCW aligned only mod 4 - prevents crash with unaligned LDCW instruction. Missing in qemu v4.2.1, see: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=964805
- target/hppa: Free some temps in do_sub - fixes https://bugs.launchpad.net/qemu/+bug/1880287