1f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org#!/bin/sh 2f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org 3f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org# Copyright 2014 Google Inc. 4f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org# 5f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org# Use of this source code is governed by a BSD-style license that can be 6f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org# found in the LICENSE file. 7f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org 8f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org 9f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.orgusage() { 10f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org cat >&2 <<EOF 11f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.orgarm64_download - this script downloads the Linaro's ARMv8 Aarch64 12f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.orgtoolchain and minimal embedded Linux system as well as ARM's 13f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.orgfoundation model. The required files are mirrored on Google Cloud. 14f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org 15f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.orgIf the files are already located in the working directory, the 16f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.orgdownload can be skipped if the checksums match. 17f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org 18f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.orgThe script then starts a emulated Arm64 Linux system in the 19f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.orgbackground. After the boot is complete, you can SSH into the system 20f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.orgat port 8022 via user@localhost. The SSH key will be downloaded into 21f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.orgthe working directery as well. 22f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org 23f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.orgRequires gsutil, xz, tar, and gunzip. 24f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org 25f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.orgUsage: 26f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org $0 WORKING_DIRECTORY 27f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org ssh-add WORKING_DIRECTORY/key 28f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org ...wait... 29f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org ssh -p 8022 user@localhost 30f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.orgEOF 31f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org return 1 32f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org} 33f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org 34f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.orgtry() { 35f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org # print an error on nonzero return code 36f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org "$@" 37f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org local ret=$? 38f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org if [ $ret != 0 ] ; then 39f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org echo "'$@' failed and returned ${ret}." >&2 40f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org return $ret 41f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org fi 42f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org} 43f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org 440015df93b3a583d05e1ff4a0dc548be6d4f20d25commit-bot@chromium.orgdownload_necessary_software_to_dir() ( 450015df93b3a583d05e1ff4a0dc548be6d4f20d25commit-bot@chromium.org cd "$1" 460015df93b3a583d05e1ff4a0dc548be6d4f20d25commit-bot@chromium.org local location="chromium-skia-gm/arm64env" 470015df93b3a583d05e1ff4a0dc548be6d4f20d25commit-bot@chromium.org try gsutil cp "gs://${location}/md5sum.txt" . || return 480015df93b3a583d05e1ff4a0dc548be6d4f20d25commit-bot@chromium.org if md5sum -c --quiet "md5sum.txt"; then 490015df93b3a583d05e1ff4a0dc548be6d4f20d25commit-bot@chromium.org return 0 50f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org fi 510015df93b3a583d05e1ff4a0dc548be6d4f20d25commit-bot@chromium.org try gsutil cp "gs://${location}/*" . || return 520015df93b3a583d05e1ff4a0dc548be6d4f20d25commit-bot@chromium.org) 53f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org 540015df93b3a583d05e1ff4a0dc548be6d4f20d25commit-bot@chromium.orginstall_compiler() { 55f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org local working_dir="$1" 560015df93b3a583d05e1ff4a0dc548be6d4f20d25commit-bot@chromium.org local toolchain="gcc-linaro-aarch64-linux-gnu-4.8-2013.12_linux" 57f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org ( 580015df93b3a583d05e1ff4a0dc548be6d4f20d25commit-bot@chromium.org try cd "$working_dir" || return 590015df93b3a583d05e1ff4a0dc548be6d4f20d25commit-bot@chromium.org try test -f "${toolchain}.tar.xz" || return 600015df93b3a583d05e1ff4a0dc548be6d4f20d25commit-bot@chromium.org try xz --decompress --stdout < "${toolchain}.tar.xz" | \ 610015df93b3a583d05e1ff4a0dc548be6d4f20d25commit-bot@chromium.org try tar xf - || return 62f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org ) 63f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org local dir="${working_dir}/${toolchain}" 64f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org try test -d "$dir" || return 65f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org try test -x "${dir}/bin/aarch64-linux-gnu-gcc" || return 66f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org try test -x "${dir}/bin/aarch64-linux-gnu-g++" || return 67f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org} 68f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org 690015df93b3a583d05e1ff4a0dc548be6d4f20d25commit-bot@chromium.orginstall_runtime() { 70f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org local working_dir="$1" 71f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org 720015df93b3a583d05e1ff4a0dc548be6d4f20d25commit-bot@chromium.org local firmware='img-foundation.axf' 730015df93b3a583d05e1ff4a0dc548be6d4f20d25commit-bot@chromium.org local rootfs='vexpress64-openembedded_lamp-armv8-gcc-4.8_20131215-557' 740015df93b3a583d05e1ff4a0dc548be6d4f20d25commit-bot@chromium.org local compressed_rootfs="${rootfs}.img.CLEAN_AND_CONFIGURED.xz" 750015df93b3a583d05e1ff4a0dc548be6d4f20d25commit-bot@chromium.org local compressed_foundation_model='FM000-KT-00035-r0p8-52rel06.tgz' 760015df93b3a583d05e1ff4a0dc548be6d4f20d25commit-bot@chromium.org local keyfile='CLEAN_AND_CONFIGURED_key' 77f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org 780015df93b3a583d05e1ff4a0dc548be6d4f20d25commit-bot@chromium.org try cp "${working_dir}/$firmware" "${working_dir}/firmware" || return 79f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org 80f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org try xz --decompress --stdout \ 810015df93b3a583d05e1ff4a0dc548be6d4f20d25commit-bot@chromium.org < "${working_dir}/${compressed_rootfs}" \ 820015df93b3a583d05e1ff4a0dc548be6d4f20d25commit-bot@chromium.org > "${working_dir}/rootfs" || return 83f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org try test -f "${working_dir}/rootfs" || return 84f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org 85f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org ( 86f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org try cd "$working_dir" || return 870015df93b3a583d05e1ff4a0dc548be6d4f20d25commit-bot@chromium.org try test -f "$compressed_foundation_model" || return 88f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org try gunzip -c "$compressed_foundation_model" | try tar xf - || return 89f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org try test -d "Foundation_v8pkg" || return # Assert. 90f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org ) 91f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org 920015df93b3a583d05e1ff4a0dc548be6d4f20d25commit-bot@chromium.org try cp "${working_dir}/${keyfile}" "${working_dir}/key" || return 930015df93b3a583d05e1ff4a0dc548be6d4f20d25commit-bot@chromium.org chmod 'go=' "${working_dir}/key" 94f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org} 95f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org 96f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.orgstart_arm64_image() { 97f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org local working_dir="$1" 98f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org local foundation_dir="${working_dir}/Foundation_v8pkg" 99f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org local foundation="${foundation_dir}/models/Linux64_GCC-4.1/Foundation_v8" 100f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org local firmware="${working_dir}/firmware" 101f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org local rootfs="${working_dir}/rootfs" 102f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org 103f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org try test -d "$foundation_dir" || return 104f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org try test -x "$foundation" || return 105f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org try test -f "$firmware" || return 106f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org try test -f "$rootfs" || return 107f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org 108f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org for PID in $(ps -o 'pid=' -C 'Foundation_v8') ; do 109f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org kill $PID 110f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org done 111f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org 112f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org DISPLAY='' nohup \ 113f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org "$foundation" \ 114f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org --image="${firmware}" \ 115f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org --cores=4 \ 116f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org --block-device="${rootfs}" \ 117f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org --network="nat" \ 118f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org --network-nat-subnet="192.168.31.0/24" \ 119f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org --network-nat-ports="8022=22" \ 120f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org > /dev/null 2>&1 & 12187126fb154af54a4e251e84f6b490f1210a4e013commit-bot@chromium.org echo 'Waiting for foundation model to boot...' 12287126fb154af54a4e251e84f6b490f1210a4e013commit-bot@chromium.org while ! ssh -i "${working_dir}/key" \ 12387126fb154af54a4e251e84f6b490f1210a4e013commit-bot@chromium.org -o NoHostAuthenticationForLocalhost=yes \ 12487126fb154af54a4e251e84f6b490f1210a4e013commit-bot@chromium.org -p 8022 user@localhost true 2> /dev/null; do 12587126fb154af54a4e251e84f6b490f1210a4e013commit-bot@chromium.org sleep 5 12687126fb154af54a4e251e84f6b490f1210a4e013commit-bot@chromium.org done 127f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org echo 'Listening to SSH on port 8022.' 128f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org} 129f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org 130f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.orgarm64_download() { 131f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org local working_directory="$1" 132f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org try mkdir -p "$working_directory" || return 133f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org 1340015df93b3a583d05e1ff4a0dc548be6d4f20d25commit-bot@chromium.org try download_necessary_software_to_dir "$working_directory" || return 135f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org 1360015df93b3a583d05e1ff4a0dc548be6d4f20d25commit-bot@chromium.org try install_compiler "$working_directory" || return 1370015df93b3a583d05e1ff4a0dc548be6d4f20d25commit-bot@chromium.org 1380015df93b3a583d05e1ff4a0dc548be6d4f20d25commit-bot@chromium.org try install_runtime "$working_directory" || return 1390015df93b3a583d05e1ff4a0dc548be6d4f20d25commit-bot@chromium.org 1400015df93b3a583d05e1ff4a0dc548be6d4f20d25commit-bot@chromium.org try start_arm64_image "$working_directory" || return 141f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org} 142f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org 1430015df93b3a583d05e1ff4a0dc548be6d4f20d25commit-bot@chromium.orgfor command in gsutil xz tar md5sum gunzip; do 144f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org try command -v "$command" > /dev/null || usage || exit 145f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.orgdone 146f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org 147f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.orgif [ -z "$1" ] ; then 148f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.org usage || exit 149f84722e47772f130d523254df2b4ed276b3f1432commit-bot@chromium.orgfi 1500015df93b3a583d05e1ff4a0dc548be6d4f20d25commit-bot@chromium.orgtry arm64_download "$1" 151