CN115686889B - Jailhouse基于ACPI使用Ivshmem的方法 - Google Patents
Jailhouse基于ACPI使用Ivshmem的方法 Download PDFInfo
- 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
Links
Classifications
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy 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的方法。
背景技术
随着芯片技术和工艺制程的进步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目录下。
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)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116204933B (zh) * | 2023-05-05 | 2023-09-26 | 麒麟软件有限公司 | 一种ARM64架构下基于jailhouse隔离PCIe网卡的方法 |
Citations (4)
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)
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 |
-
2023
- 2023-01-04 CN CN202310005001.4A patent/CN115686889B/zh active Active
Patent Citations (4)
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)
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 |