@@ -26,27 +26,73 @@ OPTEE_TAG=optee-$(cat ../optee-version.txt)
2626# Define IMG_VERSION
2727IMG_VERSION=" $( uname -m) -$OPTEE_TAG -qemuv8-ubuntu-24.04"
2828
29- # Set IMG based on NEED_EXPANDED_MEM
29+ IMG=" $IMG_VERSION "
30+ NORMAL_SESSION_NAME=" qemu_screen"
31+ EXPAND_MEMORY_SESSION_NAME=" qemu_screen_expand_ta_memory"
32+
33+ CURRENT_SESSION_NAME=$NORMAL_SESSION_NAME
34+ OTHER_SESSION_NAME=$EXPAND_MEMORY_SESSION_NAME
35+ # Change Options based on NEED_EXPANDED_MEM
3036if [ " $NEED_EXPANDED_MEM " = true ]; then
3137 IMG=" ${IMG_VERSION} -expand-ta-memory"
32- else
33- IMG= " $IMG_VERSION "
38+ CURRENT_SESSION_NAME= $EXPAND_MEMORY_SESSION_NAME
39+ OTHER_SESSION_NAME= $NORMAL_SESSION_NAME
3440fi
3541
42+ SSH_PORT=54432
43+ # StrictHostKeyChecking=no: Bypasses the interactive prompt to confirm the
44+ # host's authenticity.
45+ # UserKnownHostsFile=/dev/null: Prevents saving host keys to disk; this avoids
46+ # "Host key verification failed" errors when the QEMU instance restarts with
47+ # a new identity.
48+ SSH_OPTIONS=" -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o BatchMode=yes"
49+ SSH_TARGET=" root@127.0.0.1"
50+
51+ SCREEN_LOG_PATH=screenlog.0
52+ SERIAL_LOG_PATH=/tmp/serial.log
53+
3654# Function to download image
3755download_image () {
3856 curl " https://nightlies.apache.org/teaclave/teaclave-trustzone-sdk/${IMG} .tar.gz" | tar zxv
3957}
4058
41- # Functions for running commands in QEMU screen
59+ # Functions for running commands in QEMU
4260run_in_qemu () {
43- (screen -S qemu_screen -p 0 -X stuff " $1 \n" ) || (echo " run_in_qemu '$1 ' failed" && cat /tmp/serial.log)
44- sleep 5
61+ run_in_qemu_with_timeout_secs " $1 " 10s
4562}
4663
4764run_in_qemu_with_timeout_secs () {
48- (screen -S qemu_screen -p 0 -X stuff " $1 \n" ) || (echo " run_in_qemu '$1 ' failed" && cat /tmp/serial.log)
49- sleep $2
65+ timeout " $2 " \
66+ ssh $SSH_TARGET -p $SSH_PORT $SSH_OPTIONS " $1 "
67+ }
68+
69+ copy_to_qemu () {
70+ local dest_path=$1
71+ shift
72+
73+ timeout 60s \
74+ scp -P $SSH_PORT $SSH_OPTIONS $@ $SSH_TARGET :" $dest_path "
75+ }
76+
77+ copy_ta_to_qemu () {
78+ copy_to_qemu " /lib/optee_armtz/" $@
79+ run_in_qemu " chmod 0444 /lib/optee_armtz/*.ta"
80+ }
81+
82+ copy_ca_to_qemu () {
83+ copy_to_qemu " /usr/bin/" $@
84+ }
85+
86+ copy_plugin_to_qemu () {
87+ copy_to_qemu " /usr/lib/tee-supplicant/plugins/" $@
88+ run_in_qemu " chmod 0666 /usr/lib/tee-supplicant/plugins/*.so"
89+ }
90+
91+ # Functions for handling failure
92+ print_detail_and_exit () {
93+ cat -v $SCREEN_LOG_PATH
94+ cat -v $SERIAL_LOG_PATH
95+ exit 1
5096}
5197
5298# Check if the image file exists locally
@@ -58,11 +104,29 @@ else
58104fi
59105
60106mkdir -p shared
107+ # Keeps the shared folder for ease of manual developer verification.
108+ # "mkdir -p shared && mount -t 9p -o trans=virtio host shared"
61109
110+ # Terminate existing QEMU screen sessions to prevent conflicts.
111+ if screen -list | grep -q " \.${OTHER_SESSION_NAME} [[:space:]]" ; then
112+ echo " Other Session '${OTHER_SESSION_NAME} ' is running, terminate it to prevent conflicts"
113+ screen -S $OTHER_SESSION_NAME -X quit
114+ rm -f $SERIAL_LOG_PATH && rm -f $SCREEN_LOG_PATH
115+ fi
62116# Start QEMU screen
63- screen -L -d -m -S qemu_screen ./optee-qemuv8.sh $IMG
64- sleep 30
65- run_in_qemu " root"
66- run_in_qemu " mkdir -p shared && mount -t 9p -o trans=virtio host shared && cd shared"
67- # libteec.so.2 since OP-TEE 4.2.0, for legacy versions:
68- run_in_qemu " [ ! -e /usr/lib/libteec.so.1 ] && ln -s /usr/lib/libteec.so /usr/lib/libteec.so.1"
117+ if screen -list | grep -q " \.${CURRENT_SESSION_NAME} [[:space:]]" ; then
118+ echo " Session '${CURRENT_SESSION_NAME} ' is already running. Skipping start."
119+ else
120+ echo " Starting new session: ${CURRENT_SESSION_NAME} "
121+ screen -L -d -m -S $CURRENT_SESSION_NAME ./optee-qemuv8.sh $IMG
122+ fi
123+
124+ TEST_QEMU_SCRIPT_NAME=/tmp/teaclave-$CURRENT_SESSION_NAME .sh
125+ cat << EOF > "$TEST_QEMU_SCRIPT_NAME "
126+ until ssh -p $SSH_PORT $SSH_TARGET $SSH_OPTIONS "true" >/dev/null 2>&1; do
127+ printf "."
128+ sleep 1
129+ done
130+ EOF
131+ timeout 30s bash $TEST_QEMU_SCRIPT_NAME
132+ echo " QEMU SSH Ready"
0 commit comments