CN115794259B - 通过acpi生成设备树的方法 - Google Patents
通过acpi生成设备树的方法 Download PDFInfo
- Publication number
- CN115794259B CN115794259B CN202310048762.8A CN202310048762A CN115794259B CN 115794259 B CN115794259 B CN 115794259B CN 202310048762 A CN202310048762 A CN 202310048762A CN 115794259 B CN115794259 B CN 115794259B
- Authority
- CN
- China
- Prior art keywords
- file
- source code
- acpi
- dsl
- description
- 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
Images
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
- Stored Programmes (AREA)
Abstract
通过ACPI生成设备树的方法,包括:安装设备ACPI信息导出工具;提取当前设备的ACPI表得到acpidump.bin;得到二进制的板载设备定义表文件、多APIC描述表文件、通用定时器描述表文件、串行端口控制台重定向表文件、二级系统描述符表文件;解析得到对应的源码文件dsl;获取设备树需要的关键性描述及其它基础属性;设置所有设备的兼容性描述;把获取到的所有信息按照设备树的标准编写方法,生成autotest.dts文件并编译成系统可识别的autotest.dtb。本发明通过ARM架构下的ACPI表自动生成设备树,让jailhouse在当前平台中可以使用自动生成的设备树文件虚拟化运行Linux系统。进而让jailhouse可以部署在使用ACPI的设备中,扩大jailhouse的应用领域。
Description
技术领域
本发明涉及虚拟化平台搭建技术领域,具体涉及通过ACPI生成设备树的方法。
背景技术
随着云、5G、IoT技术的发展,越来越多的边缘设备开始使用Linux,借助Linux生态可以轻而易举引入虚拟化软件,如qemu、kvm、Xen等。但是类似于Xen、Qemu这种虚拟化软件最初应用于通用PC甚至是高性能服务器,需要占用大量资源,往往不太适用于嵌入式场景。
Jailhouse是为了适配嵌入式场景而发布的嵌入式虚拟化软件,具有占用资源少、虚拟化损耗低、隔离安全性好等优点。该虚拟化软件只支持devicetree设备树管理,不支持ACPI设备管理。而很多5G、IoT、云设备使用ACPI设备管理,这类设备无法部署jailhouse虚拟化软件。
例如Jailhouse在ARM架构下虚拟化运行Linux时必须指定devicetree文件,而使用ACPI进行设备管理的设备生产厂商并不会对外提供当前设备对应的devicetree文件。当没有devicetree文件时,就需要通过芯片手册,配合设备原理图,自己编写一个全新的devicetree文件。
制作一个新的devicetree的编写和调试均需要花费大量时间。除此之外很多国内芯片并不会对外提供芯片手册,设备厂商也不会对外提供设备原理图。这样就无法在此设备中部署并使用Jailhouse虚拟化软件。
虚拟化管理软件Jailhouse在ARM架构下虚拟化运行Linux时需要制定devicetree文件,而Jailhouse软件并没有对外提供如何从ACPI设备表中自动生成devicetree文件,国外开源或闭源软件也同样不具备此功能。
发明内容
为解决已有技术存在的不足,本发明提供了一种通过ACPI生成设备树的方法,包括如下步骤:
步骤S1:安装设备ACPI信息导出工具;
步骤S2:使用设备ACPI信息导出工具提取当前设备的ACPI表得到acpidump.bin;
步骤S3:使用ACPI信息提取工具提取步骤2中得到的acpidump.bin二进制ACPI表得到二进制的板载设备定义表文件dsdt.dat、多APIC描述表文件apic.dat、通用定时器描述表文件gtdt.dat、串行端口控制台重定向表文件spcr.dat、二级系统描述符表文件ssdt.dat;
步骤S4:使用iasl工具对步骤3中得到的五个dat进行解析得到对应的源码文件dsl;
步骤S5:基于步骤S4所得到的源码文件dsl获取设备树需要的关键性描述;
步骤S6:设置设备树关键性描述之外的其它基础属性;
步骤S7:设置所有设备的兼容性描述;
步骤S8:把获取到的所有信息按照设备树的标准编写方法,生成autotest.dts文件;
步骤S9:使用dtc工具把autotest.dts编译成系统可识别的autotest.dtb;
步骤S10:在当前平台上使用autotest.dtb执行Jailhouse虚拟化linux系统命令,可以看到linux系统成功启动。
其中,所述步骤S4中,使用iasl工具对步骤3中得到的五个dat进行解析得到对应的源码文件dsl包括多APIC描述表源码文件apic.dsl、多APIC描述表源码文件apic.dsl、通用定时器描述表源码文件gtdt.dsl、串行端口控制台重定向表源码文件spcr.dsl及二级系统描述符表源码文件ssdt.dsl。
其中,所述步骤S5包括:
步骤S51:通过板载设备定义表源码文件dsdt.dsl获取设备树中用到的soc设备中的板载设备、内存映射、pmu、psci关键性描述;
步骤S52:通过通用定时器描述表源码文件gtdt.dsl获取设备树中用到的时钟、定时器关键性描述;
步骤S53:通过串行端口控制台重定向表源码文件spcr.dsl获取设备树中用到的控制台串口关键性描述;
步骤S54:通过二级系统描述符表源码文件ssdt.dsl获取PCIE设备相关的关键性描述。
其中,所述步骤S6包括:所设置的设备树关键性描述之外的其它基础属性包括根路径、CPU资源、中断控制器资源、时钟资源、soc资源的地址空间长度描述、大小长度描述、中断向量长度描述。
其中,所述步骤S7中,还针对每一个设备进行下列操作:
步骤S71:获取根据ACPI表的板载设备定义表源码文件(dsdt.dsl)中的硬件ID字段UID;
步骤S72:根据UID定位到具体芯片对应的内核源码文件src.c;
步骤S73:在内核源码文件src.c中查找devicetree的兼容性描述。
本发明通过ARM架构下的ACPI表自动生成devicetree,让jailhouse在当前平台中可以使用自动生成的devicetree文件虚拟化运行Linux系统。进而让jailhouse可以部署在使用ACPI的设备中,扩大jailhouse的应用领域。
附图说明
图1为本发明的通过ACPI生成设备树的方法的实现流程图。
具体实施方式
为了对本发明的技术方案及有益效果有更进一步的了解,下面结合附图详细说明本发明的技术方案及其产生的有益效果。
本发明中所涉及到的一些相关术语解释如下:
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等。它的运行效率比较高、占用资源少,但是功能简陋,目前该软件。
本发明的总体思路如下:
本发明先把存储在设备BIOS内的ACPI信息导出到acpidump.bin文件中,再提取acpidump.bin文件中的板载设备定义表文件(dsdt.dat)、多APIC描述表文件(apic.dat)、通用定时器描述表文件(gtdt.dat)、串行端口控制台重定向表文件(spcr.dat)、二级系统描述符表文件(ssdt.dat)。并把上述五个文件通过iasl工具翻译成人类可读的文本dsl源码文件。
通过多APIC描述表源码文件(apic.dsl)获取devicetree中用到的cpuid、gic等关键性描述;通过板载设备定义表源码文件(dsdt.dsl)获取devicetree中用到的soc设备中的板载设备、内存映射、pmu、psci关键性描述;通过通用定时器描述表源码文件(gtdt.dsl)获取devicetree中用到的时钟、定时器关键性描述;通过串行端口控制台重定向表源码文件(spcr.dsl)获取devicetree中用到的控制台串口关键性描述;通过二级系统描述符表源码文件(ssdt.dsl)获取PCIE设备相关的关键性描述。在获取上述信息后可编写出devicetree文件的绝大部分内容。
剩下内容既根路径、CPU资源、中断控制器资源、时钟资源、soc资源的地址空间长度描述、大小长度描述、中断向量长度描述。其中一般设置地址空间长度描述为2、大小长度描述为2、中断向量长度描述为3。
此时还剩最后一个工作,即为填写所有设备的兼容性描述,这部分内容获取根据ACPI表的板载设备定义表源码文件(dsdt.dsl)中的硬件ID字段定位到具体的内核源码文件,在此文件中搜索devicetree的兼容性描述,此描述即是正确的兼容性描述。
此时自动生成devicetree的所有信息均已获取,按照devicetree的标准格式生成devicetree,即autotest.dts。再使用dtc软件把autotest.dts编译成计算机可识别的autotest.dtb。使用autotest.dtb即可在当前平台上使用jailhouse虚拟化运行Linux系统。
图1为本发明的通过ACPI生成设备树的方法的实现流程图,请结合图1所示,以ARM架构的实体机安装银河麒麟V10桌面版系统为例,实施步骤如下:
1、安装设备ACPI信息导出工具。
2、使用设备ACPI信息导出工具提取当前设备的ACPI表得到acpidump.bin。
3、使用ACPI信息提取工具提取步骤2中得到的acpidump.bin二进制ACPI表得到二进制的板载设备定义表文件dsdt.dat、多APIC描述表文件apic.dat、通用定时器描述表文件gtdt.dat、串行端口控制台重定向表文件spcr.dat、二级系统描述符表文件ssdt.dat。
4、使用iasl工具对步骤3中得到的五个dat进行解析得到对应的源码文件dsl。
5、通过多APIC描述表源码文件(apic.dsl)获取devicetree中用到的cpuid、gic等关键性描述。
6、通过板载设备定义表源码文件(dsdt.dsl)获取devicetree中用到的soc设备中的板载设备、内存映射、pmu、psci关键性描述。
7、通过通用定时器描述表源码文件(gtdt.dsl)获取devicetree中用到的时钟、定时器关键性描述。
8、通过串行端口控制台重定向表源码文件(spcr.dsl)获取devicetree中用到的控制台串口关键性描述。
9、通过二级系统描述符表源码文件(ssdt.dsl)获取PCIE设备相关的关键性描述。
10、设置根路径、CPU资源、中断控制器资源、时钟资源、soc资源的地址空间长度描述、大小长度描述、中断向量长度描述。
11、设置所有设备的兼容性描述,针对每一个设备进行下列操作
11.1获取根据ACPI表的板载设备定义表源码文件(dsdt.dsl)中的硬件ID字段UID;
11.2 根据UID定位到具体芯片对应的内核源码文件src.c;
11.3在内核源码文件src.c中查找devicetree的兼容性描述。
12、把获取到的所有信息按照devicetree的标准编写方法,生成autotest.dts文件。
13、使用dtc工具把autotest.dts编译成系统可识别的autotest.dtb。
14、在当前平台上使用autotest.dtb执行Jailhouse虚拟化linux系统命令,可以看到linux系统成功启动。
本发明使用acpidump工具组得到板载设备定义表文件、多APIC描述表文件、通用定时器描述表文件、串行端口控制台重定向表文件、二级系统描述符表文件,并从中获得cpuid、gic、内存映射、pmu、psci、时钟、定时器、控制台串口、soc设备中的板载设备关键性描述,生成当前平台的devicetree文件。
本发明通过ARM架构下的ACPI表自动生成devicetree,让jailhouse在当前平台中可以使用自动生成的devicetree文件虚拟化运行Linux系统。进而让jailhouse可以部署在使用ACPI的设备中,扩大jailhouse的应用领域。
虽然本发明已利用上述较佳实施例进行说明,然其并非用以限定本发明的保护范围,任何本领域技术人员在不脱离本发明的精神和范围之内,相对上述实施例进行各种变动与修改仍属本发明所保护的范围,因此本发明的保护范围以权利要求书所界定的为准。
Claims (3)
1.通过ACPI生成设备树的方法,其特征在于,包括如下步骤:
步骤S1:安装设备ACPI信息导出工具;
步骤S2:使用设备ACPI信息导出工具提取当前设备的ACPI表得到acpidump.bin;
步骤S3:使用ACPI信息提取工具提取步骤S2中得到的acpidump.bin二进制ACPI表得到二进制的板载设备定义表文件dsdt.dat、多APIC描述表文件apic.dat、通用定时器描述表文件gtdt.dat、串行端口控制台重定向表文件spcr.dat、二级系统描述符表文件ssdt.dat;
步骤S4:使用iasl工具对步骤S3中得到的五个dat进行解析得到对应的源码文件dsl;
步骤S5:基于步骤S4所得到的源码文件dsl获取设备树需要的关键性描述;
步骤S6:设置设备树关键性描述之外的其它基础属性;
步骤S7:设置所有设备的兼容性描述;
步骤S8:把获取到的所有信息按照设备树的标准编写方法,生成autotest.dts文件;
步骤S9:使用dtc工具把autotest.dts编译成系统可识别的autotest.dtb;
步骤S10:在当前平台上使用autotest.dtb执行Jailhouse虚拟化linux系统命令,可以看到linux系统成功启动;
所述步骤S5包括:
步骤S51:通过板载设备定义表源码文件dsdt.dsl获取设备树中用到的soc设备中的板载设备、内存映射、pmu、psci关键性描述;
步骤S52:通过通用定时器描述表源码文件gtdt.dsl获取设备树中用到的时钟、定时器关键性描述;
步骤S53:通过串行端口控制台重定向表源码文件spcr.dsl获取设备树中用到的控制台串口关键性描述;
步骤S54:通过二级系统描述符表源码文件ssdt.dsl获取PCIE设备相关的关键性描述;
所述步骤S6包括:所设置的设备树关键性描述之外的其它基础属性包括根路径、CPU资源、中断控制器资源、时钟资源、soc资源的地址空间长度描述、大小长度描述、中断向量长度描述。
2.根据权利要求1所述的通过ACPI生成设备树的方法,其特征在于,所述步骤S4中,使用iasl工具对步骤S3中得到的五个dat进行解析得到对应的源码文件dsl包括板载设备定义表源码文件gtdt.dsl、多APIC描述表源码文件apic.dsl、通用定时器描述表源码文件gtdt.dsl、串行端口控制台重定向表源码文件spcr.dsl及二级系统描述符表源码文件ssdt.dsl。
3.根据权利要求1所述的通过ACPI生成设备树的方法,其特征在于,所述步骤S7中,还针对每一个设备进行下列操作:
步骤S71:获取根据ACPI表的板载设备定义表源码文件dsdt.dsl中的硬件ID字段UID;
步骤S72:根据UID定位到具体芯片对应的内核源码文件src.c;
步骤S73:在内核源码文件src.c中查找devicetree的兼容性描述。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310048762.8A CN115794259B (zh) | 2023-02-01 | 2023-02-01 | 通过acpi生成设备树的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310048762.8A CN115794259B (zh) | 2023-02-01 | 2023-02-01 | 通过acpi生成设备树的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115794259A CN115794259A (zh) | 2023-03-14 |
CN115794259B true CN115794259B (zh) | 2023-06-02 |
Family
ID=85429348
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310048762.8A Active CN115794259B (zh) | 2023-02-01 | 2023-02-01 | 通过acpi生成设备树的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115794259B (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网卡的方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109582391B (zh) * | 2018-12-04 | 2022-05-24 | 中国航空工业集团公司西安航空计算技术研究所 | 一种基于xml的设备树配置方法 |
CN109683820B (zh) * | 2018-12-18 | 2022-02-08 | 超越科技股份有限公司 | 一种基于Linux的存储设备树实现方法 |
CN112069102B (zh) * | 2020-09-04 | 2022-08-26 | 龙芯中科技术股份有限公司 | Gpio控制器配置方法和系统 |
CN112860256B (zh) * | 2021-02-08 | 2024-03-08 | 中科院软件研究所南京软件技术研究院 | 一种Linux内核设备树的可视化配置系统和方法 |
-
2023
- 2023-02-01 CN CN202310048762.8A patent/CN115794259B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN115794259A (zh) | 2023-03-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10367822B2 (en) | Restrictive access control for modular reflection | |
US8196138B2 (en) | Method and system for migrating virtual machines between hypervisors | |
US8887139B2 (en) | Virtual system and method of analyzing operation of virtual system | |
US9558096B2 (en) | Method and apparatus for supporting performance analysis | |
CN115794259B (zh) | 通过acpi生成设备树的方法 | |
CN107861790B (zh) | 虚拟机磁盘空间扩展方法、装置、宿主机及可读存储介质 | |
CN115269057B (zh) | 基于设备树的隔离系统生成配置文件的方法 | |
US8042103B2 (en) | Pre-translated files used in a virtual machine | |
US9489211B2 (en) | Exposing memory-mapped IO devices to drivers through firmware | |
CN112905472A (zh) | 内核调试系统及方法 | |
CN103268241A (zh) | 一种在bios中实现对硬盘分区隐藏或显示的方法 | |
US8370618B1 (en) | Multiple platform support in computer system firmware | |
CN114765051A (zh) | 内存测试方法及装置、可读存储介质、电子设备 | |
CN117369868B (zh) | 一种面向国产软件环境的冷热应用代码迁移方法 | |
CN115543545B (zh) | Jailhouse使用ACPI实现设备隔离的方法 | |
CN115686889B (zh) | Jailhouse基于ACPI使用Ivshmem的方法 | |
CN106951268A (zh) | 一种申威平台支持NVMe硬盘启动的实现方法 | |
CN106909345A (zh) | 一种基于台式计算机的uefi固件实现方法 | |
US8661425B1 (en) | Method, apparatus, and computer-readable medium for storing data associated with a firmware program | |
CN100392591C (zh) | Pc架构嵌入式系统中上电自检的设计方法 | |
CN110096888B (zh) | 一种加快验证及分析smm安全隐患的方法及系统 | |
CN113590404A (zh) | 模拟器的检测方法、装置、设备以及计算机存储介质 | |
JPH10260883A (ja) | ハンドルに基づくファインド処理のハンドルに基づかないファインド処理への変換方法及び装置 | |
Zhou et al. | Development of a PLC virtual machine orienting IEC 61131-3 standard | |
CN114461216B (zh) | 一种文件编译方法、装置、电子设备及存储介质 |
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 |