Xen ARM with Virtualization Extensions/Stout: Difference between revisions

From Xen
Jump to navigationJump to search
(Created page with "WIP Category:XenARM Category:Developers")
 
 
(32 intermediate revisions by the same user not shown)
Line 1: Line 1:
This Wiki describes how to run Xen on Renesas Stout board with R-Car H2 SoC.
WIP

Main information how to deal with Stout board are located at:
https://elinux.org/R-Car/Boards/Yocto
https://elinux.org/R-Car/Boards/Stout

= Prepare U-boot =

== Get U-Boot sources ==

Clone sources from upstream and checkout on commit 425c0a43fbbec36571f6a03b530695b8b16a841d
“Prepare v2019.01-rc3”:
<pre>
git clone git://git.denx.de/u-boot.git
cd u-boot
git checkout 425c0a43fbbec36571f6a03b530695b8b16a841d -b stout_uboot
</pre>

== Apply additional patches ==

Apply the following patch series (PSCI support for r8a7790 SoC):
http://u-boot.10912.n7.nabble.com/PATCH-0-3-PSCI-support-for-r8a7790-SoC-Lager-Stout-boards-td357352.html

== Configure U-Boot ==

<pre>
export CROSS_COMPILE=<path_to_gcc>
make stout_defconfig
make menuconfig
</pre>

Set maximum supported CPUs for PSCI to 8:
<pre>
ARM architecture --->
[*] Enable support for booting in non-secure mode
(8) Maximum supported CPUs for PSCI
</pre>

== Build U-Boot ==

<pre>
make
</pre>

Copy resulting images to tftp directory for the future flashing:
<pre>
sudo cp u-boot.img <path_to_tftp_dir>/
sudo cp spl/u-boot-spl.bin <path_to_tftp_dir>/
</pre>

= Prepare Xen =

== Get Xen sources ==

Clone sources from upstream and checkout on commit 2e9f5f726285deee96d7d9f89ce5680a0101111a “xen/device-tree: Add ability to handle nodes with interrupts-extended prop”:
<pre>
git clone git://xenbits.xenproject.org/xen.git
cd xen
git checkout 2e9f5f726285deee96d7d9f89ce5680a0101111a -b stout_xen
</pre>

== Configure Xen ==

<pre>
export CROSS_COMPILE=<path_to_gcc>
XEN_TARGET_ARCH=arm32 ./configure
cd xen
make menuconfig XEN_TARGET_ARCH=arm32
</pre>

Enable debugging option:
<pre>
Debugging Options --->
[*] Developer Checks
</pre>

== Build Xen ==

With earlyprintk support:
<pre>
cd ../
make xen XEN_TARGET_ARCH=arm32 debug=y CONFIG_EARLY_PRINTK=scif,0xe6c40000,A
</pre>

- or -

Without earlyprintk support:
<pre>
cd ../
make xen XEN_TARGET_ARCH=arm32 debug=y
</pre>

Make Xen uImage:
<pre>
mkimage -A arm -C none -T kernel -a 0x48000000 -e 0x48000000 -n "XEN" -d xen/xen xen-uImage
</pre>

Build xenpolicy:
<pre>
make -C tools/flask/policy
</pre>

Copy resulting images to micro SD card (prepared beforehand):
<pre>
sudo cp xen-uImage <path_to_sd_card_partition>/boot/
sudo cp tools/flask/policy/xenpolicy* <path_to_sd_card_partition>/boot/xenpolicy
</pre>

= Prepare Dom0 Linux and Host DT =

== Get Linux sources ==

Clone sources from upstream and checkout on v5.3-rc2 tag:
<pre>
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
cd linux
git checkout v5.3-rc2 -b stout_linux
</pre>

== Apply additional patches ==

