构建XEN on ARM开发环境
为了学习了解嵌入式虚拟化的技术,记录一下自己折腾的经历以及搭建验证开发环境的坑。
- Target Platform: Rock960c
- ARCH: arm64
- Linux Kernel: linux-4.19.114
交叉编译工具
1 | wget http://releases.linaro.org/components/toolchain/binaries/7.2-2017.11/aarch64-linux-gnu/gcc-linaro-7.2.1-2017.11-x86_64_aarch64-linux-gnu.tar.xz |
修改环境变量PATH,使工具方便使用
1
vim ~/.bashrc
在文件末尾添加如下内容
1
export PATH=$PATH:/path/to/toolchains/gcc-linaro-7.2.1-2017.11-x86_64_aarch64-linux-gnu/bin
注意:根据实际情况,确保路径设置正确
验证
1
aarch64-linux-gnu-gcc -v
在终端会输出aarch64-linux-gnu-gcc的配置及版本信息
配置和编译XEN
下载xen-4.13.0源代码
1 | git clone https://github.com/chasinglulu/xen.git -b rock960c-xen |
在上面的分支内我已经为Rock960C开发板支持了earlyprintk
功能,方便后面我通过输出进行调试和分析。下面给你了使能earlyprinkt
功能的补丁:
1 | commit 4c0e2f50c9114510c04ec42aeaffff9f15f51807 |
配置Hypervisor
1 | cd xen |
编译Hypervisor
1 | cd ../ |
利用mkimage工具制作uboot能够启动加载的Image
1 | mkimage -A arm64 -T kernel -a 0x02000000 -e 0x02000000 -C none -d ./xen/xen xen-4.13.0-uImage |
至此,我们已经完成Xen的配置与编译,等下面的内核和文件系统编译生成后,我们就能够进行不断重复的调试验证过程。
构建dom0 kernel
获取内核源代码
1 | git clone https://github.com/chasinglulu/linux.git -b longterm-4.19 |
运行调试
Bootloader
ARM64 Xen在被Bootload启动引导时必须要以EL2模式执行。Rock960C开发板默认携带的u-boot已经能友好地启动XEN,而且uboot也不是本文的重点,因此不再详细说明uboot的编译构建。如果要的话,使用Rockchip提供的rockchip-linux/u-boot github更新u-boot,构建方法参考rockchip-linux/u-boot github README。
参考
Xen ARM with Virtualization Extensions/Ibox3399
Xen ARM with Virtualization Extensions