[PATCH v2 3/4] xen: enable qemuboot for arm32


Bertrand Marquis
 

Add required variables to generate a qemuboot devicetree for qemuarm.
With this change, Xen and dom0 can be started using runqemu.

Xen is started using qemu kernel argument and the devicetree is modified
to properly boot dom0 (which is loaded in memory).
This is using the same system as qemuarm64.

At this stage dom0 is hanging on PCI device scanning.

This patch is also using qemuarm64 as machine for arm64 bit instead of
aarch64 to allow adding support for other machine (an example a Xilinx
board that can be emulated with using an other xen machine).

Signed-off-by: Bertrand Marquis <bertrand.marquis@...>
---
classes/qemuboot-xen-defaults.bbclass | 20 +++++++++++++++-----
1 file changed, 15 insertions(+), 5 deletions(-)

diff --git a/classes/qemuboot-xen-defaults.bbclass b/classes/qemuboot-xen=
-defaults.bbclass
index c7e74c3..f1550cc 100644
--- a/classes/qemuboot-xen-defaults.bbclass
+++ b/classes/qemuboot-xen-defaults.bbclass
@@ -10,15 +10,21 @@ DOM0_KERNEL ??=3D "${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGE=
TYPE}"
DOM0_KERNEL_LOAD_ADDR ??=3D "0x45000000"
QB_XEN_DOMAIN_MODULES ??=3D "${DOM0_KERNEL}:${DOM0_KERNEL_LOAD_ADDR}:mul=
tiboot,kernel"
=20
-# Qemuboot for 64-bit Arm uses the QB_DEFAULT_KERNEL method to load Xen
+# Qemuboot for Arm uses the QB_DEFAULT_KERNEL method to load Xen
# and the device loader option for the dom0 kernel:
QB_OPT_APPEND:append:aarch64 =3D " \
-device loader,file=3D${DOM0_KERNEL},addr=3D${DOM0_KERNEL_LOAD_ADDR}=
\
"
-QB_DEFAULT_KERNEL:aarch64 =3D "xen-${MACHINE}"
+QB_OPT_APPEND:append:qemuarm =3D " \
+ -device loader,file=3D${DOM0_KERNEL},addr=3D${DOM0_KERNEL_LOAD_ADDR}=
\
+ "
+QB_DEFAULT_KERNEL:qemuarm64 =3D "xen-${MACHINE}"
+QB_DEFAULT_KERNEL:qemuarm =3D "xen-${MACHINE}"
=20
# 64-bit Arm: gic version 3
-QB_MACHINE:aarch64 =3D "-machine virt,gic-version=3D3 -machine virtualiz=
ation=3Dtrue"
+QB_MACHINE:qemuarm64 =3D "-machine virt,gic-version=3D3 -machine virtual=
ization=3Dtrue"
+# 32-bit Arm
+QB_MACHINE:qemuarm =3D "-machine virt -machine virtualization=3Dtrue"
=20
# Increase the default qemu memory allocation to allow for the hyperviso=
r.
# Use a weak assignment to allow for change of default and override else=
where.
@@ -26,5 +32,9 @@ QB_MEM_VALUE ??=3D "512"
QB_MEM =3D "-m ${QB_MEM_VALUE}"
=20
# 64-bit Arm: qemuboot with a device tree binary
-QB_DTB:aarch64 =3D "${IMAGE_NAME}.qemuboot.dtb"
-QB_DTB_LINK:aarch64 =3D "${IMAGE_LINK_NAME}.qemuboot.dtb"
+QB_DTB:qemuarm64 =3D "${IMAGE_NAME}.qemuboot.dtb"
+QB_DTB_LINK:qemuarm64 =3D "${IMAGE_LINK_NAME}.qemuboot.dtb"
+
+# 32-bit Arm: qemuboot with a device tree binary
+QB_DTB:qemuarm =3D "${IMAGE_NAME}.qemuboot.dtb"
+QB_DTB_LINK:qemuarm =3D "${IMAGE_LINK_NAME}.qemuboot.dtb"
--=20
2.25.1


