飞腾CPU运行jailhouse虚拟化

1.概述

Jailhouse是一个基于Linux的分区虚拟机管理器,一旦激活就完全控制硬件。Jailhouse使用被称为cell的方式来配置CPU等硬件的虚拟化特性,cell是系统硬件资源的描述,使用C语言语法来描述。Cell分为root cell和non-root cell,root cell接管系统硬件资源,只有一个;non-root cell可以有多个,并且从root cell中获取系统资源,可独占或与root cell共享。

Jailhouse编译完成后,生成文件分为三部分:第一部分,Jailhouse驱动和hypervisor固件,这部分提供用户态接口并初始化hypervisor;第二部分,cell和guest镜像,cell是镜像运行所需的系统资源的描述;guest镜像运行在cell之上,包括裸机,RTOS和Linux内核镜像等;第三部分,用户态工具,通过这些工具加载cell,运行镜像,查看Jailhouse状态等。

2 编译

(1)通过gitee或是正式技术支持渠道获取内核源码,需要注意内核版本和目标机环境运行的内核版本应保持一致,且当前phytium jailhouse支持的内核版本与phytium开源内核Phytium-Linux-Kernel一致(即Linux-kernel 4.19 和 5.10 版本),请选择使用phytium开源内核进行调测。

内核源码获取命令:

$ git clone https://gitee.com/phytium_embedded/phytium-linux-kernel.git

内核源码中D2000和FT-2000/4的设备树文件未开源,如有需要请联系飞腾嵌入式软件部获取。

(2)编译内核源码,例如在E2000上,在内核源码路径下执行make phytium_defconfig,然后执行make编译内核镜像。如果是在x86环境下编译,需要额外配置好aarch64交叉编译环境:

$ export ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
$ make phytium_defconfig
$ make

(3)获取phytium-jailhouse源码,进入到目录phytium-jailhouse/src/jailhouse/下指定内核源码路径:

$ export KDIR=~/linux_419/phytium-linux-kernel

(注:~/linux_419/phytium-linux-kernel 是本地内核源码路径)

(4)编译Jailhouse,在phytium-jailhouse/src/jailhouse/下执行make,同样,如果是在x86环境下编译,需要配置好aarch64交叉编译环境。

(5)Jailhouse中编译python脚本需要提前安装python3、python3-pip和python3-mako软件包。

(6)编译后的cell文件在jailhouse code的configs/arm64目录下,裸机程序在jailhouse code的inmates/demos/arm64目录下。

3 安装与卸载

在执行Jalhouse命令前,需要先加载jailhouse驱动模块。如果后续涉及到重新编译Jailhouse生成新的文件,则需要卸载后重新加载模块。

(1)如果是在目标机上编译,那么可直接在phytium-jailhouse/src/jailhouse/下执行:

$ rm /lib/firmware/jailhouse.bin
$ cp ./hypervisor/jailhouse.bin /lib/firmware/
$ insmod ./driver/jailhouse.ko

如果是在其它环境上编译,则需要把之前编译完后的整个Jailhouse目录拷贝至目标机上,再执行上述命令。

至此,jailhouse模块加载完成。
在这里插入图片描述

(2)卸载Jailhouse模块命令:

$ rmmod jailhouse
在这里插入图片描述

4 运行

目前在飞腾FT-2000/4、D2000和E2000上运行如下示例,本文档中测试所使用的内核版本为4.19。使用5.10内核时,需要在内核启动参数里添加内存限制:mem = 1G,否则Jailhouse将会报错。根文件系统为Ubuntu 20.04,如有需要,可联系飞腾嵌入式软件部获取。

此章节的测试实例中加载jailhouse驱动模块命令已省略,模块的安装与卸载请参考第3章节,且为了节省篇幅,本章节中测试命令若涉及到文件(包括cell文件、bin文件等),应该在命令中加入文件完整绝对路径或相对路径,例如命令

jailhouse enable d2000.cell;

实际上应该在命令中指定文件“d2000.cell”的路径,否则会报错找不到相关文件。

另外,我们的配置文件均针对FT-2000/4、D2000/E2000飞腾demo测试板进行配置并测试,若测试单板不一样,那么对应的配置文件需跟当前测试的单板保持一致。

4.1 设备树保留内存节点

Jailhouse需要保留部分内存空间,在设备树中添加如下节点,保留从0xb0000000开始的256M内存,需要注意这部分内存应与root cell配置文件中的基地址保持一致。以E2000Q为例,需要在E2000Q设备树文件pe2204.dtsi中的根节点下添加如下内容:

reserved-memory {
#address-cells = <0x00000002>;
#size-cells = <0x00000002>;
ranges;
reserved@b0000000 {
reg = <0x00000000 0xb0000000 0x00000000 0x10000000>;
no-map;
};
};

因此,目前只支持加载设备树启动的方式。

4.2 裸机程序

裸跑测试适用的平台包括:E2000Q、D2000、以及FT-2000/4,下面在FT-2000/4和D2000上进行演示。

4.2.1 FT-2000/4测试

首先加载jailhouse驱动模块,再加载root cell和non-root cell,在FT-2000/4板卡上,ft2004.cell为root cell,主要接管整个系统,ft2004-inmate-demo.cell为non-root cell,从root cell中获取一部分系统资源(共享或者独占),分配给后续加载的裸机程序;最后加载并运行的裸机程序,命令序列和运行效果如下图所示。

jailhouse enable ft2004.cell;

jailhouse cell create ft2004-inmate-demo.cell;

jailhouse cell load 1 uart-demo.bin;

jailhouse cell start 1;

在这里插入图片描述

4.2.2 D2000测试

4.2.2.1 UART测试

D2000和FT-2000/4板卡命令序列一致,首先加载jailhouse驱动模块,然后加载D2000的root cell和non-root cell,non-root cell从root cell分配一部分系统资源,给到后续加载的裸机程序,命令序列和运行效果如下图所示:
#jailhouse enable d2000.cell;
#jailhouse cell create d2000-inmate-demo.cell;
#jailhouse cell load 1 uart-demo.bin;
#jailhouse cell start 1;
在这里插入图片描述

4.2.2.2 IVSHMEM测试

首先加载jailhouse驱动模块,然后加载D2000的root cell和non-root cell,non-root cell从root cell分配一部分系统资源,给到后续加载的ivshmem测试程序,命令序列和运行效果如下图所示:

#jailhouse enable d2000.cell;
#jailhouse cell create d2000-ivshmem-demo.cell;
#jailhouse cell load 1 ivshmem-demo.bin;
#jailhouse cell start 1;
在这里插入图片描述

  • 31
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值