Apply the following patch (minimal Host DT needed to run Xen):
<pre>
diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
index f4f5aea..d7e0419 100644
--- a/arch/arm/boot/dts/Makefile
+++ b/arch/arm/boot/dts/Makefile
@@ -869,6 +869,7 @@ dtb-$(CONFIG_ARCH_RENESAS) += \
r8a7779-marzen.dtb \
r8a7790-lager.dtb \
r8a7790-stout.dtb \
+ r8a7790-stout-host.dtb \
r8a7791-koelsch.dtb \
r8a7791-porter.dtb \
r8a7792-blanche.dtb \
diff --git a/arch/arm/boot/dts/r8a7790-stout-host.dts b/arch/arm/boot/dts/r8a7790-stout-host.dts
new file mode 100644
index 0000000..8ef19dd
--- /dev/null
+++ b/arch/arm/boot/dts/r8a7790-stout-host.dts
@@ -0,0 +1,36 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Device Tree Source for the Stout board running XEN hypervisor
+ *
+ * Copyright (C) 2018 EPAM Systems Inc.
+ */
+
+#include "r8a7790-stout.dts"
+
+/ {
+ model = "Stout board, running XEN hypervisor";
+ compatible = "renesas,stout", "renesas,r8a7790";
+
+ chosen {
+ bootargs = "dom0_mem=768M console=dtuart dtuart=serial0 dom0_vcpus_pin hmp-unsafe=true dom0_max_vcpus=8 bootscrub=0 loglvl=all";
+ /delete-property/stdout-path;
+ xen,dom0-bootargs = "console=hvc0 ignore_loglevel root=/dev/mmcblk0p1 rootfstype=ext3 rw rootwait clk_ignore_unused";
+
+ modules {
+ #address-cells = <2>;
+ #size-cells = <2>;
+ module@1 {
+ compatible = "xen,linux-zimage", "xen,multiboot-module";
+ reg = <0x0 0x72000000 0x0 0x02000000>;
+ };
+ module@2 {
+ compatible = "xen,xsm-policy", "xen,multiboot-module";
+ reg = <0x0 0x74000000 0x0 0x10000>;
+ };
+ };
+ };
+};
+
+&scifa0 {
+ /delete-property/clocks;
+};
</pre>

== Configure Linux ==

Use default "shmobile_defconfig" as the base config:
<pre>
export CROSS_COMPILE=<path_to_gcc>
make ARCH=arm shmobile_defconfig
</pre>

Add the following config entries in .config:
<pre>
CONFIG_ARM_PSCI=y
CONFIG_XEN=y
CONFIG_XEN_DOM0=y
CONFIG_HVC_XEN=y
CONFIG_HVC_XEN_FRONTEND=y
# CONFIG_XEN_WDT is not set
CONFIG_XEN_DEV_EVTCHN=y
CONFIG_XEN_BACKEND=y
CONFIG_XENFS=y
CONFIG_XEN_COMPAT_XENFS=y
CONFIG_XEN_SYS_HYPERVISOR=y
CONFIG_XEN_XENBUS_FRONTEND=y
CONFIG_XEN_GNTDEV=y
CONFIG_XEN_GRANT_DEV_ALLOC=y
CONFIG_XEN_PRIVCMD=y
CONFIG_XEN_BLKDEV_BACKEND=y
CONFIG_XEN_NETDEV_BACKEND=y
</pre>

== Build Linux and DT ==

<pre>
LOADADDR=0x48000000 make ARCH=arm uImage dtbs
</pre>

Copy resulting images to SD card (prepared beforehand):
<pre>
sudo cp arch/arm/boot/dts/r8a7790-stout-host.dtb <path_to_sd_card_partition>/boot/
sudo cp arch/arm/boot/uImage <path_to_sd_card_partition>/boot/
</pre>

= Run images =

== Flash U-Boot ==

Flash U-Boot according to the instruction described here:
https://elinux.org/R-Car/Boards/U-Boot-Gen2#Flashing_U-Boot
Please note, you need to setup TFTP for this purpose.

== Setup U-Boot environment ==

Setup U-Boot environment to boot system via SD card. This is done using U-Boot CLI:
<pre>
env default -f -a
setenv dtb_load_mmc 'ext4load mmc 0:1 0x70f00000 /boot/r8a7790-stout-host.dtb'
setenv xen_load_mmc 'ext4load mmc 0:1 0x70007fc0 /boot/xen-uImage'
setenv kernel_load_mmc 'ext4load mmc 0:1 0x72000000 /boot/uImage'
setenv xenpolicy_load_mmc 'ext4load mmc 0:1 0x74000000 /boot/xenpolicy'
setenv bootcmd_xen_mmc 'run dtb_load_mmc; run xen_load_mmc; run kernel_load_mmc; run xenpolicy_load_mmc; bootm 0x70007fc0 - 0x70f00000'
setenv bootargs
setenv bootcmd 'run bootcmd_xen_mmc'
saveenv
</pre>