Christopher Clark
 

On Tue, May 10, 2022 at 8:35 AM Bertrand Marquis
<bertrand.marquis@...> wrote:

Add required variables to generate a qemuboot devicetree for qemuarm.
With this change, Xen and dom0 can be started using runqemu.

Xen is started using qemu kernel argument and the devicetree is modified
to properly boot dom0 (which is loaded in memory).
This is using the same system as qemuarm64.

At this stage dom0 is hanging on PCI device scanning.

This patch is also using qemuarm64 as machine for arm64 bit instead of
aarch64 to allow adding support for other machine (an example a Xilinx
board that can be emulated with using an other xen machine).

Signed-off-by: Bertrand Marquis <bertrand.marquis@...>
Reviewed-by: Christopher Clark <christopher.w.clark@...>

Christopher

---
classes/qemuboot-xen-defaults.bbclass | 20 +++++++++++++++-----
1 file changed, 15 insertions(+), 5 deletions(-)

diff --git a/classes/qemuboot-xen-defaults.bbclass b/classes/qemuboot-xen-defaults.bbclass
index c7e74c3..f1550cc 100644
--- a/classes/qemuboot-xen-defaults.bbclass
+++ b/classes/qemuboot-xen-defaults.bbclass
@@ -10,15 +10,21 @@ DOM0_KERNEL ??= "${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}"
DOM0_KERNEL_LOAD_ADDR ??= "0x45000000"
QB_XEN_DOMAIN_MODULES ??= "${DOM0_KERNEL}:${DOM0_KERNEL_LOAD_ADDR}:multiboot,kernel"

-# Qemuboot for 64-bit Arm uses the QB_DEFAULT_KERNEL method to load Xen
+# Qemuboot for Arm uses the QB_DEFAULT_KERNEL method to load Xen
# and the device loader option for the dom0 kernel:
QB_OPT_APPEND:append:aarch64 = " \
-device loader,file=${DOM0_KERNEL},addr=${DOM0_KERNEL_LOAD_ADDR} \
"
-QB_DEFAULT_KERNEL:aarch64 = "xen-${MACHINE}"
+QB_OPT_APPEND:append:qemuarm = " \
+ -device loader,file=${DOM0_KERNEL},addr=${DOM0_KERNEL_LOAD_ADDR} \
+ "
+QB_DEFAULT_KERNEL:qemuarm64 = "xen-${MACHINE}"
+QB_DEFAULT_KERNEL:qemuarm = "xen-${MACHINE}"

# 64-bit Arm: gic version 3
-QB_MACHINE:aarch64 = "-machine virt,gic-version=3 -machine virtualization=true"
+QB_MACHINE:qemuarm64 = "-machine virt,gic-version=3 -machine virtualization=true"
+# 32-bit Arm
+QB_MACHINE:qemuarm = "-machine virt -machine virtualization=true"

# Increase the default qemu memory allocation to allow for the hypervisor.
# Use a weak assignment to allow for change of default and override elsewhere.
@@ -26,5 +32,9 @@ QB_MEM_VALUE ??= "512"
QB_MEM = "-m ${QB_MEM_VALUE}"

# 64-bit Arm: qemuboot with a device tree binary
-QB_DTB:aarch64 = "${IMAGE_NAME}.qemuboot.dtb"
-QB_DTB_LINK:aarch64 = "${IMAGE_LINK_NAME}.qemuboot.dtb"
+QB_DTB:qemuarm64 = "${IMAGE_NAME}.qemuboot.dtb"
+QB_DTB_LINK:qemuarm64 = "${IMAGE_LINK_NAME}.qemuboot.dtb"
+
+# 32-bit Arm: qemuboot with a device tree binary
+QB_DTB:qemuarm = "${IMAGE_NAME}.qemuboot.dtb"
+QB_DTB_LINK:qemuarm = "${IMAGE_LINK_NAME}.qemuboot.dtb"
--
2.25.1