mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2026-06-06 17:21:22 +00:00
Adjust the 'launch_uos.sh' script used to start a LaaG User VM to user the OVMF.fd bios file installed under /usr/share/acrn/bios. It currently points at a file in the local folder but neither our instructions nor our installation script file puts it in this location. That results in an error when you try to launch it. Tracked-On: #3673 Signed-off-by: Geoffroy Van Cutsem <geoffroy.vancutsem@intel.com>
151 lines
3.7 KiB
Bash
Executable File
151 lines
3.7 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
offline_path="/sys/class/vhm/acrn_vhm"
|
|
|
|
# Check the device file of /dev/acrn_hsm to determine the offline_path
|
|
if [ -e "/dev/acrn_hsm" ]; then
|
|
offline_path="/sys/class/acrn/acrn_hsm"
|
|
fi
|
|
|
|
|
|
function run_container()
|
|
{
|
|
vm_name=vm1
|
|
config_src="/usr/share/acrn/samples/nuc/runC.json"
|
|
shell="/usr/share/acrn/conf/add/$vm_name.sh"
|
|
arg_file="/usr/share/acrn/conf/add/$vm_name.args"
|
|
runc_bundle="/usr/share/acrn/conf/add/runc/$vm_name"
|
|
rootfs_dir="/usr/share/acrn/conf/add/runc/rootfs"
|
|
config_dst="$runc_bundle/config.json"
|
|
|
|
|
|
input=$(runc list -f table | awk '{print $1}''{print $3}')
|
|
arr=(${input// / })
|
|
|
|
for((i=0;i<${#arr[@]};i++))
|
|
do
|
|
if [ "$vm_name" = "${arr[$i]}" ]; then
|
|
if [ "running" = "${arr[$i+1]}" ]; then
|
|
echo "runC instance ${arr[$i]} is running"
|
|
exit
|
|
else
|
|
runc kill ${arr[$i]}
|
|
runc delete ${arr[$i]}
|
|
fi
|
|
fi
|
|
done
|
|
vmsts=$(acrnctl list)
|
|
vms=(${vmsts// / })
|
|
for((i=0;i<${#vms[@]};i++))
|
|
do
|
|
if [ "$vm_name" = "${vms[$i]}" ]; then
|
|
if [ "stopped" != "${vms[$i+1]}" ]; then
|
|
echo "Uos ${vms[$i]} ${vms[$i+1]}"
|
|
acrnctl stop ${vms[$i]}
|
|
fi
|
|
fi
|
|
done
|
|
|
|
|
|
if [ ! -f "$shell" ]; then
|
|
echo "Pls add the vm at first!"
|
|
exit
|
|
fi
|
|
|
|
if [ ! -f "$arg_file" ]; then
|
|
echo "Pls add the vm args!"
|
|
exit
|
|
fi
|
|
|
|
|
|
if [ ! -d "$rootfs_dir" ]; then
|
|
mkdir -p "$rootfs_dir"
|
|
fi
|
|
if [ ! -d "$runc_bundle" ]; then
|
|
mkdir -p "$runc_bundle"
|
|
fi
|
|
if [ ! -f "$config_dst" ]; then
|
|
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
|
|
fi
|
|
runc run --bundle $runc_bundle -d $vm_name
|
|
echo "The runC container is running in backgroud"
|
|
echo "'#runc exec <vmname> bash' to login the container bash"
|
|
exit
|
|
}
|
|
|
|
function launch_clear()
|
|
{
|
|
mac=$(cat /sys/class/net/e*/address)
|
|
vm_name=vm$1
|
|
mac_seed=${mac:9:8}-${vm_name}
|
|
|
|
#check if the vm is running or not
|
|
vm_ps=$(pgrep -a -f acrn-dm)
|
|
result=$(echo $vm_ps | grep -w "${vm_name}")
|
|
if [[ "$result" != "" ]]; then
|
|
echo "$vm_name is running, can't create twice!"
|
|
exit
|
|
fi
|
|
|
|
#logger_setting, format: logger_name,level; like following
|
|
logger_setting="--logger_setting console,level=4;kmsg,level=3;disk,level=5"
|
|
|
|
#for pm by vuart setting
|
|
pm_channel="--pm_notify_channel uart "
|
|
pm_by_vuart="--pm_by_vuart pty,/run/acrn/life_mngr_"$vm_name
|
|
pm_vuart_node=" -s 1:0,lpc -l com2,/run/acrn/life_mngr_"$vm_name
|
|
|
|
#for memsize setting
|
|
mem_size=2048M
|
|
|
|
acrn-dm -A -m $mem_size -c $2 -s 0:0,hostbridge \
|
|
-s 2,pci-gvt -G "$3" \
|
|
-s 5,virtio-console,@stdio:stdio_port \
|
|
-s 6,virtio-hyper_dmabuf \
|
|
-s 3,virtio-blk,/home/clear/uos/uos.img \
|
|
-s 4,virtio-net,tap0 \
|
|
-s 7,virtio-rnd \
|
|
--ovmf /usr/share/acrn/bios/OVMF.fd \
|
|
$pm_channel $pm_by_vuart $pm_vuart_node \
|
|
$logger_setting \
|
|
--mac_seed $mac_seed \
|
|
$vm_name
|
|
}
|
|
|
|
#add following cmdline to grub.cfg and update kernel
|
|
#when launching LaaG by OVMF
|
|
#rw rootwait maxcpus=1 nohpet console=tty0 console=hvc0
|
|
#console=ttyS0 no_timer_check ignore_loglevel
|
|
#log_buf_len=16M consoleblank=0
|
|
#tsc=reliable i915.avail_planes_per_pipe="64 448 8"
|
|
#i915.enable_hangcheck=0 i915.nuclear_pageflip=1
|
|
#i915.enable_guc_loading=0
|
|
#i915.enable_guc_submission=0 i915.enable_guc=0
|
|
|
|
# offline SOS CPUs except BSP before launch UOS
|
|
for i in `ls -d /sys/devices/system/cpu/cpu[1-99]`; do
|
|
online=`cat $i/online`
|
|
idx=`echo $i | tr -cd "[1-99]"`
|
|
echo cpu$idx online=$online
|
|
if [ "$online" = "1" ]; then
|
|
echo 0 > $i/online
|
|
# during boot time, cpu hotplug may be disabled by pci_device_probe during a pci module insmod
|
|
while [ "$online" = "1" ]; do
|
|
sleep 1
|
|
echo 0 > $i/online
|
|
online=`cat $i/online`
|
|
done
|
|
echo $idx > ${offline_path}/offline_cpu
|
|
fi
|
|
done
|
|
|
|
|
|
if [ "$1" = "-C" ];then
|
|
echo "runc_container"
|
|
run_container
|
|
else
|
|
launch_clear 1 1 "64 448 8" 0x070F00
|
|
fi
|