CN115686889B - Jailhouse基于ACPI使用Ivshmem的方法 - Google Patents

Jailhouse基于ACPI使用Ivshmem的方法 Download PDF

Info

Publication number
CN115686889B
CN115686889B CN202310005001.4A CN202310005001A CN115686889B CN 115686889 B CN115686889 B CN 115686889B CN 202310005001 A CN202310005001 A CN 202310005001A CN 115686889 B CN115686889 B CN 115686889B
Authority
CN
China
Prior art keywords
ivshmem
acpi
pci
uio
kernel
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202310005001.4A
Other languages
English (en)
Other versions
CN115686889A (zh
Inventor
郭皓
张远航
战茅
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Kirin Software Co Ltd
Original Assignee
Kirin Software Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Kirin Software Co Ltd filed Critical Kirin Software Co Ltd
Priority to CN202310005001.4A priority Critical patent/CN115686889B/zh
Publication of CN115686889A publication Critical patent/CN115686889A/zh
Application granted granted Critical
Publication of CN115686889B publication Critical patent/CN115686889B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Power Sources (AREA)

Abstract

Jailhouse基于ACPI使用Ivshmem的方法,包括如下步骤:准备具有uio和acpi‑configfs功能的linux内核及具有Ivshmem功能的Linux驱动;编译生成ivshmem.aml文件;得到二进制驱动vpci.ko;加载uio.ko驱动、ivshmem‑net.ko驱动、uio_ivshmem.ko驱动及vpci.ko驱动;把ivshmem.aml文件放到configfs中。本发明能够让Ivshmem功能运行在UEFI平台下的ACPI设备管理机制中,进而让Jailhouse能够在UEFI(ACPI)下通过Ivshmem功能完成HostOS与GuestOS、GuestOS与GuestOS之间的基于共享内存的通信机制。从而让Jailhouse在工控机、桌面PC、甚至是高性能服务器中具备高性能的多操作系统之间的通信机制,扩大Jailhouse应用领域。

Description

Jailhouse基于ACPI使用Ivshmem的方法
技术领域
本发明涉及基于虚拟化技术的共享内存通信技术,具体涉及Jailhouse基于ACPI使用Ivshmem的方法。
背景技术
随着芯片技术和工艺制程的进步ARM架构芯片在多年前就进入5nm时代,而X86架构芯片却长期处于28nm工艺,致使ARM架构的芯片算力越来越强、功耗却越来越低、集成度越来越高,已经在工业、IoT、服务器、桌面领域开始逐步侵蚀X86架构的市场。
在X86架构中,微软联合IBM、Intel等行业巨头推出UEFI引导方式,使操作系统能够屏蔽底层设备差异而专注操作系统本身的功能,而提供这一功能的技术就是ACPI表设备管理技术。ACPI表内置于BIOS芯片中,由设备厂商编写。在ACPI表中规定了设备的内存地址、中断响应方式、设备类型等底层细节。
由于Linux开源性质,越来越多的人参与linux开发,在嵌入式领域中,linux系统已经成为最流行的操作系统。但是linux系统在诞生之初就是为吞吐量而设计的系统,并没有做过多实时性、抢占等特性的设计,这就导致在工业控制、机器人控制、飞行控制等领域中Linux难以满足实时性要求。
为满足实时性要求业内人士做了诸多尝试,如现阶段非常主流的三种方式:Preempt_RT补丁、Xenomai、L4Linux。在这三种方式中Preempt_RT属于软实时方案,无法满足对抖动要求比较高的场景;Xenomai属于硬实时方案,但是对内核修改部分较大,且需要修改用户程序和驱动才能使用Xenomai,推广起来难度较大,维护成本也很高;L4Linux性能不如前面两种方案。
在这种情况下开始出现嵌入式虚拟化技术的研究,如ACRN、Jailhouse、Xvisor等。借助虚拟化技术可以使Linux系统和RTOS系统同时运行在同一颗芯片中。Linux系统提供人机交互功能,RTOS系统提供强实时特性。从目前来看ACRN只支持X86架构;Xvisor发展不完善;只有Jailhouse对ARM架构支持最为友善。但是在Jailhouse发展已经超过十年,很有可能在Jailhouse的设计人员眼中,并没有考虑到ARM架构会跟UEFI结合,所以Jailhouse只能支持devicetree的方式虚拟化运行Linux。但是现阶段ARM架构芯片的发展,越来越多的嵌入式设备开始使用UEFI进行系统引导,而UEFI系统引导时需要用到ACPI表进行设备管理。所以这就导致Jailhouse无法运行在ARM架构下的UEFI引导方式的平台中。
为了解决上述问题,专利《ACPI转devicetree的方法》提供了ACPI转devicetree的功能,可以让Jailhouse部署在UEFI引导下的平台中,让Jailhouse能虚拟化运行Linux系统;专利《一种Jailhouse使用ACPI实现设备隔离的方法》提供了可以让Jailhouse基于ACPI表设备管理方式的设备中隔离某些特定设备,从而让虚拟化RTOS能够以独占的方式使用某些设备,从而保证了RTOS的实时性。
目前主流的Jailhouse应用场景是,虚拟化RTOS系统通过外部低速总线实时采集数据,并上传数据到Host OS,即Linux,而Linux系统作为人机交互系统,存储数据并对外展示数据。而这些数据传输功能必须使用硬件来完成,例如共享内存、网卡、低速总线。网卡和低速总线方式进行数据传输时都需要硬件提前做好设计,给Linux和RTOS系统预留好专用的网卡和低速总线,这样推广难度就会增大。所以更合适的通信方式就是共享内存。Jailhouse软件支持的共享内存技术为Ivshmem,但是,这种技术是以devicetree作为基础进行实现的,在UEFI引导的设备中无法使用,所以需要在UEFI引导的平台中,需增加ACPI表设备管理的方式的Ivshmem技术。
虚拟化管理软件Jailhouse在ARM架构下不支持基于ACPI设备管理机制下的Ivshmem功能,无法使用在ACPI下进行RTOS与Linux的共享内存通信功能。Ivshmem技术本身同样不能在ACPI设备管理机制下运行。
发明内容
为解决已有技术存在的不足,本发明提供了一种Jailhouse基于ACPI使用Ivshmem的方法,包括如下步骤:
步骤S1:准备具有uio和acpi-configfs功能的linux内核,该内核中生成有uio.ko驱动;
步骤S2,准备具有Ivshmem功能的Linux驱动:编译二进制驱动ivshmem-net.ko及uio_ivshmem.ko;
步骤S3:编写支持基于ACPI的Ivshmem的linux内核虚拟PCI根控制器驱动vpci,得到二进制驱动vpci.ko;
步骤S4:编写支持ACPI表设备管理机制的Ivshmem二级系统描述符表(SSDT)源码ft2004pc-ivshmem.dsl,编译生成ivshmem.aml文件;
步骤S5:加载步骤S1至步骤S3中生成的uio.ko驱动、ivshmem-net.ko驱动、uio_ivshmem.ko驱动及vpci.ko驱动;
步骤S6:使用linux内核的acpi-configfs功能,把步骤S4生成的ivshmem.aml文件放到configfs中。
其中,所述步骤S1包括:
步骤S11:下载开源内核源码;
步骤S12:修改uio驱动配置为模块驱动;
步骤S13:修改acpi-configfs驱动配置为模块驱动;
步骤S14:编译步骤S11下载的内核源码,生成uio.ko、acpi-configfs.ko驱动以及最新linux内核;
步骤S15:安装步骤S14中生成的linux内核;
步骤S16:重新启动系统,选择步骤S14中安装的内核。
其中,所述步骤S2包括:
步骤S21:在开源社区中下载ivshmem-net驱动源码;
步骤S22:编译步骤S21中的驱动源码为二进制驱动ivshmem-net.ko;
步骤S23:在开源社区中下载uio_ivshmem驱动源码;
步骤S24:编译步骤S23中的驱动源码为二进制驱动uio_ivshmem.ko。
其中,所述步骤S4包括:
步骤S41:增加根作用域,描述为:DefinitionBlock ("IVSHMEM.DSL", "SSDT",1, "ARMLTD", "KYLIN ", 0x20221010);
步骤S42:在根作用域下增加设备和总线域_SB;
步骤S43:在设备和总线域_SB下增加PCI1设备;
步骤S44:在PCI1设备中增加驱动匹配描述字段_CID,值为KYV0000;
步骤S45: 在PCI1设备中增加PCI域定义描述字段_SEG,值为One;
步骤S46:在PCI1设备中增加PCI的扩展配置空间起始地址(ECAM)描述字段_CBA,值为0x30000000;
步骤S47:在PCI1设备中增加虚拟硬件终端起始地址描述字段_HRV,值为132;
步骤S48:在PCI1设备中增加PCI资源定义描述字段_CRS;
步骤S49:使用iasl工具把ft2004pc-ivshmem.dsl编译成ivshmem.aml文件。
其中,所述步骤S48包括:
步骤S481:在_CRS中增加PCI总线资源描述,起始为0,结束为0,长度为1;
步骤S482:在_CRS中增加PCI总线配置空间资源描述,起始为0x30100000,结束为0x30103FFF,长度为0x00004000;
步骤S483:在_CRS中增加PCI总线IO空间资源描述,起始为0xb1000000,结束为0xb1FFFFFF,长度为0x01000000。
其中,所述步骤S3包括:
步骤S31:参照Linux内核源码中的driver/acpi/pci_root.c编写vpci.c驱动源码;
步骤S32:增加步骤S31中提到的pci_root.c文件的关于根扫描处理结构体(acpi_scan_handler)所有相关代码;
步骤S33:修改设备与驱动匹配字为KYV0000;
步骤S34:删除热插拔(hotadd)相关源码;
步骤S35:增加识别虚拟硬件终端起始地址描述字段_HRV代码,存储_HRV值到s_gsi静态变量中;
步骤S36:修改pci_acpi_scan_root基于ACPI设备管理的PCI根设备扫描函数的函数实现内容;
步骤S37:编译vpci.c源码为二进制驱动vpci.ko。
其中,所述步骤S36包括:
步骤S361:删除release_info和prepare_resources赋值语句;
步骤S362:修改扫描所有bus号为仅扫描bus 0;
步骤S363:为PCI桥结构体的map_irq变量赋值为vpci_map_irq;
步骤S364:为PCI桥结构体的swizzle_irq变量赋值为pci_common_swizzle;
步骤S365:增加vpci_map_irq函数,此函数根据pci设备的slot与func值返回分配给pci设备的中断号,修改irq_managed值为1。
其中,所述步骤S6包括:
步骤S61:加载步骤S14中生成的acpi-configfs.ko驱动;
步骤S62:挂载configfs到/sys/kernel/config目录中;
步骤S63:在/sys/kernel/config目录下创建acpi/table/IVSHMEM目录,最终形成/sys/kernel/config/acpi/table/IVSHMEM目录;
步骤S64:把步骤S4中生成的ivshmem.aml复制到/sys/kernel/config/acpi /table/IVSHMEM目录并重命名为aml文件。
本发明能够让Ivshmem功能运行在UEFI平台下的ACPI设备管理机制中,进而让Jailhouse能够在UEFI(ACPI)下通过Ivshmem功能完成HostOS与GuestOS、GuestOS与GuestOS之间的基于共享内存的通信机制。从而让Jailhouse在工控机、桌面PC、甚至是高性能服务器中具备高性能的多操作系统之间的通信机制,扩大Jailhouse应用领域。
具体实施方式
为了对本发明的技术方案及有益效果有更进一步的了解,下面详细说明本发明的技术方案及其产生的有益效果。
本发明中所涉及到的一些相关术语解释如下:
ACPI,Advanced Configuration and Power Interface缩写。是高级配置与电源管理接口的意思,是微软、英特尔和东芝共同开发的一种工业标准。通常用在X86架构下,如个人PC、高性能服务器、工控机。ACPI是一种硬件资源的定义规范,使用ACPI可以更让操作系统厂商屏蔽底层硬件具体差异,可以让操作系统无需修改即可适配所有的ACPI硬件平台。
Acpidump,ACPI相关信息通常存储在设备内部的BIOS芯片中。为了查看设备的ACPI相关信息需要借助专门的工具,即acpidump工具。该工具能够以二进制的方式读取出ACPI相关信息。使用acpidump -o xxxx命令即可读取ACPI信息并输出到xxxx文件中,但是该文件是人类不可读的文件,需要进一步使用其他工具对该文件进行翻译。例如acpidump-o acpidump.bin,意思为提取当前设备ACPI信息到acpidump.bin文件中。
Acpixtract,该工具运行在linux平台,用于从acpidump.bin中提取数据,并以数据文件的形式展现给用户。使用acpixtract -a acpidump.bin,可以自动得到多个文件,分别为dsdt.dat、ssdt.dat、apic.dat、mcfg.dat、gtdt.dat、facp.dat、iort.dat、spcr.dat、vfct.dat。其中dsdt.dat文件存储的信息是板载设备定义表,该文件规定所有的板载设备的内存空间、中断号等信息。ssdt.dsl文件存储的信息是pci设备相关定义。
dat/dsl/aml,以dat为后缀的文件,它是二进制格式的文件,人类无法直接阅读。以dsl为后缀的文件,它是dat文件通过专用工具翻译后得到的文件,它可以被人类读懂,也可以使用文本编辑器对该文件进行修改。以aml为后缀的文件,它是linux系统可以识别并执行的文件,只有这种文件才能正确加载到系统中。
Iasl,该工具运行在linux平台,用于把acpixtract工具输出的人类无法阅读的*.dat文件转换成*.dsl文件,该文件可以被人类阅读,也可以使用文本编辑器对dsl进行修改。使用iasl-d dsdt.dat命令,可以自动把dsdt.dat文件翻译成dsdt.dsl文件。使用iasl-sa dsdt.dsl命令,可以自动把dsdt.dsl文件转换成dsdt.aml汇编文件。
Devicetree,设备树,是ARM架构下的底层设备和资源的定义规范。
ARM架构使用devicetree技术,屏蔽底层设备差异,让操作系统可以无需修改即可适配多种平台。通常嵌入式平台均使用Devicetree的方式定义硬件资源。
DTS,即Device Tree Source,是devicetree的描述文件源码。
DTB,即Device Tree Blob,是编译后的二进制格式的Device Tree描述,只有DTB格式的文件才能被系统识别和执行。
Jailhouse,一种可以运行在linux系统上的软件,这个软件可以用来运行其他操作系统,包括linux、windows、VxWorks、FreeRTOS等。它的运行效率比较高、占用资源少,但是功能简陋。
Ivshmem,是一种多操作系统之间的通信机制,它以共享内存为通信介质,能够高效、快速的完成两个或者多个操作系统之间的通信。通常在嵌入式虚拟化系统中,使用Ivshmem机制完成HostOS与GuestOS之间的高速数据通信。
本发明的总体思路如下:
1、本发明需先下载Linux内核源码,打开uio与acpi-configfs驱动编译,编译下载的Linux内核源码,生成uio、acpi-configfs驱动,安装并选择此内核启动系统。
2、从开源社区中下载ivshmem-net、uio_ivshmem驱动源码,把驱动源码编译成二进制驱动ivshmem-net.ko与uio_ivshmem.ko。至此支持devicetree的Ivshmem驱动就完成制作。
3、 参照linux内核源码中的driver/acpi/pci_root.c源码编写vpci.c驱动并编译成二进制驱动vpci.ko,其中只需增加ACPI新的根扫描处理结构体(acpi_scan_handler)即可。复制driver/acpi/pci_root.c(ACPI设备管理机制下的PCI根控制器的控制驱动文件)中的acpi_scan_handler代码到vpci.c中,但需修改部分内容,修改内容包括:
(1)设备与驱动匹配字;
(2)删除热插拔相关源码;
(3)增加识别虚拟硬件终端起始地址描述字段_HRV代码,存储到s_gsi静态变量中;
(4)修改pci_acpi_scan_root函数实现内容:
a:删除release_info和prepare_resources赋值语句;
b:修改扫描所有bus为仅扫描bus0;
c:为PCI桥结构体的map_irq变量赋值为vpci_map_irq;
d:为PCI桥结构体的swizzle_irq变量赋值为pci_common_swizzle;
(5)增加vpci_map_irq函数,此函数根据pci设备的slot与func值返回分配给pci设备的中断号。
4、 手动编写ACPI表的二级系统描述符表源码(ft2004pc-ivshmem.dsl),增加_SB.PCI1设备。在此设备中增加用于ACPI设备与驱动匹配描述字段_CID;增加PCI域定义描述字段_SEG;增加PCI的扩展配置空间起始地址(ECAM)描述字段_CBA;增加虚拟硬件终端起始地址描述字段_HRV;增加PCI资源定义描述字段_CRS,其中PCI资源描述包括:PCI总线资源描述、PCI总线配置空间资源描述、PCI总线IO空间资源描述。完成ft2004pc-ivshmem.dsl编写后,使用iasl工具把dsl文件编译成ivshmem.aml文件。
5、加载上述步骤生成的uio、vpci驱动与acpi-configfs驱动。使用linux内核的acpi-configfs功能,把上述步骤生成的ivshmem.aml文件放到configfs中。
6、 使用带有Ivshmem功能的jailhouse配置文件虚拟化运行RTOS系统,可以在Host Linux与Guest RTOS系统之间通过Ivshmem进行数据传输,并且中断可正常响应。
本发明的整体思路在于,准备uio、uio_ivshmem、ivshmem-net、acpi-configfs四个开源驱动,并编写新的基于ACPI机制的虚拟pci域控制器驱动vpci,再结合新建虚拟PCI域的二级系统描述符表(dsdt)完成uio和ivshmem及ivshmem-net驱动在ACPI设备管理机制下使用的目的。重点难点在于如何编写vpci驱动和如何编写dsdt表,以这两个技术作为粘合剂,把acpi-configfs几乎和uio、uio_ivshmem、ivshmem-net技术在ACPI下有机结合起来。
本发明的Jailhouse基于ACPI使用Ivshmem的方法,以ARM架构的实体机安装银河麒麟V10桌面版系统为例,具体的实施步骤如下:
1、准备具有uio和acpi-configfs功能的linux内核
1.1下载开源5.4.18内核源码;
1.2 修改uio驱动配置为模块驱动;
1.3 修改acpi-configfs驱动配置为模块驱动;
1.4 编译步骤1.1下载的5.4.18内核源码,生成uio.ko、acpi-configfs.ko驱动以及最新linux内核;
其中,uio.ko是uio功能的驱动,在linux下驱动通常是*.ko;uio的意思usermodeI/O,即用户态操作设备输入输出的功能;
acpi-configfs含义:configfs是linux内核对象管理器,可以用于配置linux内核,acpi-configfs是用于内核配置acpi功能的功能,通常是挂载到/sys/kernel/config/文件夹下。
1.5 安装步骤1.4中生成的linux内核;
1.6 重新启动系统,选择步骤1.4中安装的5.4.18内核。
2、准备具有Ivshmem功能的Linux驱动
2.1 在开源社区中下载ivshmem-net驱动源码;
2.2 编译2.1步骤中的驱动源码为二进制驱动ivshmem-net.ko;
2.3 在开源社区中下载uio_ivshmem驱动源码;
2.4 编译2.3步骤中的驱动源码为二进制驱动uio_ivshmem.ko。
其中,Ivshmem是以uio技术为基础而开发的用于虚拟机之间通过使用内部共享内存的pci设备通讯的技术。uio_ivshmem.ko是Ivshmem功能在Linux中实现的驱动。ivshmem-net.ko是以Ivshmem功能为基础实现的虚拟PCI网卡通信的底层驱动。它可以让两个虚拟机增加一个虚拟pci网卡,从而使两个虚拟机之间通过socket进行通讯。
3、编写支持基于ACPI的Ivshmem的linux内核虚拟PCI根控制器驱动vpci
3.1 参照Linux内核源码中的driver/acpi/pci_root.c编写vpci.c驱动源码;
3.2 增加步骤3.1中提到的pci_root.c文件的关于根扫描处理结构体(acpi_scan_handler)所有相关代码;
3.3 修改设备与驱动匹配字为KYV0000;
3.4 删除热插拔(hotadd)相关源码;
3.5 增加识别虚拟硬件终端起始地址描述字段_HRV代码,存储_HRV值到s_gsi静态变量中;
3.6 修改pci_acpi_scan_root函数(基于ACPI设备管理的PCI根设备扫描函数)实现内容:
3.6.1 删除release_info和prepare_resources赋值语句;
3.6.2 修改扫描所有bus号为仅扫描bus 0;
3.6.3 为PCI桥结构体的map_irq变量赋值为vpci_map_irq;
3.6.4.为PCI桥结构体的swizzle_irq变量赋值为pci_common_swizzle;
3.6.5 增加vpci_map_irq函数,此函数根据pci设备的slot与func值返回分配给pci设备的中断号,修改irq_managed值为1;
3.7 编译vpci.c源码为二进制驱动vpci.ko。
4、编写支持ACPI表设备管理机制的Ivshmem二级系统描述符表(SSDT)源码ft2004pc-ivshmem.dsl
4.1 增加根作用域,描述为:DefinitionBlock ("IVSHMEM.DSL", "SSDT", 1, "ARMLTD", "KYLIN ", 0x20221010);
4.2 在根作用域下增加设备和总线域_SB;
4.3 在设备和总线域_SB下增加PCI1设备;
4.4 在PCI1设备中增加驱动匹配描述字段_CID,值为KYV0000;
4.5 在PCI1设备中增加PCI域定义描述字段_SEG,值为One;
4.6 在PCI1设备中增加PCI的扩展配置空间起始地址(ECAM)描述字段_CBA,值为0x30000000;
4.7 在PCI1设备中增加虚拟硬件终端起始地址描述字段_HRV,值为132;
4.8 在PCI1设备中增加PCI资源定义描述字段_CRS:
4.8.1在_CRS中增加PCI总线资源描述,起始为0,结束为0,长度为1;
4.8.2 在_CRS中增加PCI总线配置空间资源描述,起始为0x30100000,结束为0x30103FFF,长度为0x00004000;
4.8.3 在_CRS中增加PCI总线IO空间资源描述,起始为0xb1000000,结束为0xb1FFFFFF,长度为0x01000000;
4.9 使用iasl工具把ft2004pc-ivshmem.dsl编译成ivshmem.aml文件。
5、加载步骤1.4中生成的uio.ko驱动。
6、加载步骤2中生成的ivshmem-net.ko、uio_ivshmem.ko驱动。
7、加载步骤3.7中生成的vpci.ko驱动。
8、使用linux内核的acpi-configfs功能,把步骤4生成的ivshmem.aml文件放到configfs中。
8.1 加载步骤1.4中生成的acpi-configfs.ko驱动;
8.2 挂载configfs到/sys/kernel/config目录中;
8.3 在/sys/kernel/config目录下创建acpi/table/IVSHMEM目录,最终形成/sys/kernel/config/acpi/table/IVSHMEM目录;
8.4 把步骤4.9中生成的ivshmem.aml复制到/sys/kernel/config/acpi /table/IVSHMEM目录并重命名为aml文件。
9、使用jailhouse测试运行RTOS系统测试Ivshmem功能,结果表明可以在HostLinux与Guest RTOS系统之间通过Ivshmem进行数据传输,并且中断可正常响应。
本发明通过实现一个全新的虚拟PCI控制器以支持uio和Ivshmem功能创建的虚拟PCI设备,结合acpi-configfs机制动态加载具有虚拟PCI控制器功能的二级系统描述符表文件,从而实现可以支持ACPI设备管理机制的Ivshmem功能,从而使Jailhouse能够在UEFI平台中通过Ivshmem进行HostOS与GuestOS之间的共享内存通信。
本发明能够让Ivshmem功能运行在UEFI平台下的ACPI设备管理机制中,进而让Jailhouse能够在UEFI(ACPI)下通过Ivshmem功能完成HostOS与GuestOS、GuestOS与GuestOS之间的基于共享内存的通信机制。从而让Jailhouse在工控机、桌面PC、甚至是高性能服务器中具备高性能的多操作系统之间的通信机制,扩大Jailhouse应用领域。
虽然本发明已利用上述较佳实施例进行说明,然其并非用以限定本发明的保护范围,任何本领域技术人员在不脱离本发明的精神和范围之内,相对上述实施例进行各种变动与修改仍属本发明所保护的范围,因此本发明的保护范围以权利要求书所界定的为准。

Claims (4)

1.Jailhouse基于ACPI使用Ivshmem的方法,其特征在于,包括如下步骤:
步骤S1:准备具有uio和acpi-configfs功能的linux内核,该内核中生成有uio.ko驱动;
步骤S2:准备具有Ivshmem功能的Linux驱动:编译二进制驱动ivshmem-net.ko及uio_ivshmem.ko;
步骤S3:编写支持基于ACPI的Ivshmem的linux内核虚拟PCI根控制器驱动vpci,得到二进制驱动vpci.ko;所述步骤S3包括:
步骤S31:参照Linux内核源码中的driver/acpi/pci_root.c编写vpci.c驱动源码;
步骤S32:增加步骤S31中提到的pci_root.c文件的关于根扫描处理结构体acpi_scan_handler的所有相关代码;
步骤S33:修改设备与驱动匹配字为KYV0000;
步骤S34:删除热插拔相关源码;
步骤S35:增加识别虚拟硬件终端起始地址描述字段_HRV代码,存储_HRV值到s_gsi静态变量中;
步骤S36:修改基于ACPI设备管理的PCI根设备扫描函数pci_acpi_scan_root的函数实现内容;所述步骤S36包括:
步骤S361:删除release_info和prepare_resources赋值语句;
步骤S362:修改扫描所有bus号为仅扫描bus 0;
步骤S363:为PCI桥结构体的map_irq变量赋值为vpci_map_irq;
步骤S364:为PCI桥结构体的swizzle_irq变量赋值为pci_common_swizzle;
步骤S365:增加vpci_map_irq函数,vpci_map_irq函数根据pci设备的slot与func值返回分配给pci设备的中断号,修改irq_managed值为1;
步骤S37:编译vpci.c源码为二进制驱动vpci.ko;
步骤S4:编写支持ACPI表设备管理机制的Ivshmem二级系统描述符表源码ft2004pc-ivshmem.dsl,编译生成ivshmem.aml文件;所述步骤S4包括:
步骤S41:增加根作用域,描述为:DefinitionBlock ("IVSHMEM.DSL", "SSDT", 1, "ARMLTD", "KYLIN ", 0x20221010);
步骤S42:在根作用域下增加设备和总线域_SB;
步骤S43:在设备和总线域_SB下增加PCI1设备;
步骤S44:在PCI1设备中增加驱动匹配描述字段_CID,值为KYV0000;
步骤S45:在PCI1设备中增加PCI域定义描述字段_SEG,值为One;
步骤S46:在PCI1设备中增加PCI的扩展配置空间起始地址描述字段_CBA,值为0x30000000;
步骤S47:在PCI1设备中增加虚拟硬件终端起始地址描述字段_HRV,值为132;
步骤S48:在PCI1设备中增加PCI资源定义描述字段_CRS;所述步骤S48包括:
步骤S481:在_CRS中增加PCI总线资源描述,起始为0,结束为0,长度为1;
步骤S482:在_CRS中增加PCI总线配置空间资源描述,起始为0x30100000,结束为0x30103FFF,长度为0x00004000;
步骤S483:在_CRS中增加PCI总线IO空间资源描述,起始为0xb1000000,结束为0xb1FFFFFF,长度为0x01000000;
步骤S49:使用iasl工具把ft2004pc-ivshmem.dsl编译成ivshmem.aml文件;
步骤S5:加载步骤S1至步骤S3中生成的uio.ko驱动、ivshmem-net.ko驱动、uio_ivshmem.ko驱动及vpci.ko驱动;
步骤S6:使用linux内核的acpi-configfs功能,把步骤S4生成的ivshmem.aml文件放到configfs中。
2.根据权利要求1所述的Jailhouse基于ACPI使用Ivshmem的方法,其特征在于,所述步骤S1包括:
步骤S11:下载开源内核源码;
步骤S12:修改uio驱动配置为模块驱动;
步骤S13:修改acpi-configfs驱动配置为模块驱动;
步骤S14:编译步骤S11下载的内核源码,生成uio.ko、acpi-configfs.ko驱动以及最新linux内核;
步骤S15:安装步骤S14中生成的linux内核;
步骤S16:重新启动系统,选择步骤S14中安装的内核。
3.根据权利要求1所述的Jailhouse基于ACPI使用Ivshmem的方法,其特征在于,所述步骤S2包括:
步骤S21:在开源社区中下载ivshmem-net驱动源码;
步骤S22:编译步骤S21中的驱动源码为二进制驱动ivshmem-net.ko;
步骤S23:在开源社区中下载uio_ivshmem驱动源码;
步骤S24:编译步骤S23中的驱动源码为二进制驱动uio_ivshmem.ko。
4.根据权利要求2所述的Jailhouse基于ACPI使用Ivshmem的方法,其特征在于,所述步骤S6包括:
步骤S61:加载步骤S14中生成的acpi-configfs.ko驱动;
步骤S62:挂载configfs到/sys/kernel/config目录中;
步骤S63:在/sys/kernel/config目录下创建acpi/table/IVSHMEM目录,最终形成/sys/kernel/config/acpi/table/IVSHMEM目录;
步骤S64:把步骤S4中生成的ivshmem.aml文件复制到/sys/kernel/config/acpi/table/IVSHMEM目录下。
CN202310005001.4A 2023-01-04 2023-01-04 Jailhouse基于ACPI使用Ivshmem的方法 Active CN115686889B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310005001.4A CN115686889B (zh) 2023-01-04 2023-01-04 Jailhouse基于ACPI使用Ivshmem的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310005001.4A CN115686889B (zh) 2023-01-04 2023-01-04 Jailhouse基于ACPI使用Ivshmem的方法

Publications (2)

Publication Number Publication Date
CN115686889A CN115686889A (zh) 2023-02-03
CN115686889B true CN115686889B (zh) 2023-03-28

Family

ID=85057034

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310005001.4A Active CN115686889B (zh) 2023-01-04 2023-01-04 Jailhouse基于ACPI使用Ivshmem的方法

Country Status (1)

Country Link
CN (1) CN115686889B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116204933B (zh) * 2023-05-05 2023-09-26 麒麟软件有限公司 一种ARM64架构下基于jailhouse隔离PCIe网卡的方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111027066A (zh) * 2019-10-30 2020-04-17 北京安天网络安全技术有限公司 一种kvm平台下杀毒软件客户端轻代理实现方法及系统
CN114077480A (zh) * 2022-01-19 2022-02-22 维塔科技(北京)有限公司 一种主机与虚拟机共享内存方法、装置、设备及介质
CN114398145A (zh) * 2021-12-06 2022-04-26 麒麟软件有限公司 基于X86平台的Jailhouse运行non-root Linux的方法
CN115543545A (zh) * 2022-11-25 2022-12-30 麒麟软件有限公司 Jailhouse使用ACPI实现设备隔离的方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7502803B2 (en) * 2003-05-28 2009-03-10 Hewlett-Packard Development Company, L.P. System and method for generating ACPI machine language tables
US11269992B2 (en) * 2018-03-22 2022-03-08 Trulyprotect Oy Systems and methods for hypervisor-based protection of code

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111027066A (zh) * 2019-10-30 2020-04-17 北京安天网络安全技术有限公司 一种kvm平台下杀毒软件客户端轻代理实现方法及系统
CN114398145A (zh) * 2021-12-06 2022-04-26 麒麟软件有限公司 基于X86平台的Jailhouse运行non-root Linux的方法
CN114077480A (zh) * 2022-01-19 2022-02-22 维塔科技(北京)有限公司 一种主机与虚拟机共享内存方法、装置、设备及介质
CN115543545A (zh) * 2022-11-25 2022-12-30 麒麟软件有限公司 Jailhouse使用ACPI实现设备隔离的方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
曹宏鹏.Jailhouse中基于Soft-RoCE的虚拟机间通信研究.《中国优秀硕士学位论文全文数据库 信息科技辑》.2022,(第12期),摘要,第1-67页. *
肖子良.Naplus:一种面向虚拟集群的共享存储系统.《中国优秀硕士学位论文全文数据库 信息科技辑》.2017,(第06期),摘要,第1-52页. *

Also Published As

Publication number Publication date
CN115686889A (zh) 2023-02-03

Similar Documents

Publication Publication Date Title
US8924703B2 (en) Secure virtualization environment bootable from an external media device
JP6050262B2 (ja) 仮想ディスクストレージ技術
US20090265708A1 (en) Information Processing Apparatus and Method of Controlling Information Processing Apparatus
US8407396B2 (en) Providing block data access for an operating system using solid-state memory
US8595723B2 (en) Method and apparatus for configuring a hypervisor during a downtime state
US6665735B1 (en) Method of changing a dynamic link library function efficiently and a computer system for executing the same
US9940291B2 (en) Assigning processors to memory mapped configuration
CN109426613B (zh) 在uefi中检索调试数据的方法及其电脑系统
JP2006018814A (ja) 仮想マシン環境におけるエミュレートされたデバイスの開発のためのシステムおよび方法
CN102541619A (zh) 虚拟机管理装置和方法
WO2017185204A1 (zh) 一种虚拟机创建方法和装置
CN115686889B (zh) Jailhouse基于ACPI使用Ivshmem的方法
US6990576B2 (en) System and method for using a firmware interface table to dynamically load an ACPI SSDT
CN104598170A (zh) 确定读写路径的方法和装置
US20180349160A1 (en) Systems and methods for discovering private devices coupled to a hardware accelerator
JPWO2013088818A1 (ja) 仮想計算機システム、仮想化機構、及びデータ管理方法
CN114756290A (zh) 一种操作系统安装方法、设备及可读存储介质
CN115543545B (zh) Jailhouse使用ACPI实现设备隔离的方法
US20040243385A1 (en) Emulation of hardware devices in a pre-boot environment
CN115794259A (zh) 通过acpi生成设备树的方法
US7103767B2 (en) Method and apparatus to support legacy master boot record (MBR) partitions
CN114237814A (zh) 跨虚拟化平台的虚拟机迁移方法、装置和计算机设备
Liang et al. A lean USB file system for bare machine applications
US7240187B2 (en) Method and apparatus to support legacy master boot record (MBR) partitions
JP2010128943A (ja) 情報処理装置および情報処理装置の制御方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant