Files
acrn-hypervisor/devicemodel/samples/nuc/launch_uos.sh
Gao Junhao efccdd22a0 dm: add virtio-rnd device to command line
When FE virtio devices work in polling mode, sshd.service can't start
normally and blocks at generating random bytes. When reading from
the random source, getrandom() blocks caused by no random bytes.

Tracked-On: #3268
Signed-off-by: Gao Junhao <junhao.gao@intel.com>
Reviewed-by: Yu Wang <yu1.wang@intel.com>
2019-06-18 09:56:33 +08:00

139 lines
3.5 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 memsize setting
mem_size=2048M
acrn-dm -A -m $mem_size -c $2 -s 0:0,hostbridge -s 1:0,lpc -l com1,stdio \
-s 2,pci-gvt -G "$3" \
-s 5,virtio-console,@pty:pty_port \
-s 6,virtio-hyper_dmabuf \
-s 3,virtio-blk,/home/clear/uos/uos.img \
-s 4,virtio-net,tap0 \
-s 7,virtio-rnd \
$logger_setting \
--mac_seed $mac_seed \
-k /usr/lib/kernel/default-iot-lts2018 \
-B "root=/dev/vda3 rw rootwait maxcpus=$2 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=$4 \
i915.enable_hangcheck=0 i915.nuclear_pageflip=1 i915.enable_guc_loading=0 \
i915.enable_guc_submission=0 i915.enable_guc=0" $vm_name
}
# 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