Xen ARM with Virtualization Extensions/Ibox3399: Difference between revisions
(Created page with "== Bootloader == For ARM64 Xen requires to be booted in EL2 mode by the bootloader. By default Rockchip RK3399 Ibox3399 development board comes with u-boot which is not very f...") |
No edit summary |
||
(2 intermediate revisions by the same user not shown) | |||
Line 58: | Line 58: | ||
== Dom0 Kernel/FDT == |
== Dom0 Kernel/FDT == |
||
TBD |
|||
git clone https://github.com/ihormatushchak/k9tripod.git |
|||
export PATH=$PATH:<path_to_aarch64_linux_android>/bin/ |
|||
cd k9tripod/ |
|||
make ARCH=arm64 x3399-xen-dom0_defconfig |
|||
make -j4 CROSS_COMPILE=aarch64-linux-android- ARCH=arm64 |
|||
After build rename file "Image" (located at arch/arm64/boot/) to "dom0-Image" and collect it at this step. |
|||
Collect x3399-dom0-development-board.dtb file (located at arch/arm64/boot/dts/rockchip/) at this step. |
|||
== Dom0 rootfs == |
|||
Let's use [https://buildroot.org/ Buildroot] to build rootfs for dom0. |
|||
git clone git://git.buildroot.net/buildroot |
|||
cd buildroot |
|||
At the moment version of buildroot was 3.0.0 |
|||
git checkout c83f2c14f8fde96bbdc1ee351d62f3b2346d20ff -b 'xen-domains-rootfs' |
|||
Configure buildroot before build: |
|||
make menuconfig |
|||
Here is minimal configuration for dom0: |
|||
Target options ---> |
|||
Target Architecture ---> |
|||
(X) AArch64 (little endian) |
|||
Target Architecture Variant ---> |
|||
(X) cortex-A72/A53 big.LITTLE |
|||
Toolchain ---> |
|||
Kernel Headers ---> |
|||
(X) Linux 4.4.x kernel headers |
|||
[*] Enable WCHAR support |
|||
System configuration ---> |
|||
Init system ---> |
|||
(X) systemV |
|||
/bin/sh ---> |
|||
(X) bash |
|||
Target packages ---> |
|||
System tools ---> |
|||
[*] xen |
|||
[ ] Xen hypervisor (NEW) |
|||
[*] Xen tools |
|||
Filesystem images ---> |
|||
[*] ext2/3/4 root filesystem |
|||
ext2/3/4 variant ---> |
|||
(X) ext2 (rev1) |
|||
(300M) exact size |
|||
[ ] tar the root filesystem |
|||
Now we can build the rootfs: |
|||
make -j4 |
|||
As a result we should get buildroot/output/images/rootfs.ext2 file here. |
|||
== Preparing SD card to boot == |
|||
Prepare SD card with next layout: |
|||
+-------------+-------------+-------------+ |
|||
| partition 1 | partition 2 | | |
|||
+-------------+-------------+-------------+ |
|||
| | | | |
|||
| 100M (vfat) | 300M (ext2) | (Unmapped) | |
|||
| | | | |
|||
+-------------+-------------+-------------+ |
|||
| boot | dom0-roots | | |
|||
+-------------+-------------+-------------+ |
|||
Format partition 1 with vfat labeled with "boot": |
|||
sudo mkfs.vfat /dev/sdX1 -n boot |
|||
NOTICE: replace /dev/sdX1 with your one. |
|||
Copy Xen and dom0 images to the boot partition (obtained in previous sections): |
|||
mount /dev/sdX1 /mnt |
|||
mkdir /mnt/boot |
|||
cp xen4.10-uImage dom0-Image x3399-dom0-development-board.dtb /mnt/boot/ |
|||
umount /mnt |
|||
NOTICE: replace /dev/sdX1 with your one. |
|||
Copy the rootfs (obtained from buildroot): |
|||
dd if=buildroot/output/images/rootfs.ext2 of=/dev/sdX2; sync |
|||
NOTICE: replace /dev/sdX2 with your one. |
|||
Now SD card ready to boot Xen with Dom0. |
|||
== Booting == |
|||
Plug in prepared SD card, power on the board and enter u-boot shell using next settings: |
|||
uart2: 1500000 8N1 |
|||
edit bootcmd var in u-boot with: |
|||
fatload mmc 1:1 0x02000000 boot/xen4.10-uImage; fatload mmc 1:1 0x01f00000 boot/x3399-dom0-development-board.dtb; fatload mmc 1:1 0x03F80000 boot/dom0-Image;bootm 0x02000000 - 0x01f00000 |
|||
Save changes |
|||
saveenv |
|||
and reboot the board. |
|||
Xen, dom0 should boot now. |
Latest revision as of 15:03, 23 August 2018
Bootloader
For ARM64 Xen requires to be booted in EL2 mode by the bootloader. By default Rockchip RK3399 Ibox3399 development board comes with u-boot which is not very friendly for booting Xen.
Please update the u-boot with provided by Rockchip rockchip-linux/u-boot github. Build instructions: rockchip-linux/u-boot github README.
Prepequairnments
u-boot-utils
Cross compilers used: gcc-linaro-7.2.1 for Xen and aarch64-linux-android-4.9 for kernel
Building Xen
Get Xen and switch to xen-4.10.1 tag:
git clone git://xenbits.xen.org/xen.git cd xen git checkout RELEASE-4.10.1 -b 'xen-rk3399'
Enable earlyprintk configuration for rk3399 boards:
diff --git a/xen/arch/arm/Rules.mk b/xen/arch/arm/Rules.mk index b66c19f..b1cf319 100644 --- a/xen/arch/arm/Rules.mk +++ b/xen/arch/arm/Rules.mk @@ -38,6 +38,7 @@ EARLY_PRINTK_lager := scif,0xe6e60000 EARLY_PRINTK_midway := pl011,0xfff36000 EARLY_PRINTK_omap5432 := 8250,0x48020000,2 EARLY_PRINTK_rcar3 := scif,0xe6e88000 +EARLY_PRINTK_rk3399 := 8250,0xff1a0000,2 EARLY_PRINTK_seattle := pl011,0xe1010000 EARLY_PRINTK_sun6i := 8250,0x01c28000,2 EARLY_PRINTK_sun7i := 8250,0x01c28000,2
Configure Hypervisor:
cd xen/xen export PATH=$PATH:<path_to_gcc-linaro>/bin/ make menuconfig CROSS_COMPILE=aarch64-linux-gnu- XEN_TARGET_ARCH=arm64
Enable debugging option:
Debugging Options ---> [*] Developer Checks
Build Hypervisor:
cd ../ make dist-xen CROSS_COMPILE=aarch64-linux-gnu- XEN_TARGET_ARCH=arm64 debug=y CONFIG_EARLY_PRINTK=rk3399
Make image suitable to be booted by u-boot:
mkimage -A arm64 -T kernel -a 0x02000000 -e 0x02000000 -C none -d ./xen/xen xen4.10-uImage
Collect xen4.10-uImage file at this step.
Dom0 Kernel/FDT
git clone https://github.com/ihormatushchak/k9tripod.git export PATH=$PATH:<path_to_aarch64_linux_android>/bin/ cd k9tripod/
make ARCH=arm64 x3399-xen-dom0_defconfig make -j4 CROSS_COMPILE=aarch64-linux-android- ARCH=arm64
After build rename file "Image" (located at arch/arm64/boot/) to "dom0-Image" and collect it at this step.
Collect x3399-dom0-development-board.dtb file (located at arch/arm64/boot/dts/rockchip/) at this step.
Dom0 rootfs
Let's use Buildroot to build rootfs for dom0.
git clone git://git.buildroot.net/buildroot cd buildroot
At the moment version of buildroot was 3.0.0
git checkout c83f2c14f8fde96bbdc1ee351d62f3b2346d20ff -b 'xen-domains-rootfs'
Configure buildroot before build:
make menuconfig
Here is minimal configuration for dom0:
Target options ---> Target Architecture ---> (X) AArch64 (little endian) Target Architecture Variant ---> (X) cortex-A72/A53 big.LITTLE Toolchain ---> Kernel Headers ---> (X) Linux 4.4.x kernel headers [*] Enable WCHAR support System configuration ---> Init system ---> (X) systemV /bin/sh ---> (X) bash Target packages ---> System tools ---> [*] xen [ ] Xen hypervisor (NEW) [*] Xen tools Filesystem images ---> [*] ext2/3/4 root filesystem ext2/3/4 variant ---> (X) ext2 (rev1) (300M) exact size [ ] tar the root filesystem
Now we can build the rootfs:
make -j4
As a result we should get buildroot/output/images/rootfs.ext2 file here.
Preparing SD card to boot
Prepare SD card with next layout:
+-------------+-------------+-------------+ | partition 1 | partition 2 | | +-------------+-------------+-------------+ | | | | | 100M (vfat) | 300M (ext2) | (Unmapped) | | | | | +-------------+-------------+-------------+ | boot | dom0-roots | | +-------------+-------------+-------------+
Format partition 1 with vfat labeled with "boot":
sudo mkfs.vfat /dev/sdX1 -n boot
NOTICE: replace /dev/sdX1 with your one.
Copy Xen and dom0 images to the boot partition (obtained in previous sections):
mount /dev/sdX1 /mnt mkdir /mnt/boot cp xen4.10-uImage dom0-Image x3399-dom0-development-board.dtb /mnt/boot/ umount /mnt
NOTICE: replace /dev/sdX1 with your one.
Copy the rootfs (obtained from buildroot):
dd if=buildroot/output/images/rootfs.ext2 of=/dev/sdX2; sync
NOTICE: replace /dev/sdX2 with your one.
Now SD card ready to boot Xen with Dom0.
Booting
Plug in prepared SD card, power on the board and enter u-boot shell using next settings:
uart2: 1500000 8N1
edit bootcmd var in u-boot with:
fatload mmc 1:1 0x02000000 boot/xen4.10-uImage; fatload mmc 1:1 0x01f00000 boot/x3399-dom0-development-board.dtb; fatload mmc 1:1 0x03F80000 boot/dom0-Image;bootm 0x02000000 - 0x01f00000
Save changes
saveenv
and reboot the board.
Xen, dom0 should boot now.