
本章节我们在
QemuX86_64虚拟机的CentOS中运行Jailhouse。
初始化运行环境:
Host $ modprobe -av 9pHost $ modprobe -av nbd max_part=8Host $ ssh -X root@`docker exec -it sysdev ip addr show eth0 | tr "/"" " |awk '$1=="inet" {print $2}'`Docker # . /opt/sysdev/sysdev_env.shDocker $ ${SYSDEV_TOOLS}/start-nat.shDocker $ ${SYSDEV_TOOLS}/test-nat.sh构建Jailhouse镜像
在CentOS虚拟机中构建Jailhouse镜像。
升级 Qemu客户机内核到4.X+版本,跟宿主机方法相同:
Guest $ rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.orgGuest $ rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpmGuest $ yum --disablerepo="*" --enablerepo="elrepo-kernel" list availableGuest $ yum --enablerepo=elrepo-kernel --skip-broken -y install kernel-ml kernel-ml-devel kernel-ml-doc kernel-ml-headers kernel-ml-tools kernel-ml-tools-libs kernel-ml-tools-libs-develGuest $ grep "menuentry " /boot/grub2/grub.cfg | awk -F"'"'{print $2}'CentOS Linux (5.3.7-1.el7.elrepo.x86_64) 7 (Core)CentOS Linux (3.10.0-957.27.2.el7.x86_64) 7 (Core)CentOS Linux (0-rescue-65113b1a0d2f6087d515e6a8cd0ee7ef) 7 (Core)Guest $ vi /etc/default/grubGRUB_DEFAULT="CentOS Linux (5.3.7-1.el7.elrepo.x86_64) 7 (Core)"Guest $ grub2-mkconfig -o /boot/grub2/grub.cfgGuest $ rebootGuest $ uname -aLinux jailhouse 5.3.7-1.el7.elrepo.x86_64 #1 SMP Thu Oct 17 18:17:07 EDT 2019 x86_64 x86_64 x86_64 GNU/Linux安装编译 Jailhouse所依赖的软件包:
Guest $ yum install -y epel-release# 需要安装Python和mako库,否则可能会导致部分命令无法正常执行:Guest $ yum install -y pythonGuest $ easy_install pipGuest $ pip install makoGuest $ yum install -y tree wget git gcc kernel-headers kernel-devel编译和安装 Jailhouse:
Guest $ mkdir -pv /opt/ahv/jailhouse && cd /opt/ahv/jailhouseGuest $ git clone https://github.com/siemens/jailhouse.gitGuest $ cd jailhouseGuest $ make# 安装到指定目录,这里仅仅是为了方便查看和分析:Guest $ make install DESTDIR=/opt/ahv/jailhouse/target# 安装到系统目录:Guest $ make install加载 Jailhouse内核模块,并进行硬件检查:
Guest $ modprobe jailhouseGuest $ jailhouse hardware checkFeature Availability------------------------------ ------------------Number of CPUs > 1 okLong mode okx2APIC okVT-x (VMX) ok VMX outside SMX ok VMX inside SMX missing (optional) IA32_TRUE_*_CLTS ok NMI exiting ok Preemption timer ok I/O bitmap ok MSR bitmap ok Secondary controls ok Optional CR3 interception ok Virtualize APIC access ok RDTSCP missing (optional) Unrestricted guest ok EPT ok 4-level page walk ok EPTP write-back ok 2M pages ok 1G pages ok INVEPT ok Single or all-context ok VM-exit save IA32_PAT ok VM-exit load IA32_PAT ok VM-exit save IA32_EFER ok VM-exit load IA32_EFER ok VM-entry load IA32_PAT ok VM-entry load IA32_EFER ok Activity state HLT okVT-d (IOMMU #0) ok 39-bit AGAW ok 48-bit AGAW missing (optional) 2M pages ok 1G pages ok Queued invalidation ok Interrupt remapping ok Extended interrupt mode okCheck passed!去掉 Qemu客户机Linux启动参数中的串口选项,并关闭虚拟机(否则可能会因为串口被占用而导致Jailhouse虚拟机无法启动):
Guest $ vi /etc/default/grub#GRUB_CMDLINE_LINUX="console=tty0 crashkernel=auto console=ttyS0,115200"GRUB_CMDLINE_LINUX="intel_iommu=off memmap=82M\\\$0x3a000000 console=tty0 crashkernel=auto"Guest $ grub2-mkconfig -o /boot/grub2/grub.cfgGuest $ poweroff再次启动虚拟机:
Host $ /usr/libexec/qemu-kvm -machine q35,kernel_irqchip=split -m 1G \-smp 2 -device intel-iommu,intremap=on,x-buggy-eim=on \-cpu kvm64,-kvm_pv_eoi,-kvm_steal_time,-kvm_asyncpf,-kvmclock,+vmx \-drive file=System-X86_64.qcow2,format=qcow2,id=disk,if=none \-device ide-hd,drive=disk -serial stdio -serial vc \-net nic,model=virtio,macaddr=fa:16:3e:4d:58:6f \-net tap,ifname=tap-jh,script=vm-ifup,downscript=vm-ifdown \-device intel-hda,addr=1b.0 -device hda-duplex -cdrom Init.iso自动生成 Jailhouse的RootCell配置,并启动虚拟机:
# 由于Linux内核不再使用串口,所以使用SSH登录虚拟机:Host $ ssh root@192.168.2.139SSH $ cd /opt/ahv/jailhouse/jailhouseSSH $ jailhouse config create configs/x86/qemu-x86_64.cSSH $ makeSSH $ modprobe jailhouseSSH $ jailhouse enable configs/x86/qemu-x86_64.cell在 Qemu虚拟机的串口控制台以和SSH控制台可以看到Jailhouse的输出,虚拟机启动成功:
# SerialInitializing Jailhouse hypervisor v0.11 (40-g90e8d6c-dirty) on CPU 1Code location: 0xfffffffff0000050Using x2APICPage pool usage after early setup: mem 35/974, remap 0/131072Initializing processors: CPU 1... (APIC ID 1) OK CPU 0... (APIC ID 0) OKInitializing unit: VT-dDMAR unit @0xfed90000/0x1000Reserving 24 interrupt(s) for device ff:00.0 at index 0Initializing unit: IOAPICInitializing unit: Cache Allocation TechnologyInitializing unit: PCIAdding PCI device 00:00.0 to cell "RootCell"Adding PCI device 00:01.0 to cell "RootCell"Adding PCI device 00:02.0 to cell "RootCell"Reserving 3 interrupt(s) for device 00:02.0 at index 24Adding PCI device 00:1b.0 to cell "RootCell"Reserving 1 interrupt(s) for device 00:1b.0 at index 27Adding PCI device 00:1f.0 to cell "RootCell"Adding PCI device 00:1f.2 to cell "RootCell"Reserving 1 interrupt(s) for device 00:1f.2 at index 28Adding PCI device 00:1f.3 to cell "RootCell"qemu-kvm: vtd_irte_get: detected non-present IRTE (index=0, high=0xff00, low=0x100)Page pool usage after late setup: mem 248/974, remap 65542/131072Activating hypervisorSSH $ jailhouse consoleInitializing Jailhouse hypervisor v0.11 (40-g90e8d6c-dirty) on CPU 1Code location: 0xfffffffff0000050Using x2APICPage pool usage after early setup: mem 35/974, remap 0/131072Initializing processors: CPU 1... (APIC ID 1) OK CPU 0... (APIC ID 0) OKInitializing unit: VT-dDMAR unit @0xfed90000/0x1000Reserving 24 interrupt(s) for device ff:00.0 at index 0Initializing unit: IOAPICInitializing unit: Cache Allocation TechnologyInitializing unit: PCIAdding PCI device 00:00.0 to cell "RootCell"Adding PCI device 00:01.0 to cell "RootCell"Adding PCI device 00:02.0 to cell "RootCell"Reserving 3 interrupt(s) for device 00:02.0 at index 24Adding PCI device 00:1b.0 to cell "RootCell"Reserving 1 interrupt(s) for device 00:1b.0 at index 27Adding PCI device 00:1f.0 to cell "RootCell"Adding PCI device 00:1f.2 to cell "RootCell"Reserving 1 interrupt(s) for device 00:1f.2 at index 28Adding PCI device 00:1f.3 to cell "RootCell"Page pool usage after late setup: mem 248/974, remap 65542/131072Activating hypervisor配置系统环境
宿主机使用IntelCPU和CentOS( 7.6.1908X86_64)发行版。
开启宿主机硬件虚拟化支持
在 BIOS中开启IntelVT-x/VT-d虚拟化支持,打开成功时可以看到CPU的vmx特性支持:
$ cat /proc/cpuinfo | grep vmxflags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch ssbd ibrs ibpb stibp tpr_shadow vnmi ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 invpcid rtm mpx rdseed adx smap clflushopt xsaveopt xsavec arat spec_ctrl intel_stibp flush_l1d arch_capabilitiesflags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch ssbd ibrs ibpb stibp tpr_shadow vnmi ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 invpcid rtm mpx rdseed adx smap clflushopt xsaveopt xsavec arat spec_ctrl intel_stibp flush_l1d arch_capabilitiesflags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch ssbd ibrs ibpb stibp tpr_shadow vnmi ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 invpcid rtm mpx rdseed adx smap clflushopt xsaveopt xsavec arat spec_ctrl intel_stibp flush_l1d arch_capabilitiesflags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch ssbd ibrs ibpb stibp tpr_shadow vnmi ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 invpcid rtm mpx rdseed adx smap clflushopt xsaveopt xsavec arat spec_ctrl intel_stibp flush_l1d arch_capabilities升级Linux内核到4.X+版本
安装第三方编译好的内核:
$ rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org$ yum install -y https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm# yum --disablerepo="*" --enablerepo="elrepo-kernel" list available$ yum --enablerepo=elrepo-kernel --skip-broken -y install kernel-ml kernel-ml-devel kernel-ml-doc kernel-ml-headers kernel-ml-tools kernel-ml-tools-libs kernel-ml-tools-libs-devel修改默认启动内核版本:
$ grep "menuentry " /boot/grub2/grub.cfg | awk -F"'"'{print $2}'CentOS Linux (5.3.7-1.el7.elrepo.x86_64) 7 (Core)CentOS Linux (3.10.0-1062.1.2.el7.x86_64) 7 (Core)CentOS Linux (0-rescue-a922db9ab47c4a278e33b55f7b8d56b4) 7 (Core)$ vi /etc/default/grubGRUB_DEFAULT="CentOS Linux (5.3.7-1.el7.elrepo.x86_64) 7 (Core)"$ grub2-mkconfig -o /boot/grub2/grub.cfg重启并查看升级是否成功:
$ reboot$ uname -aLinux CentOS7-LR 5.3.7-1.el7.elrepo.x86_64 #1 SMP Thu Oct 17 18:17:07 EDT 2019 x86_64 x86_64 x86_64 GNU/Linux开启内核硬件虚拟化支持
修改启动参数,增加 Intel硬件虚拟化支持:
$ vi /etc/default/grubGRUB_CMDLINE_LINUX="intel_iommu=on iommu=pt crashkernel=auto rhgb quiet net.ifnames=0 biosdevname=0"$ grub2-mkconfig -o /boot/grub2/grub.cfg重启并查看修改是否成功:
$ reboot$ cat /proc/cmdlineBOOT_IMAGE=/boot/vmlinuz-3.10.0-1062.1.2.el7.x86_64 root=UUID=5801d8e4-8cc9-4a57-920f-ef58fbd0de40 ro intel_iommu=on iommu=pt net.ifnames=0 biosdevname=0 crashkernel=auto spectre_v2=retpoline rhgb quiet LANG=zh_CN.UTF-8$ uname -aLinux MiBook-LR 5.3.7-1.el7.elrepo.x86_64 #1 SMP Thu Oct 17 18:17:07 EDT 2019 x86_64 x86_64 x86_64 GNU/Linux查看内核中的 IOMMU是否正确初始化,如果成功则会有如下信息:
$ dmesg | grep -e DMAR -e IOMMU[ 0.030112] ACPI: DMAR 0x000000008CFB0000 0000F0 (v01 XMCC XMCC1701 00000001 ACPI 00040000)[ 0.169366] DMAR: Host address width 39[ 0.169367] DMAR: DRHD base: 0x000000fed90000 flags: 0x0[ 0.169374] DMAR: dmar0: reg_base_addr fed90000 ver 1:0 cap 1c0000c40660462 ecap 19e2ff0505e[ 0.169375] DMAR: DRHD base: 0x000000fed91000 flags: 0x1[ 0.169380] DMAR: dmar1: reg_base_addr fed91000 ver 1:0 cap d2008c40660462 ecap f050da[ 0.169381] DMAR: RMRR base: 0x0000008ae55000 end: 0x0000008ae74fff[ 0.169382] DMAR: RMRR base: 0x0000008d800000 end: 0x0000008fffffff[ 0.169383] DMAR: ANDD device: 1 name: \_SB.PCI0.I2C0[ 0.169384] DMAR: ANDD device: 2 name: \_SB.PCI0.I2C1[ 0.169386] DMAR-IR: IOAPIC id 2 under DRHD base 0xfed91000 IOMMU 1[ 0.169387] DMAR-IR: HPET id 0 under DRHD base 0xfed91000[ 0.169388] DMAR-IR: Queued invalidation will be enabled to support x2apic and Intr-remapping.[ 0.171026] DMAR-IR: Enabled IRQ remapping in x2apic mode[ 1.401327] DMAR: ACPI device "device:70" under DMAR at fed91000 as 00:15.0[ 1.401331] DMAR: ACPI device "device:71" under DMAR at fed91000 as 00:15.1[root@MiBook-LR jailhouse]# uname -aLinux MiBook-LR 5.3.7-1.el7.elrepo.x86_64 #1 SMP Thu Oct 17 18:17:07 EDT 2019 x86_64 x86_64 x86_64 GNU/Linux查看 IOMMU分组是否正常,如果目录非空则表明分组成功(可选):
$ ls /sys/kernel/iommu_groups/0 1 2 3 4 5 6 7 8 9开启KVM嵌套虚拟化支持
通过修改kvm_intel模块参数为KVM增加嵌套虚拟化支持(部分可能不会生效):
$ cat /sys/module/kvm_intel/parameters/nestedN$ vi /usr/lib/modprobe.d/kvm_intel.confoptions kvm_intel nested=1options kvm_intel enable_shadow_vmcs=1options kvm_intel enable_apicv=1options kvm_intel ept=1$ modprobe -r kvm_intel && modprobe -a kvm_intel$ cat /sys/module/kvm_intel/parameters/nestedY安装虚拟机相关软件包
安装第额外的虚拟化软件包仓库源:
$ yum install -y epel-release$ yum install -y centos-release-qemu-ev安装并查看 Qemu和KVM软件包:
$ yum install -y qemu-kvm-ev$ /usr/libexec/qemu-kvm --versionQEMU emulator version 2.12.0 (qemu-kvm-ev-2.12.0-33.1.el7)Copyright (c) 2003-2017 Fabrice Bellard and the QEMU Project developers$ /bin/qemu-img --versionqemu-img version 2.12.0 (qemu-kvm-ev-2.12.0-33.1.el7)Copyright (c) 2003-2017 Fabrice Bellard and the QEMU Project developers安装 libvirt以一些工具包(可以方便的进行虚拟机管理和镜像制作):
$ yum install -y libvirt libguestfs-tools libguestfs-xfs genisoimage$ systemctl enable libvirtd && systemctl start libvirtd && systemctl status libvirtd编译Jailhouse虚拟机
升级 Qemu客户机内核到4.X+版本,跟宿主机方法相同:
Guest $ rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.orgGuest $ rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpmGuest $ yum --disablerepo="*" --enablerepo="elrepo-kernel" list availableGuest $ yum --enablerepo=elrepo-kernel --skip-broken -y install kernel-ml kernel-ml-devel kernel-ml-doc kernel-ml-headers kernel-ml-tools kernel-ml-tools-libs kernel-ml-tools-libs-develGuest $ grep "menuentry " /boot/grub2/grub.cfg | awk -F"'"'{print $2}'CentOS Linux (5.3.7-1.el7.elrepo.x86_64) 7 (Core)CentOS Linux (3.10.0-957.27.2.el7.x86_64) 7 (Core)CentOS Linux (0-rescue-65113b1a0d2f6087d515e6a8cd0ee7ef) 7 (Core)Guest $ vi /etc/default/grubGRUB_DEFAULT="CentOS Linux (5.3.7-1.el7.elrepo.x86_64) 7 (Core)"Guest $ grub2-mkconfig -o /boot/grub2/grub.cfgGuest $ rebootGuest $ uname -aLinux jailhouse 5.3.7-1.el7.elrepo.x86_64 #1 SMP Thu Oct 17 18:17:07 EDT 2019 x86_64 x86_64 x86_64 GNU/Linux安装编译 Jailhouse所依赖的软件包:
Guest $ yum install -y epel-release# 需要安装Python和mako库,否则可能会导致部分命令无法正常执行:Guest $ yum install -y pythonGuest $ easy_install pipGuest $ pip install makoGuest $ yum install -y tree wget git gcc kernel-headers kernel-devel编译和安装 Jailhouse:
Guest $ mkdir -pv /opt/ahv/jailhouse && cd /opt/ahv/jailhouseGuest $ git clone https://github.com/siemens/jailhouse.gitGuest $ cd jailhouseGuest $ make# 安装到指定目录,这里仅仅是为了方便查看和分析:Guest $ make install DESTDIR=/opt/ahv/jailhouse/target# 安装到系统目录:Guest $ make install查看 Jailhouse生成的目标文件:
Guest $ tree /opt/ahv/jailhouse/target//opt/ahv/jailhouse/target/|-- lib| |-- firmware| | |-- jailhouse-amd.bin| | `-- jailhouse-intel.bin| `-- modules| `-- 5.3.7-1.el7.elrepo.x86_64| |-- extra| | `-- driver| | `-- jailhouse.ko| |-- modules.alias| |-- modules.alias.bin| |-- modules.builtin.bin| |-- modules.dep| |-- modules.dep.bin| |-- modules.devname| |-- modules.softdep| |-- modules.symbols| `-- modules.symbols.bin`-- usr |-- lib | `-- python2.7 | `-- site-packages | |-- pyjailhouse | | |-- cell.py | | |-- cell.pyc | | |-- extendedenum.py | | |-- extendedenum.pyc | | |-- __init__.py | | |-- __init__.pyc | | |-- pci_defs.py | | |-- pci_defs.pyc | | |-- sysfs_parser.py | | `-- sysfs_parser.pyc | `-- pyjailhouse-0.11_-py2.7.egg-info | |-- dependency_links.txt | |-- installed-files.txt | |-- PKG-INFO | |-- SOURCES.txt | `-- top_level.txt |-- local | |-- libexec | | `-- jailhouse | | |-- jailhouse-cell-linux | | |-- jailhouse-cell-stats | | |-- jailhouse-config-create | | |-- jailhouse-hardware-check | | `-- linux-loader.bin | |-- sbin | | `-- jailhouse | `-- share | |-- jailhouse | | |-- jailhouse-config-collect.tmpl | | `-- root-cell-config.c.tmpl | `-- man | `-- man8 | |-- jailhouse.8 | |-- jailhouse-cell.8 | `-- jailhouse-enable.8 `-- share `-- bash-completion `-- completions `-- jailhouse23 directories, 39 files运行Jailhouse虚拟机
加载 Jailhouse内核模块,并进行硬件检查:
Guest $ modprobe jailhouseGuest $ jailhouse hardware checkFeature Availability------------------------------ ------------------Number of CPUs > 1 okLong mode okx2APIC okVT-x (VMX) ok VMX outside SMX ok VMX inside SMX missing (optional) IA32_TRUE_*_CLTS ok NMI exiting ok Preemption timer ok I/O bitmap ok MSR bitmap ok Secondary controls ok Optional CR3 interception ok Virtualize APIC access ok RDTSCP missing (optional) Unrestricted guest ok EPT ok 4-level page walk ok EPTP write-back ok 2M pages ok 1G pages ok INVEPT ok Single or all-context ok VM-exit save IA32_PAT ok VM-exit load IA32_PAT ok VM-exit save IA32_EFER ok VM-exit load IA32_EFER ok VM-entry load IA32_PAT ok VM-entry load IA32_EFER ok Activity state HLT okVT-d (IOMMU #0) ok 39-bit AGAW ok 48-bit AGAW missing (optional) 2M pages ok 1G pages ok Queued invalidation ok Interrupt remapping ok Extended interrupt mode okCheck passed!去掉 Qemu客户机Linux启动参数中的串口选项,并关闭虚拟机(否则可能会因为串口被占用而导致Jailhouse虚拟机无法启动):
Guest $ vi /etc/default/grub#GRUB_CMDLINE_LINUX="console=tty0 crashkernel=auto console=ttyS0,115200"GRUB_CMDLINE_LINUX="intel_iommu=off memmap=82M\\\$0x3a000000 console=tty0 crashkernel=auto"Guest $ grub2-mkconfig -o /boot/grub2/grub.cfgGuest $ poweroff再次启动虚拟机:
Host $ /usr/libexec/qemu-kvm -machine q35,kernel_irqchip=split -m 1G \-smp 2 -device intel-iommu,intremap=on,x-buggy-eim=on \-cpu kvm64,-kvm_pv_eoi,-kvm_steal_time,-kvm_asyncpf,-kvmclock,+vmx \-drive file=System-X86_64.qcow2,format=qcow2,id=disk,if=none \-device ide-hd,drive=disk -serial stdio -serial vc \-net nic,model=virtio,macaddr=fa:16:3e:4d:58:6f \-net tap,ifname=tap-jh,script=vm-ifup,downscript=vm-ifdown \-device intel-hda,addr=1b.0 -device hda-duplex -cdrom Init.iso自动生成 Jailhouse的RootCell配置,并启动虚拟机:
# 由于Linux内核不再使用串口,所以使用SSH登录虚拟机:Host $ ssh root@192.168.2.139SSH $ cd /opt/ahv/jailhouse/jailhouseSSH $ jailhouse config create configs/x86/qemu-x86_64.cSSH $ makeSSH $ modprobe jailhouseSSH $ jailhouse enable configs/x86/qemu-x86_64.cell在 Qemu虚拟机的串口控制台以和SSH控制台可以看到Jailhouse的输出,虚拟机启动成功:
# SerialInitializing Jailhouse hypervisor v0.11 (40-g90e8d6c-dirty) on CPU 1Code location: 0xfffffffff0000050Using x2APICPage pool usage after early setup: mem 35/974, remap 0/131072Initializing processors: CPU 1... (APIC ID 1) OK CPU 0... (APIC ID 0) OKInitializing unit: VT-dDMAR unit @0xfed90000/0x1000Reserving 24 interrupt(s) for device ff:00.0 at index 0Initializing unit: IOAPICInitializing unit: Cache Allocation TechnologyInitializing unit: PCIAdding PCI device 00:00.0 to cell "RootCell"Adding PCI device 00:01.0 to cell "RootCell"Adding PCI device 00:02.0 to cell "RootCell"Reserving 3 interrupt(s) for device 00:02.0 at index 24Adding PCI device 00:1b.0 to cell "RootCell"Reserving 1 interrupt(s) for device 00:1b.0 at index 27Adding PCI device 00:1f.0 to cell "RootCell"Adding PCI device 00:1f.2 to cell "RootCell"Reserving 1 interrupt(s) for device 00:1f.2 at index 28Adding PCI device 00:1f.3 to cell "RootCell"qemu-kvm: vtd_irte_get: detected non-present IRTE (index=0, high=0xff00, low=0x100)Page pool usage after late setup: mem 248/974, remap 65542/131072Activating hypervisorSSH $ jailhouse consoleInitializing Jailhouse hypervisor v0.11 (40-g90e8d6c-dirty) on CPU 1Code location: 0xfffffffff0000050Using x2APICPage pool usage after early setup: mem 35/974, remap 0/131072Initializing processors: CPU 1... (APIC ID 1) OK CPU 0... (APIC ID 0) OKInitializing unit: VT-dDMAR unit @0xfed90000/0x1000Reserving 24 interrupt(s) for device ff:00.0 at index 0Initializing unit: IOAPICInitializing unit: Cache Allocation TechnologyInitializing unit: PCIAdding PCI device 00:00.0 to cell "RootCell"Adding PCI device 00:01.0 to cell "RootCell"Adding PCI device 00:02.0 to cell "RootCell"Reserving 3 interrupt(s) for device 00:02.0 at index 24Adding PCI device 00:1b.0 to cell "RootCell"Reserving 1 interrupt(s) for device 00:1b.0 at index 27Adding PCI device 00:1f.0 to cell "RootCell"Adding PCI device 00:1f.2 to cell "RootCell"Reserving 1 interrupt(s) for device 00:1f.2 at index 28Adding PCI device 00:1f.3 to cell "RootCell"Page pool usage after late setup: mem 248/974, remap 65542/131072Activating hypervisor如果喜欢,请麻烦点个关注,会更快的更新!

夜雨聆风