# Phytium-Xen **Repository Path**: MrChaosCodecloud/phytium-xen ## Basic Information - **Project Name**: Phytium-Xen - **Description**: 基于飞腾CPU移植的Xen 4.15示例。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 3 - **Created**: 2022-09-22 - **Last Updated**: 2022-09-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 1 概述 Xen是Type-1型虚拟机监视器,可以运行在x86和具有虚拟化扩展的ARM平台上,包括ARMv8和一些ARMv7处理器。Xen对ARM平台的支持始于2008年,在2013年首次发布,2015年支持armv8多核扩展特性。 Xen提供了在同一台计算机上承载多个操作系统的能力。Xen可以运行多个客户机操作系统,每个客户机操作系统与Xen交互,就像它与真实硬件交互一样。Xen为每个虚拟机创建内存分区,其他虚拟机无法访问本机内存,除非被授予特殊权限。Xen也控制虚拟机占用的CPU核数和时间等资源,防止虚拟机占用所有的系统资源。 作为系统中最底层的软件,Xen一般通过U-Boot这样的引导程序加载运行。初始化之后,Xen立即启动第一个虚拟机,称为dom0。dom0在系统中充当Xen的代理,是管理程序操作和启动所必需的。通过dom0,系统开发人员可以控制虚拟机的启动、暂停或关闭。默认情况下,dom0可以访问所有系统资源。dom0以外的虚拟机通常称为domu。 # 2 系统构建 ## 2.1 软硬件依赖 Xen的编译运行均在飞腾FT2000/4上,Xen的版本为4.15.1,测试内核版本为4.19,根文件系统为Ubuntu 18.04,如有需要,可联系飞腾嵌入式软件部获取。编译Xen需要安装如下软件包: # apt install python3-dev acpica-tools uuid-dev libncurses5-dev libpixman-1-dev \ libyajl-dev libfdt-dev flex bison device-tree-compiler bridge-utils ## 2.2 内核和设备树配置 运行Xen需要如下内核配置: CONFIG_XEN_DOM0=y CONFIG_XEN=y CONFIG_XEN_BLKDEV_FRONTEND=y CONFIG_XEN_NETDEV_FRONTEND=y CONFIG_XEN_NETDEV_BACKEND=y CONFIG_INPUT_XEN_KBDDEV_FRONTEND=y CONFIG_HVC_XEN=y CONFIG_HVC_XEN_FRONTEND=y CONFIG_XEN_FBDEV_FRONTEND=y CONFIG_XEN_BALLOON=y CONFIG_XEN_SCRUB_PAGES_DEFAULT=y 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_SWIOTLB_XEN=y CONFIG_XEN_PRIVCMD=y CONFIG_XEN_EFI=y CONFIG_XEN_AUTO_XLATE=y 编译完成后生成内核和设备树: arch/arm64/boot/Image arch/arm64/boot/dts/phytium/ft2004-devboard-d4-dsk.dtb 重新编译设备树,在内部预留空间: # dtc -I dtb -O dts ft2004-devboard-d4-dsk.dtb > xen.dts # dtc -I dts -O dtb -S 0x8000 xen.dts > xen.dtb ## 2.3 编译Xen 下载Xen源码包,配置如下 # tar -xf xen-4.15.tar.gz # cd xen-4.15 # ./configure --enable-xen --enable-tools 打开config/Tools.mk,找到CONFIG\_QEMU\_XEN配置,修改成如下结果: CONFIG_QEMU_XEN := n 编译安装实用工具: # make -j4 # make install # 3 运行 ## 3.1 启动Xen和Dom0 将编译好的内核、设备树和Xen镜像放到根文件系统中,在U-BOOT中依次执行如下命令启动Xen和dom0,/chosen/module@0下的reg字段指定了dom0 Linux内核的内存位置和大小,需要根据实际加载来调整(内核大小可适当大一些,这样不用每次重新修改该字段)。 mw.l 0x28180200 0x22884444; ext4load nvme 0:4 0x90200000 /Image; ext4load nvme 0:4 0x90100000 /xen.dtb; ext4load nvme 0:4 0x93000000 /xen.efi; fdt addr 0x90100000; fdt set /chosen \#address-cells <1>; fdt set /chosen \#size-cells <1>; fdt set /chosen xen,xen-bootargs "console=dtuart dtuart=/soc/uart@28001000"; fdt set /chosen xen,dom0-bootargs "console=ttyAMA1,115200 root=/dev/nvme0n1p4 rw"; fdt mknod /chosen module@0; fdt set /chosen/module@0 compatible "xen,linux-zimage" "xen,multiboot-module"; fdt set /chosen/module@0 reg <0x90200000 0x3000000>; booti 0x93000000 - 0x90100000; 下图是Xen的启动过程和dom0的登录界面: ![](https://gitee.com/phytium_embedded/phytium-xen/raw/master/pic/xen.png) ![](https://gitee.com/phytium_embedded/phytium-xen/raw/master/pic/dom0.png) ## 3.2 Dom0系统工具配置 Dom0启动后,需要挂载Xen相关的文件系统和启动守护进程,之后才能使用xl工具查看Xen信息,动态创建和关闭虚拟机等功能,启动脚本environ.sh内容如下所示: mount -t xenfs xenfs /proc/xen mount -t tmpfs xenstore /var/lib/xenstored mkdir -p /var/run/xen xenstored --pid-file /var/run/xen/xenstored.pid xenconsoled -i --log=none --log-dir=/var/log/xen/console & xenstore-write domid 0 系统启动后使用如下命令启动即可: # source environ.sh 打印Xen系统信息: ![](https://gitee.com/phytium_embedded/phytium-xen/raw/master/pic/xl-info.png) 打印Xen中的Domain信息: ![](https://gitee.com/phytium_embedded/phytium-xen/raw/master/pic/xl-list.png) ## 3.3 运行Linux domu 创建配置文件domu.cfg,内容如下: name="domu" memory=512 kernel="/Image" ramdisk="/initrd.ext2" extra="root=/dev/ram rdinit=/linuxrc console=ttyAMA0 ramdisk_size=0x1000000" 运行Linux domu # xl create domu.cfg 查看现有的domain并连接到domu的控制台,效果如下图所示,可通过"CTRL+]"退出domu的控制台: ![](https://gitee.com/phytium_embedded/phytium-xen/raw/master/pic/xl-create.png) ![](https://gitee.com/phytium_embedded/phytium-xen/raw/master/pic/xl-console.png) 销毁domain # xl destroy domu ## 3.4 运行VxWorks domu 创建配置文件vx.cfg,内容如下: name="vxworks-dom" kernel="/root/qemu/zVxWorks.bin" memory=512 vcpus=2 运行VxWorks domu并连接到控制台,命令和效果如下所示: # xl create -c vx.cfg ![](https://gitee.com/phytium_embedded/phytium-xen/raw/master/pic/vxworks.png) # 4 虚拟网卡 可通过dom0网桥和domu配置文件vif字段为domu下的Linux添加虚拟网卡,dom0下创建网桥: # brctl addbr xenbr0 # brctl addif xenbr0 eth0 # udhcpc -i xenbr0 -b DomU配置文件: name="domu" memory=512 kernel="/Image" ramdisk="/initrd.ext2" extra="root=/dev/ram rdinit=/linuxrc console=ttyAMA0 ramdisk_size=0x1000000" vif=["bridge=xenbr0"] 创建domu后通过ifconfig查看网卡状态: ![](https://gitee.com/phytium_embedded/phytium-xen/raw/master/pic/vif.png) # 5 其他 如有需要,可联系飞腾嵌入式软件部,联系邮箱: lizongjun@phytium.com.cn shixiaofeng@phytium.com.cn