
Ich prüfe die Verwendung von QEMU zum Erstellen virtueller s390x-Linux-Maschinen für den Einsatz in Software-Builds. Ich hatte einige Erfolge beim Erstellen von Maschinen mit neueren Linux-Distributionen wie RHEL 8 und Ubuntu 20, aber ich möchte wirklich eine RHEL 7-Maschine.
Ich verwende Fedora 36 x86 und habe Folgendes sowohl mit den Fedora QEMU 6.2-Paketen als auch mit dem aktuellen, aus dem Quellcode erstellten QEMU 7.x versucht:
qemu-img create -f qcow2 rootfs.qcow2 20G
qemu-system-s390x \
-M s390-ccw-virtio -m 4G -smp 2 -cpu max \
-drive file=rhel-server-7.9-s390x-dvd.iso,media=cdrom,if=none,id=drive-virtio-disk1 \
-device virtio-scsi -device scsi-cd,drive=drive-virtio-disk1,bootindex=1 \
-drive file=rootfs.qcow2,if=none,id=drive-virtio-disk0 \
-device virtio-blk-ccw,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=2,scsi=off \
-net nic,model=virtio,netdev=net1 -netdev user,id=net1 \
-nographic -display none -serial mon:stdio \
-d guest_errors \
-kernel kernel.img -initrd initrd.img
Ich habe Kernel+Initrd-Images aus dem Image-Bereich der DVD ausprobiert und auch die, die aus dem Kernel 3.10 RPM-Paket auf der DVD extrahiert wurden. Ich habe verschiedene RHEL 7.x-Versionen ausprobiert, alle mit demselben Ergebnis - der Emulator wird sofort beendet und zeigt nur eine Debug-Ausgabe an, zum Beispiel:
Guest crashed on cpu 0: disabled-wait
PSW: 0x000a000000000000 0x000000008badcccc
Hat jemand einen Rat, wie man RHEL 7 s390x zum Laufen bekommt?
Antwort1
Die Antwort scheint zu sein, dass dies aufgrund von Kernelfunktionen, die in keiner Version von RHEL7 enthalten sind, nicht möglich ist, wie in den Kommentaren fürQEMU-Problem 906
Ich habe mein Problem gelöst, indem ich eine s390x-Emulation mit Fedora 36 erstellt habe und dabei eine Crosstool-ng-Toolchain verwendet habe, um die Versionen von gcc/libc/libstdc++ usw. zu steuern und so Artefakte zu erstellen, die auf älteren Betriebssystemen verknüpft/ausgeführt werden können.