After rebooting the board the system (Xen + Dom0) will be started automatically if everything was done correctly.


[[Category:XenARM]]
[[Category:XenARM]]

Latest revision as of 14:14, 6 August 2019

This Wiki describes how to run Xen on Renesas Stout board with R-Car H2 SoC.

Main information how to deal with Stout board are located at: https://elinux.org/R-Car/Boards/Yocto https://elinux.org/R-Car/Boards/Stout

Prepare U-boot

Get U-Boot sources

Clone sources from upstream and checkout on commit 425c0a43fbbec36571f6a03b530695b8b16a841d “Prepare v2019.01-rc3”:

git clone git://git.denx.de/u-boot.git
cd u-boot
git checkout 425c0a43fbbec36571f6a03b530695b8b16a841d -b stout_uboot

Apply additional patches

Apply the following patch series (PSCI support for r8a7790 SoC): http://u-boot.10912.n7.nabble.com/PATCH-0-3-PSCI-support-for-r8a7790-SoC-Lager-Stout-boards-td357352.html

Configure U-Boot

export CROSS_COMPILE=<path_to_gcc>
make stout_defconfig
make menuconfig

Set maximum supported CPUs for PSCI to 8:

    ARM architecture  --->
        [*] Enable support for booting in non-secure mode
            (8) Maximum supported CPUs for PSCI

Build U-Boot

make

Copy resulting images to tftp directory for the future flashing:

sudo cp u-boot.img <path_to_tftp_dir>/
sudo cp spl/u-boot-spl.bin <path_to_tftp_dir>/

Prepare Xen

Get Xen sources

Clone sources from upstream and checkout on commit 2e9f5f726285deee96d7d9f89ce5680a0101111a “xen/device-tree: Add ability to handle nodes with interrupts-extended prop”:

git clone git://xenbits.xenproject.org/xen.git
cd xen
git checkout 2e9f5f726285deee96d7d9f89ce5680a0101111a -b stout_xen

Configure Xen

export CROSS_COMPILE=<path_to_gcc>
XEN_TARGET_ARCH=arm32 ./configure
cd xen
make menuconfig XEN_TARGET_ARCH=arm32 

Enable debugging option:

    Debugging Options  --->
        [*] Developer Checks

Build Xen

With earlyprintk support:

cd ../
make xen XEN_TARGET_ARCH=arm32 debug=y CONFIG_EARLY_PRINTK=scif,0xe6c40000,A

- or -

Without earlyprintk support:

cd ../
make xen XEN_TARGET_ARCH=arm32 debug=y

Make Xen uImage:

mkimage -A arm -C none -T kernel -a 0x48000000 -e 0x48000000 -n "XEN" -d xen/xen xen-uImage

Build xenpolicy:

make -C tools/flask/policy

Copy resulting images to micro SD card (prepared beforehand):

sudo cp xen-uImage <path_to_sd_card_partition>/boot/
sudo cp tools/flask/policy/xenpolicy* <path_to_sd_card_partition>/boot/xenpolicy

Prepare Dom0 Linux and Host DT

Get Linux sources

Clone sources from upstream and checkout on v5.3-rc2 tag:

git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
cd linux
git checkout v5.3-rc2 -b stout_linux

Apply additional patches

Apply the following patch (minimal Host DT needed to run Xen):

diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
index f4f5aea..d7e0419 100644
--- a/arch/arm/boot/dts/Makefile
+++ b/arch/arm/boot/dts/Makefile
@@ -869,6 +869,7 @@ dtb-$(CONFIG_ARCH_RENESAS) += \
 	r8a7779-marzen.dtb \
 	r8a7790-lager.dtb \
 	r8a7790-stout.dtb \
+	r8a7790-stout-host.dtb \
 	r8a7791-koelsch.dtb \
 	r8a7791-porter.dtb \
 	r8a7792-blanche.dtb \
