blob: 60d93290f318540417b6fe7b3c47befbd22c836d [file] [log] [blame]
Jiyong Park17e3ed42022-08-29 17:27:00 +09001#!/bin/bash
2
3# Copyright 2020 Google Inc. All rights reserved.
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16
Nikita Ioffe48d40392022-12-21 15:59:40 +000017# vm_shell.sh: utilities to interact with Microdroid VMs
18
19function print_help() {
20 echo "vm_shell.sh provides utilities to interact with Microdroid VMs"
21 echo ""
22 echo "Available commands:"
23 echo " connect [cid] - establishes adb connection with the VM"
24 echo " cid - cid of the VM to connect to. If not specified user will "
25 echo " be promted to select one from the list of available cids"
26 echo ""
Nikita Ioffe50121bf2022-12-21 17:50:39 +000027 echo " start-microdroid [--auto-connect] [-- extra_args]"
28 echo " Starts a Microdroid VM. Args after the -- will be"
29 echo " passed through to the invocation of the "
30 echo " /apex/com.android.virt/bin/vm run-microdroid binary."
31 echo ""
32 echo " E.g.:"
Pierre-Clément Tosi8d6bfc22024-11-29 09:54:08 +000033 echo " vm_shell start-microdroid -- --protected --debug full"
Nikita Ioffe50121bf2022-12-21 17:50:39 +000034 echo ""
35 echo " --auto-connect - automatically connects to the started VMs"
36 echo ""
Nikita Ioffe48d40392022-12-21 15:59:40 +000037 echo " help - prints this help message"
38}
Jiyong Park17e3ed42022-08-29 17:27:00 +090039
40function connect_vm() {
41 cid=$1
42 echo Connecting to CID ${cid}
Nikita Ioffe48d40392022-12-21 15:59:40 +000043 adb disconnect localhost:8000 2>/dev/null
Jiyong Park17e3ed42022-08-29 17:27:00 +090044 adb forward tcp:8000 vsock:${cid}:5555
45 adb connect localhost:8000
46 adb -s localhost:8000 root
Jiyong Parkbffe1922022-10-24 10:16:37 +090047 adb -s localhost:8000 wait-for-device
Jiyong Park17e3ed42022-08-29 17:27:00 +090048 adb -s localhost:8000 shell
49 exit 0
50}
51
Nikita Ioffe48d40392022-12-21 15:59:40 +000052function list_cids() {
53 local selected_cid=$1
54 local available_cids=$(adb shell /apex/com.android.virt/bin/vm list | awk 'BEGIN { FS="[:,]" } /cid/ { print $2; }')
55 echo "${available_cids}"
56}
Jiyong Park17e3ed42022-08-29 17:27:00 +090057
Nikita Ioffe48d40392022-12-21 15:59:40 +000058function handle_connect_cmd() {
59 selected_cid=$1
Jiyong Park17e3ed42022-08-29 17:27:00 +090060
Nikita Ioffe48d40392022-12-21 15:59:40 +000061 available_cids=$(list_cids)
Jiyong Park17e3ed42022-08-29 17:27:00 +090062
Nikita Ioffe48d40392022-12-21 15:59:40 +000063 if [ -z "${available_cids}" ]; then
64 echo No VM is available
65 exit 1
66 fi
Steven Moreland187c96e2022-10-21 23:15:42 +000067
Nikita Ioffe48d40392022-12-21 15:59:40 +000068 if [ ! -n "${selected_cid}" ]; then
Nikita Ioffe47f71f62023-01-19 22:13:30 +000069 if [ ${#selected_cid[@]} -eq 1 ]; then
70 selected_cid=${available_cids[0]}
71 else
72 PS3="Select CID of VM to adb-shell into: "
73 select cid in ${available_cids}
74 do
75 selected_cid=${cid}
76 break
77 done
78 fi
Nikita Ioffe48d40392022-12-21 15:59:40 +000079 fi
80
81 if [[ ! " ${available_cids[*]} " =~ " ${selected_cid} " ]]; then
82 echo VM of CID $selected_cid does not exist. Available CIDs: ${available_cids}
83 exit 1
84 fi
85
86 connect_vm ${selected_cid}
87}
88
Nikita Ioffe50121bf2022-12-21 17:50:39 +000089function handle_start_microdroid_cmd() {
90 while [[ "$#" -gt 0 ]]; do
91 case $1 in
92 --auto-connect) auto_connect=true; ;;
93 --) shift; passthrough_args="$@"; break ;;
94 *) echo "Unknown argument: $1"; exit 1 ;;
95 esac
96 shift
97 done
98 if [[ "${auto_connect}" == true ]]; then
David Brazdil878b5da2023-01-11 13:49:38 +000099 adb shell /apex/com.android.virt/bin/vm run-microdroid "${passthrough_args}" &
100 trap "kill $!" EXIT
Nikita Ioffe50121bf2022-12-21 17:50:39 +0000101 sleep 2
102 handle_connect_cmd
103 else
104 adb shell /apex/com.android.virt/bin/vm run-microdroid "${passthrough_args}"
105 fi
106}
107
Nikita Ioffe48d40392022-12-21 15:59:40 +0000108cmd=$1
109shift
110
111case $cmd in
112 connect) handle_connect_cmd "$@" ;;
Nikita Ioffe50121bf2022-12-21 17:50:39 +0000113 start-microdroid) handle_start_microdroid_cmd "$@" ;;
Nikita Ioffe48d40392022-12-21 15:59:40 +0000114 help) print_help ;;
115 *) print_help; exit 1 ;;
116esac