mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-08-03 17:31:42 +00:00
dm: verify the "iasl" version
This patch does: - define IASL_MIN_VER in the top-level Makefile and pass it Device Model - verify the "iasl" version at run time if "iasl" version is older than IASL_MIN_VER, refuse to launch the post-launched VM and exit directly. Tracked-On: #7880 Signed-off-by: Shiqing Gao <shiqing.gao@intel.com> Acked-by: Wang, Yu1 <yu1.wang@intel.com>
This commit is contained in:
parent
cc309bd973
commit
59b6d7b404
3
Makefile
3
Makefile
@ -86,6 +86,7 @@ ASL_COMPILER ?= $(shell which iasl)
|
|||||||
DPKG_BIN ?= $(shell which dpkg)
|
DPKG_BIN ?= $(shell which dpkg)
|
||||||
YARN_BIN ?= $(shell which yarn)
|
YARN_BIN ?= $(shell which yarn)
|
||||||
CARGO_BIN ?= $(shell which cargo)
|
CARGO_BIN ?= $(shell which cargo)
|
||||||
|
IASL_MIN_VER = "20190703"
|
||||||
|
|
||||||
.PHONY: all hypervisor devicemodel tools life_mngr doc
|
.PHONY: all hypervisor devicemodel tools life_mngr doc
|
||||||
all: hypervisor devicemodel tools
|
all: hypervisor devicemodel tools
|
||||||
@ -132,7 +133,7 @@ hvapplydiffconfig:
|
|||||||
@$(MAKE) applydiffconfig $(HV_MAKEOPTS) PATCH=$(abspath $(PATCH))
|
@$(MAKE) applydiffconfig $(HV_MAKEOPTS) PATCH=$(abspath $(PATCH))
|
||||||
|
|
||||||
devicemodel: tools
|
devicemodel: tools
|
||||||
$(MAKE) -C $(T)/devicemodel DM_OBJDIR=$(DM_OUT) DM_BUILD_VERSION=$(BUILD_VERSION) DM_BUILD_TAG=$(BUILD_TAG) TOOLS_OUT=$(TOOLS_OUT) RELEASE=$(RELEASE)
|
$(MAKE) -C $(T)/devicemodel DM_OBJDIR=$(DM_OUT) DM_BUILD_VERSION=$(BUILD_VERSION) DM_BUILD_TAG=$(BUILD_TAG) TOOLS_OUT=$(TOOLS_OUT) RELEASE=$(RELEASE) IASL_MIN_VER=$(IASL_MIN_VER)
|
||||||
|
|
||||||
tools:
|
tools:
|
||||||
mkdir -p $(TOOLS_OUT)
|
mkdir -p $(TOOLS_OUT)
|
||||||
|
@ -45,6 +45,8 @@ CFLAGS += -I$(SYSROOT)/usr/include/SDL2
|
|||||||
CFLAGS += -I$(SYSROOT)/usr/include/EGL
|
CFLAGS += -I$(SYSROOT)/usr/include/EGL
|
||||||
CFLAGS += -I$(SYSROOT)/usr/include/GLES2
|
CFLAGS += -I$(SYSROOT)/usr/include/GLES2
|
||||||
|
|
||||||
|
CFLAGS += -DIASL_MIN_VER=\"$(IASL_MIN_VER)\"
|
||||||
|
|
||||||
GCC_MAJOR=$(shell echo __GNUC__ | $(CC) -E -x c - | tail -n 1)
|
GCC_MAJOR=$(shell echo __GNUC__ | $(CC) -E -x c - | tail -n 1)
|
||||||
GCC_MINOR=$(shell echo __GNUC_MINOR__ | $(CC) -E -x c - | tail -n 1)
|
GCC_MINOR=$(shell echo __GNUC_MINOR__ | $(CC) -E -x c - | tail -n 1)
|
||||||
|
|
||||||
|
@ -1034,6 +1034,13 @@ main(int argc, char *argv[])
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (check_iasl_version() != 0) {
|
||||||
|
pr_err("Please install iasl tool with version >= %s from https://www.acpica.org/downloads, "
|
||||||
|
"and provide the path to iasl (by using --iasl) if it's not on the PATH \n",
|
||||||
|
IASL_MIN_VER);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
argc -= optind;
|
argc -= optind;
|
||||||
argv += optind;
|
argv += optind;
|
||||||
|
|
||||||
|
@ -96,6 +96,9 @@
|
|||||||
#define ASL_TEMPLATE "dm.XXXXXXX"
|
#define ASL_TEMPLATE "dm.XXXXXXX"
|
||||||
#define ASL_SUFFIX ".aml"
|
#define ASL_SUFFIX ".aml"
|
||||||
|
|
||||||
|
#define ASL_VER_PATTERN "ASL+ Optimizing Compiler/Disassembler version "
|
||||||
|
#define ASL_VER_STR_LEN 256
|
||||||
|
|
||||||
static char asl_compiler[MAXPATHLEN] = {0};
|
static char asl_compiler[MAXPATHLEN] = {0};
|
||||||
|
|
||||||
uint64_t audio_nhlt_len = 0;
|
uint64_t audio_nhlt_len = 0;
|
||||||
@ -1150,6 +1153,39 @@ acrn_parse_iasl(char *arg)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
check_iasl_version(void)
|
||||||
|
{
|
||||||
|
int ret = -1;
|
||||||
|
static char cmd_iasl_ver[MAXPATHLEN + 10];
|
||||||
|
static char buf[ASL_VER_STR_LEN];
|
||||||
|
char *ver_str, *cp;
|
||||||
|
uint32_t ver, min_ver;
|
||||||
|
|
||||||
|
snprintf(cmd_iasl_ver, sizeof(cmd_iasl_ver),
|
||||||
|
"%s -v", asl_compiler);
|
||||||
|
FILE *fd_iasl_ver = popen(cmd_iasl_ver, "r");
|
||||||
|
|
||||||
|
if (fd_iasl_ver != NULL)
|
||||||
|
{
|
||||||
|
while (fgets(buf, ASL_VER_STR_LEN, fd_iasl_ver) != NULL) {
|
||||||
|
if (strstr(buf, ASL_VER_PATTERN)) {
|
||||||
|
ver_str = buf + strlen(ASL_VER_PATTERN);
|
||||||
|
pr_info("iasl version: %s", ver_str);
|
||||||
|
|
||||||
|
if ((!dm_strtoui(ver_str, &cp, 10, &ver)) &&
|
||||||
|
(!dm_strtoui(IASL_MIN_VER, &cp, 10, &min_ver)) &&
|
||||||
|
(ver >= min_ver)) {
|
||||||
|
ret = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pclose(fd_iasl_ver);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
get_iasl_compiler(void)
|
get_iasl_compiler(void)
|
||||||
{
|
{
|
||||||
|
@ -123,5 +123,6 @@ int lapic_to_pcpu(int lapic);
|
|||||||
int parse_madt(void);
|
int parse_madt(void);
|
||||||
int acrn_parse_iasl(char *arg);
|
int acrn_parse_iasl(char *arg);
|
||||||
int get_iasl_compiler(void);
|
int get_iasl_compiler(void);
|
||||||
|
int check_iasl_version(void);
|
||||||
|
|
||||||
#endif /* _ACPI_H_ */
|
#endif /* _ACPI_H_ */
|
||||||
|
Loading…
Reference in New Issue
Block a user