mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-09-23 01:37:44 +00:00
acrn-config: add support to parse board defconfig from configurations
Board defconfig depends on hypervisor configurations and vm configurations, add this to support to parse board defconfig from vm configuration. Tracked-On: #4634 Signed-off-by: Wei Liu <weix.w.liu@intel.com> Acked-by: Victor Sun <victor.sun@intel.com> Acked-by: Terry Zou <terry.zou@intel.com>
This commit is contained in:
@@ -7,6 +7,7 @@ import os
|
||||
import sys
|
||||
import copy
|
||||
sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'library'))
|
||||
sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'hv_config'))
|
||||
from scenario_item import HwInfo, VmInfo
|
||||
import board_cfg_lib
|
||||
import scenario_cfg_lib
|
||||
@@ -14,10 +15,14 @@ import vm_configurations_c
|
||||
import vm_configurations_h
|
||||
import pci_dev_c
|
||||
import common
|
||||
import hv_cfg_lib
|
||||
import board_defconfig
|
||||
from hv_item import HvInfo
|
||||
|
||||
ACRN_PATH = common.SOURCE_ROOT_DIR
|
||||
ACRN_CONFIG_DEF = ACRN_PATH + 'hypervisor/scenarios/'
|
||||
GEN_FILE = ["vm_configurations.h", "vm_configurations.c", "pci_dev.c"]
|
||||
ACRN_CONFIGS = ACRN_PATH + "hypervisor/arch/x86/configs/"
|
||||
GEN_FILE = ["vm_configurations.h", "vm_configurations.c", "pci_dev.c", ".config"]
|
||||
|
||||
|
||||
def get_scenario_item_values(board_info, scenario_info):
|
||||
@@ -27,6 +32,7 @@ def get_scenario_item_values(board_info, scenario_info):
|
||||
"""
|
||||
scenario_item_values = {}
|
||||
hw_info = HwInfo(board_info)
|
||||
hv_info = HvInfo(scenario_info)
|
||||
|
||||
# get vm count
|
||||
common.BOARD_INFO_FILE = board_info
|
||||
@@ -44,12 +50,31 @@ def get_scenario_item_values(board_info, scenario_info):
|
||||
scenario_item_values.update(scenario_cfg_lib.avl_vuart_ui_select(scenario_info))
|
||||
|
||||
# pre board_private
|
||||
scenario_item_values["vm,board_private,rootfs"] = board_cfg_lib.get_rootfs(board_info)
|
||||
scenario_item_values["vm,board_private,console"] = board_cfg_lib.get_ttys_info(board_info)
|
||||
(scenario_item_values["vm,board_private,rootfs"], num) = board_cfg_lib.get_rootfs(board_info)
|
||||
|
||||
# os config
|
||||
scenario_item_values["vm,os_config,rootfs"] = board_cfg_lib.get_rootfs(board_info)
|
||||
(scenario_item_values["vm,os_config,rootfs"], num) = board_cfg_lib.get_rootfs(board_info)
|
||||
|
||||
scenario_item_values["hv,DEBUG_OPTIONS,RELEASE"] = hv_cfg_lib.N_Y
|
||||
scenario_item_values["hv,DEBUG_OPTIONS,NPK_LOGLEVEL"] = hv_cfg_lib.get_select_range("DEBUG_OPTIONS", "LOG_LEVEL")
|
||||
scenario_item_values["hv,DEBUG_OPTIONS,MEM_LOGLEVEL"] = hv_cfg_lib.get_select_range("DEBUG_OPTIONS", "LOG_LEVEL")
|
||||
scenario_item_values["hv,DEBUG_OPTIONS,CONSOLE_LOGLEVEL"] = hv_cfg_lib.get_select_range("DEBUG_OPTIONS", "LOG_LEVEL")
|
||||
scenario_item_values["hv,DEBUG_OPTIONS,SERIAL_CONSOLE"] = board_cfg_lib.get_ttys_info(board_info)
|
||||
scenario_item_values["hv,DEBUG_OPTIONS,LOG_DESTINATION"] = hv_cfg_lib.get_select_range("DEBUG_OPTIONS", "LOG_DESTINATION_BITMAP")
|
||||
|
||||
scenario_item_values["hv,CAPACITIES,MAX_KATA_VM_NUM"] = hv_cfg_lib.get_select_range("CAPACITIES", "KATA_VM_NUM")
|
||||
scenario_item_values["hv,CAPACITIES,MAX_IOAPIC_NUM"] = hv_cfg_lib.get_select_range("CAPACITIES", "IOAPIC_NUM")
|
||||
|
||||
scenario_item_values["hv,FEATURES,MULTIBOOT2"] = hv_cfg_lib.N_Y
|
||||
scenario_item_values["hv,FEATURES,SCHEDULER"] = hv_cfg_lib.SCHEDULER_TYPE
|
||||
scenario_item_values["hv,FEATURES,RELOC"] = hv_cfg_lib.N_Y
|
||||
scenario_item_values["hv,FEATURES,HYPERV_ENABLED"] = hv_cfg_lib.N_Y
|
||||
scenario_item_values["hv,FEATURES,ACPI_PARSE_ENABLED"] = hv_cfg_lib.N_Y
|
||||
scenario_item_values["hv,FEATURES,L1D_VMENTRY_ENABLED"] = hv_cfg_lib.N_Y
|
||||
scenario_item_values["hv,FEATURES,MCE_ON_PSC_DISABLED"] = hv_cfg_lib.N_Y
|
||||
scenario_item_values["hv,FEATURES,IOMMU_ENFORCE_SNP"] = hv_cfg_lib.N_Y
|
||||
|
||||
scenario_cfg_lib.ERR_LIST.update(hv_cfg_lib.ERR_LIST)
|
||||
return scenario_item_values
|
||||
|
||||
|
||||
@@ -64,13 +89,20 @@ def validate_scenario_setting(board_info, scenario_info):
|
||||
common.BOARD_INFO_FILE = board_info
|
||||
common.SCENARIO_INFO_FILE = scenario_info
|
||||
|
||||
scenario_info_items = {}
|
||||
vm_info = VmInfo(board_info, scenario_info)
|
||||
|
||||
vm_info.get_info()
|
||||
|
||||
vm_info.check_item()
|
||||
|
||||
return (scenario_cfg_lib.ERR_LIST, vm_info)
|
||||
hv_info = HvInfo(scenario_info)
|
||||
hv_info.get_info()
|
||||
hv_info.check_item()
|
||||
|
||||
scenario_info_items['vm'] = vm_info
|
||||
scenario_info_items['hv'] = hv_info
|
||||
|
||||
scenario_cfg_lib.ERR_LIST.update(hv_cfg_lib.ERR_LIST)
|
||||
return (scenario_cfg_lib.ERR_LIST, scenario_info_items)
|
||||
|
||||
|
||||
def main(args):
|
||||
@@ -80,20 +112,22 @@ def main(args):
|
||||
"""
|
||||
err_dic = {}
|
||||
|
||||
(err_dic, board_info_file, scenario_info_file, output_folder) = common.get_param(args)
|
||||
(err_dic, params) = common.get_param(args)
|
||||
if err_dic:
|
||||
return err_dic
|
||||
|
||||
if output_folder:
|
||||
common.ACRN_CONFIG_TARGET = os.path.abspath(output_folder) + '/'
|
||||
|
||||
# check env
|
||||
err_dic = common.prepare()
|
||||
if err_dic:
|
||||
return err_dic
|
||||
|
||||
common.BOARD_INFO_FILE = board_info_file
|
||||
common.SCENARIO_INFO_FILE = scenario_info_file
|
||||
common.BOARD_INFO_FILE = params['--board']
|
||||
common.SCENARIO_INFO_FILE = params['--scenario']
|
||||
common.ACRN_CONFIG_TARGET= os.path.abspath(params['--out']) + '/'
|
||||
common.get_vm_num(params['--scenario'])
|
||||
|
||||
# get board name
|
||||
(err_dic, board_name) = common.get_board_name()
|
||||
|
||||
# get scenario name
|
||||
(err_dic, scenario) = common.get_scenario_name()
|
||||
@@ -103,13 +137,16 @@ def main(args):
|
||||
# check if this is the scenario config which matched board info
|
||||
(err_dic, status) = common.is_config_file_match()
|
||||
if not status:
|
||||
err_dic['scenario config: Not match'] = "The board xml and scenario xml should be matched!"
|
||||
err_dic['scenario config'] = "The board xml and scenario xml should be matched!"
|
||||
return err_dic
|
||||
|
||||
if common.ACRN_CONFIG_TARGET:
|
||||
if params['--out']:
|
||||
scenario_dir = common.ACRN_CONFIG_TARGET + scenario + '/'
|
||||
config_hv = common.ACRN_CONFIG_TARGET + board_name + GEN_FILE[3]
|
||||
else:
|
||||
scenario_dir = ACRN_CONFIG_DEF + scenario + '/'
|
||||
config_hv = ACRN_CONFIGS + board_name + GEN_FILE[3]
|
||||
common.print_yel("{}".format("Override board defconfig...", warn=True))
|
||||
common.mkdir(scenario_dir)
|
||||
|
||||
vm_config_h = scenario_dir + GEN_FILE[0]
|
||||
@@ -117,26 +154,31 @@ def main(args):
|
||||
pci_config_c = scenario_dir + GEN_FILE[2]
|
||||
|
||||
# parse the scenario.xml
|
||||
get_scenario_item_values(board_info_file, scenario_info_file)
|
||||
(err_dic, vm_info) = validate_scenario_setting(board_info_file, scenario_info_file)
|
||||
get_scenario_item_values(params['--board'], params['--scenario'])
|
||||
(err_dic, scenario_items) = validate_scenario_setting(params['--board'], params['--scenario'])
|
||||
if err_dic:
|
||||
common.print_red("Validate the scenario item failue", err=True)
|
||||
common.print_red("Validate the scenario item failure", err=True)
|
||||
return err_dic
|
||||
|
||||
# get kata vm count
|
||||
if scenario != "logical_partition":
|
||||
scenario_cfg_lib.KATA_VM_COUNT = common.VM_COUNT - scenario_cfg_lib.DEFAULT_VM_COUNT[scenario]
|
||||
if scenario_cfg_lib.KATA_VM_COUNT > 1:
|
||||
err_dic['scenario config: kata vm count err'] = "Only one kata vm is supported!"
|
||||
scenario_cfg_lib.KATA_VM_COUNT = int(scenario_items['hv'].cap.max_kata_vm_num)
|
||||
if scenario_cfg_lib.KATA_VM_COUNT > 1:
|
||||
err_dic['scenario config'] = "Only one kata vm is supported!"
|
||||
return err_dic
|
||||
|
||||
# generate board defconfig
|
||||
with open(config_hv, 'w+') as config:
|
||||
err_dic = board_defconfig.generate_file(scenario_items['hv'], config)
|
||||
if err_dic:
|
||||
return err_dic
|
||||
|
||||
# generate vm_configuration.h
|
||||
with open(vm_config_h, 'w') as config:
|
||||
vm_configurations_h.generate_file(scenario, vm_info, config)
|
||||
vm_configurations_h.generate_file(scenario, scenario_items['vm'], config)
|
||||
|
||||
# generate vm_configuration.c
|
||||
with open(vm_config_c, 'w') as config:
|
||||
err_dic = vm_configurations_c.generate_file(scenario, vm_info, config)
|
||||
err_dic = vm_configurations_c.generate_file(scenario, scenario_items['vm'], config)
|
||||
if err_dic:
|
||||
return err_dic
|
||||
|
||||
|
@@ -31,7 +31,7 @@ class HwInfo:
|
||||
Get root devices from board info
|
||||
:return: root devices list
|
||||
"""
|
||||
self.root_dev_val = common.get_rootfs(self.board_info)
|
||||
(self.root_dev_val, num) = common.get_rootfs(self.board_info)
|
||||
return self.root_dev_val
|
||||
|
||||
def get_ttys_val(self):
|
||||
@@ -95,8 +95,8 @@ class CfgOsKern:
|
||||
self.scenario_info, "os_config", "kern_mod")
|
||||
self.kern_args = common.get_leaf_tag_map(
|
||||
self.scenario_info, "os_config", "bootargs")
|
||||
self.kern_console = common.get_leaf_tag_map(
|
||||
self.scenario_info, "os_config", "console")
|
||||
self.kern_console = common.get_hv_item_tag(
|
||||
self.scenario_info, "DEBUG_OPTIONS", "SERIAL_CONSOLE")
|
||||
self.kern_load_addr = common.get_leaf_tag_map(
|
||||
self.scenario_info, "os_config", "kern_load_addr")
|
||||
self.kern_entry_addr = common.get_leaf_tag_map(
|
||||
@@ -117,48 +117,16 @@ class CfgOsKern:
|
||||
scenario_cfg_lib.os_kern_type_check(self.kern_type, "os_config", "kern_type")
|
||||
scenario_cfg_lib.os_kern_mod_check(self.kern_mod, "os_config", "kern_mod")
|
||||
scenario_cfg_lib.os_kern_args_check(self.kern_args, "os_config", "kern_args")
|
||||
scenario_cfg_lib.os_kern_console_check(self.kern_console, "os_config", "console")
|
||||
scenario_cfg_lib.os_kern_console_check(self.kern_console, "DEBUG_OPTIONS", "SERIAL_CONSOLE")
|
||||
scenario_cfg_lib.os_kern_load_addr_check(self.kern_load_addr, "os_config", "kern_load_addr")
|
||||
scenario_cfg_lib.os_kern_entry_addr_check(self.kern_entry_addr, "os_config", "kern_entry_addr")
|
||||
scenario_cfg_lib.os_kern_root_dev_check(self.kern_root_dev, "os_config", "rootdev")
|
||||
|
||||
|
||||
class VuartTarget:
|
||||
""" This is Abstract of class of vm target vuart """
|
||||
t_vm_id = []
|
||||
t_vuart_id = []
|
||||
|
||||
def __init__(self):
|
||||
self.t_vm_id = []
|
||||
|
||||
def style_check_1(self):
|
||||
""" This is public method for style check"""
|
||||
self.t_vm_id = []
|
||||
|
||||
def style_check_2(self):
|
||||
""" This is public method for style check"""
|
||||
self.t_vm_id = []
|
||||
|
||||
|
||||
class VuartCfg(VuartTarget):
|
||||
""" This is Abstract of class of vm vuart configuration """
|
||||
v_type = []
|
||||
v_base = []
|
||||
v_irq = []
|
||||
target = VuartTarget()
|
||||
|
||||
def __init__(self):
|
||||
self.v1_type = []
|
||||
|
||||
def style_check_1(self):
|
||||
""" This is public method for style check"""
|
||||
self.v1_type = []
|
||||
|
||||
|
||||
class VuartInfo:
|
||||
""" This is Abstract of class of vm vuart setting """
|
||||
v0_vuart = VuartCfg()
|
||||
v1_vuart = VuartCfg()
|
||||
v0_vuart = {}
|
||||
v1_vuart = {}
|
||||
|
||||
def __init__(self, scenario_file):
|
||||
self.scenario_info = scenario_file
|
||||
|
@@ -194,7 +194,7 @@ def gen_logical_partition_header(vm_info, config):
|
||||
print('#define VM{0}_CONFIG_OS_BOOTARG_MAXCPUS\t\t"maxcpus={1} "'.format(
|
||||
i, cpu_bits['cpu_num']), file=config)
|
||||
print('#define VM{0}_CONFIG_OS_BOOTARG_CONSOLE\t\t"console={1} "'.format(
|
||||
i, vm_info.os_cfg.kern_console[i].strip('/dev/')), file=config)
|
||||
i, vm_info.os_cfg.kern_console.strip('/dev/')), file=config)
|
||||
print("", file=config)
|
||||
|
||||
print('/* VM pass-through devices assign policy:', file=config)
|
||||
|
Reference in New Issue
Block a user