Xen ARM with Virtualization Extensions/Stout: Difference between revisions
Otyshchenko (talk | contribs) |
Otyshchenko (talk | contribs) |
||
(30 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
This |
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: |
Main information how to deal with Stout board are located at: |
||
Line 9: | Line 9: | ||
== Get U-Boot sources == |
== Get U-Boot sources == |
||
Clone sources from upstream and checkout on commit 425c0a43fbbec36571f6a03b530695b8b16a841d |
Clone sources from upstream and checkout on commit 425c0a43fbbec36571f6a03b530695b8b16a841d |
||
“Prepare v2019.01-rc3”: |
|||
<pre> |
<pre> |
||
git clone git://git.denx.de/u-boot.git |
git clone git://git.denx.de/u-boot.git |
||
Line 44: | Line 44: | ||
Copy resulting images to tftp directory for the future flashing: |
Copy resulting images to tftp directory for the future flashing: |
||
<pre> |
<pre> |
||
sudo cp u-boot.img <path_to_tftp_dir>/ |
sudo cp u-boot.img <path_to_tftp_dir>/ |
||
Line 50: | Line 49: | ||
</pre> |
</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.