def is_nuc_whl_linux(names, vmid): uos_type = names['uos_types'][vmid] board_name = names['board_name'] if launch_cfg_lib.is_linux_like(uos_type) and board_name not in ("apl-mrb", "apl-up2"): return True return False
def tap_uos_net(names, virt_io, vmid, config): uos_type = names['uos_types'][vmid] board_name = names['board_name'] vm_name = common.undline_name(uos_type).lower() if launch_cfg_lib.is_linux_like(uos_type) or uos_type in ("ANDROID", "ALIOS"): i = 0 for mount_flag in launch_cfg_lib.MOUNT_FLAG_DIC[vmid]: if not mount_flag: i += 1 continue blk = virt_io['block'][vmid][i] rootfs_img = blk.split(':')[1].strip(':') print('if [ ! -f "/data{}/{}" ]; then'.format(i, rootfs_img), file=config) print(' echo "no /data{}/{}, exit"'.format(i, rootfs_img), file=config) print(" exit", file=config) print("fi", file=config) print("", file=config) i += 1 print("#vm-name used to generate uos-mac address", file=config) print("mac=$(cat /sys/class/net/e*/address)", file=config) print("vm_name=post_vm_id$1", file=config) print("mac_seed=${mac:0:17}-${vm_name}", file=config) print("", file=config) for net in virt_io['network'][vmid]: if net: net_name = net if ',' in net: net_name = net.split(',')[0] print("tap_net tap_{}".format(net_name), file=config) print("#check if the vm is running or not", file=config) print("vm_ps=$(pgrep -a -f acrn-dm)", file=config) print('result=$(echo $vm_ps | grep -w "${vm_name}")', file=config) print('if [[ "$result" != "" ]]; then', file=config) print(' echo "$vm_name is running, can\'t create twice!"', file=config) print(" exit", file=config) print("fi", file=config) print("", file=config)
def dm_arg_set(names, sel, virt_io, dm, vmid, config): uos_type = names['uos_types'][vmid] board_name = names['board_name'] boot_image_type(dm, vmid, config) # uuid get scenario_uuid = launch_cfg_lib.get_scenario_uuid(vmid) sos_vmid = launch_cfg_lib.get_sos_vmid() # clearlinux/android/alios print('acrn-dm -A -m $mem_size -s 0:0,hostbridge -U {} \\'.format(scenario_uuid), file=config) if launch_cfg_lib.is_linux_like(uos_type) or uos_type in ("ANDROID", "ALIOS"): if uos_type in ("ANDROID", "ALIOS"): print(' $npk_virt \\', file=config) print(" -s {},virtio-rpmb \\".format(launch_cfg_lib.virtual_dev_slot("virtio-rpmb")), file=config) print(" --enable_trusty \\", file=config) # mac_seed print(" --mac_seed $mac_seed \\", file=config) if dm['rtos_type'][vmid] != "no": if virt_io: print(" --virtio_poll 1000000 \\", file=config) if dm['rtos_type'][vmid] == "Soft RT": print(" --rtvm \\", file=config) if dm['rtos_type'][vmid] == "Hard RT": print(" --lapic_pt \\", file=config) # windows if uos_type == "WINDOWS": print(" --windows \\", file=config) # pm_channel set if dm['pm_channel'][vmid] and dm['pm_channel'][vmid] != None: pm_key = dm['pm_channel'][vmid] if pm_key == "vuart1(tty)": vuart_base = launch_cfg_lib.get_vuart1_from_scenario(sos_vmid + vmid) if vuart_base == "INVALID_COM_BASE": err_key = "uos:id={}:poweroff_channel".format(vmid) launch_cfg_lib.ERR_LIST[err_key] = "vuart1 of VM{} in scenario file should select 'SOS_COM2_BASE'".format(sos_vmid + vmid) return print(" {} \\".format(launch_cfg_lib.PM_CHANNEL_DIC[pm_key]), file=config) # set logger_setting for all VMs print(" $logger_setting \\", file=config) # XHCI args set xhci_args_set(dm, vmid, config) # VIRTIO args set virtio_args_set(dm, virt_io, vmid, config) # GVT args set gvt_arg_set(dm, vmid, uos_type, config) # vbootloader setting vboot_arg_set(dm, vmid, config) # pcpu-list args set pcpu_arg_set(dm, vmid, config) for value in sel.bdf.values(): if value[vmid]: print(" $intr_storm_monitor \\", file=config) break if uos_type != "PREEMPT-RT LINUX": print(" -s 1:0,lpc \\", file=config) # redirect console if dm['vuart0'][vmid] == "Enable": print(" -l com1,stdio \\", file=config) if launch_cfg_lib.is_linux_like(uos_type) or uos_type in ("ANDROID", "ALIOS"): if uos_type != "PREEMPT-RT LINUX": print(" -s {},virtio-hyper_dmabuf \\".format(launch_cfg_lib.virtual_dev_slot("virtio-hyper_dmabuf")), file=config) if board_name == "apl-mrb": print(" -i /run/acrn/ioc_$vm_name,0x20 \\", file=config) print(" -l com2,/run/acrn/ioc_$vm_name \\", file=config) if not is_nuc_whl_linux(names, vmid): print(" -s {},wdt-i6300esb \\".format(launch_cfg_lib.virtual_dev_slot("wdt-i6300esb")), file=config) set_dm_pt(names, sel, vmid, config) print(" $vm_name", file=config) print("}", file=config)
def run_container(board_name, uos_type, config): """ The container contains the clearlinux as rootfs :param board_name: board name :param uos_type: the os name of user os :param config: the file pointer to store the information """ # the runC.json is store in the path under board name, but for nuc7i7dnb/nuc6cayh/kbl-nuc-i7 is under nuc/ if 'nuc' in board_name: board_name = 'nuc' if board_name not in ("apl-mrb", "nuc") or not launch_cfg_lib.is_linux_like(uos_type): return print("function run_container()", file=config) print("{", file=config) print("vm_name=vm1", file=config) print('config_src="/usr/share/acrn/samples/{}/runC.json"'.format(board_name), file=config) print('shell="/usr/share/acrn/conf/add/$vm_name.sh"', file=config) print('arg_file="/usr/share/acrn/conf/add/$vm_name.args"', file=config) print('runc_bundle="/usr/share/acrn/conf/add/runc/$vm_name"', file=config) print('rootfs_dir="/usr/share/acrn/conf/add/runc/rootfs"', file=config) print('config_dst="$runc_bundle/config.json"', file=config) print("", file=config) print("", file=config) print("input=$(runc list -f table | awk '{print $1}''{print $3}')", file=config) print("arr=(${input// / })", file=config) print("", file=config) print("for((i=0;i<${#arr[@]};i++))", file=config) print("do", file=config) print(' if [ "$vm_name" = "${arr[$i]}" ]; then', file=config) print(' if [ "running" = "${arr[$i+1]}" ]; then', file=config) print(' echo "runC instance ${arr[$i]} is running"', file=config) print(" exit", file=config) print(" else", file=config) print(" runc kill ${arr[$i]}", file=config) print(" runc delete ${arr[$i]}", file=config) print(" fi", file=config) print(" fi", file=config) print("done", file=config) print("vmsts=$(acrnctl list)", file=config) print("vms=(${vmsts// / })", file=config) print("for((i=0;i<${#vms[@]};i++))", file=config) print("do", file=config) print(' if [ "$vm_name" = "${vms[$i]}" ]; then', file=config) print(' if [ "stopped" != "${vms[$i+1]}" ]; then', file=config) print(' echo "Uos ${vms[$i]} ${vms[$i+1]}"', file=config) print(" acrnctl stop ${vms[$i]}", file=config) print(" fi", file=config) print(" fi", file=config) print("done", file=config) dst_str = """ cp "$config_src" "$config_dst" args=$(sed '{s/-C//g;s/^[ \\t]*//g;s/^/\\"/;s/ /\\",\\"/g;s/$/\\"/}' ${arg_file}) sed -i "s|\\"sh\\"|\\"$shell\\", $args|" $config_dst""" print('', file=config) print('if [ ! -f "$shell" ]; then', file=config) print(' echo "Pls add the vm at first!"', file=config) print(' exit', file=config) print('fi', file=config) print('', file=config) print('if [ ! -f "$arg_file" ]; then', file=config) print(' echo "Pls add the vm args!"', file=config) print(' exit', file=config) print('fi', file=config) print('', file=config) print('if [ ! -d "$rootfs_dir" ]; then', file=config) print(' mkdir -p "$rootfs_dir"', file=config) print('fi', file=config) print('if [ ! -d "$runc_bundle" ]; then', file=config) print(' mkdir -p "$runc_bundle"', file=config) print('fi', file=config) print('if [ ! -f "$config_dst" ]; then', file=config) print('{}'.format(dst_str), file=config) print('fi', file=config) print('runc run --bundle $runc_bundle -d $vm_name', file=config) print('echo "The runC container is running in backgroud"', file=config) print('echo "\'#runc exec <vmname> bash\' to login the container bash"', file=config) print('exit', file=config) print('}', file=config) print('', file=config)
def dm_arg_set(names, sel, virt_io, dm, vmid, config): uos_type = names['uos_types'][vmid] board_name = names['board_name'] boot_image_type(dm, vmid, config) # uuid get sos_vmid = launch_cfg_lib.get_sos_vmid() scenario_uuid = launch_cfg_lib.get_scenario_uuid(vmid, sos_vmid) # clearlinux/android/alios print('acrn-dm -A -m $mem_size -s 0:0,hostbridge -U {} \\'.format( scenario_uuid), file=config) if launch_cfg_lib.is_linux_like(uos_type) or uos_type in ("ANDROID", "ALIOS"): if uos_type in ("ANDROID", "ALIOS"): print(' $npk_virt \\', file=config) print(" -s {},virtio-rpmb \\".format( launch_cfg_lib.virtual_dev_slot("virtio-rpmb")), file=config) print(" --enable_trusty \\", file=config) # mac_seed print(" --mac_seed $mac_seed \\", file=config) if dm['rtos_type'][vmid] != "no": if virt_io: print(" --virtio_poll 1000000 \\", file=config) if dm['rtos_type'][vmid] == "Soft RT": print(" --rtvm \\", file=config) if dm['rtos_type'][vmid] == "Hard RT": print(" --lapic_pt \\", file=config) # windows if uos_type == "WINDOWS": print(" --windows \\", file=config) # pm_channel set if dm['pm_channel'][vmid] and dm['pm_channel'][vmid] != None: pm_key = dm['pm_channel'][vmid] pm_vuart = "--pm_notify_channel uart" if vmid in dm["allow_trigger_s5"] and dm["allow_trigger_s5"][ vmid] == 'y': pm_vuart = pm_vuart + ",allow_trigger_s5 " else: pm_vuart = pm_vuart + " " if pm_key == "vuart1(tty)": vuart_base = launch_cfg_lib.get_vuart1_from_scenario(sos_vmid + vmid) if vuart_base == "INVALID_COM_BASE": err_key = "uos:id={}:poweroff_channel".format(vmid) launch_cfg_lib.ERR_LIST[ err_key] = "vuart1 of VM{} in scenario file should select 'SOS_COM2_BASE'".format( sos_vmid + vmid) return scenario_cfg_lib.get_sos_vuart_settings() print(" {} \\".format(pm_vuart + launch_cfg_lib.PM_CHANNEL_DIC[pm_key] + scenario_cfg_lib.SOS_UART1_VALID_NUM), file=config) elif pm_key == "vuart1(pty)": print(" {} \\".format(pm_vuart + launch_cfg_lib.PM_CHANNEL_DIC[pm_key]), file=config) else: print(" {} \\".format(launch_cfg_lib.PM_CHANNEL_DIC[pm_key]), file=config) # set logger_setting for all VMs print(" $logger_setting \\", file=config) # GVT args set gvt_arg_set(dm, vmid, uos_type, config) # XHCI args set xhci_args_set(dm, vmid, config) # VIRTIO args set virtio_args_set(dm, virt_io, vmid, config) # vbootloader setting vboot_arg_set(dm, vmid, config) # pcpu-list args set pcpu_arg_set(dm, vmid, config) # shm regions args set shm_arg_set(dm, vmid, config) # ssram set ssram_enabled = 'n' try: ssram_enabled = common.get_hv_item_tag(common.SCENARIO_INFO_FILE, "FEATURES", "SSRAM", "SSRAM_ENABLED") except: pass if uos_type == "PREEMPT-RT LINUX" and ssram_enabled == 'y': print(" --ssram \\", file=config) for value in sel.bdf.values(): if value[vmid]: print(" $intr_storm_monitor \\", file=config) break if uos_type != "PREEMPT-RT LINUX": print(" -s 1:0,lpc \\", file=config) # redirect console if dm['vuart0'][vmid] == "Enable": print(" -l com1,stdio \\", file=config) if launch_cfg_lib.is_linux_like(uos_type) or uos_type in ("ANDROID", "ALIOS"): if board_name == "apl-mrb": print(" -i /run/acrn/ioc_$vm_name,0x20 \\", file=config) print(" -l com2,/run/acrn/ioc_$vm_name \\", file=config) if not is_nuc_whl_linux(names, vmid): print(" -s {},wdt-i6300esb \\".format( launch_cfg_lib.virtual_dev_slot("wdt-i6300esb")), file=config) set_dm_pt(names, sel, vmid, config, dm) if dm['console_vuart'][vmid] == "Enable": print(" -s {},uart,vuart_idx:0 \\".format( launch_cfg_lib.virtual_dev_slot("console_vuart")), file=config) for vuart_id in dm["communication_vuarts"][vmid]: if not vuart_id: break print(" -s {},uart,vuart_idx:{} \\".format( launch_cfg_lib.virtual_dev_slot( "communication_vuart_{}".format(vuart_id)), vuart_id), file=config) print(" $vm_name", file=config) print("}", file=config)