diff --git a/arch/arm/boot/dts/r8a7790-stout-host.dts b/arch/arm/boot/dts/r8a7790-stout-host.dts
new file mode 100644
index 0000000..8ef19dd
--- /dev/null
+++ b/arch/arm/boot/dts/r8a7790-stout-host.dts
@@ -0,0 +1,36 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Device Tree Source for the Stout board running XEN hypervisor
+ *
+ * Copyright (C) 2018 EPAM Systems Inc.
+ */
+
+#include "r8a7790-stout.dts"
+
+/ {
+	model = "Stout board, running XEN hypervisor";
+	compatible = "renesas,stout", "renesas,r8a7790";
+
+	chosen {
+		bootargs = "dom0_mem=768M console=dtuart dtuart=serial0 dom0_vcpus_pin hmp-unsafe=true dom0_max_vcpus=8 bootscrub=0 loglvl=all";
+		/delete-property/stdout-path;
+		xen,dom0-bootargs = "console=hvc0 ignore_loglevel root=/dev/mmcblk0p1 rootfstype=ext3 rw rootwait clk_ignore_unused";
+
+		modules {
+			#address-cells = <2>;
+			#size-cells = <2>;
+			module@1 {
+				compatible = "xen,linux-zimage", "xen,multiboot-module";
+				reg = <0x0 0x72000000 0x0 0x02000000>;
+			};
+			module@2 {
+				compatible = "xen,xsm-policy", "xen,multiboot-module";
+				reg = <0x0 0x74000000 0x0 0x10000>;
+			};
+		};
+	};
+};
+
+&scifa0 {
+	/delete-property/clocks;
+};

Configure Linux

Use default "shmobile_defconfig" as the base config:

export CROSS_COMPILE=<path_to_gcc>
make ARCH=arm shmobile_defconfig

Add the following config entries in .config:

CONFIG_ARM_PSCI=y
CONFIG_XEN=y
CONFIG_XEN_DOM0=y
CONFIG_HVC_XEN=y
CONFIG_HVC_XEN_FRONTEND=y
# CONFIG_XEN_WDT is not set
CONFIG_XEN_DEV_EVTCHN=y
CONFIG_XEN_BACKEND=y
CONFIG_XENFS=y
CONFIG_XEN_COMPAT_XENFS=y
CONFIG_XEN_SYS_HYPERVISOR=y
CONFIG_XEN_XENBUS_FRONTEND=y
CONFIG_XEN_GNTDEV=y
CONFIG_XEN_GRANT_DEV_ALLOC=y
CONFIG_XEN_PRIVCMD=y
CONFIG_XEN_BLKDEV_BACKEND=y
CONFIG_XEN_NETDEV_BACKEND=y

Build Linux and DT

LOADADDR=0x48000000 make ARCH=arm uImage dtbs

Copy resulting images to SD card (prepared beforehand):

sudo cp arch/arm/boot/dts/r8a7790-stout-host.dtb <path_to_sd_card_partition>/boot/
sudo cp arch/arm/boot/uImage <path_to_sd_card_partition>/boot/

Run images

Flash U-Boot

Flash U-Boot according to the instruction described here: https://elinux.org/R-Car/Boards/U-Boot-Gen2#Flashing_U-Boot Please note, you need to setup TFTP for this purpose.

Setup U-Boot environment

Setup U-Boot environment to boot system via SD card. This is done using U-Boot CLI:

env default -f -a
setenv dtb_load_mmc 'ext4load mmc 0:1 0x70f00000 /boot/r8a7790-stout-host.dtb'
setenv xen_load_mmc 'ext4load mmc 0:1 0x70007fc0 /boot/xen-uImage'
setenv kernel_load_mmc 'ext4load mmc 0:1 0x72000000 /boot/uImage'
setenv xenpolicy_load_mmc 'ext4load mmc 0:1 0x74000000 /boot/xenpolicy'
setenv bootcmd_xen_mmc 'run dtb_load_mmc; run xen_load_mmc; run kernel_load_mmc; run xenpolicy_load_mmc; bootm 0x70007fc0 - 0x70f00000'
setenv bootargs
setenv bootcmd 'run bootcmd_xen_mmc'
saveenv

After rebooting the board the system (Xen + Dom0) will be started automatically if everything was done correctly.