Index: platform_tools/barelinux/bin/arm64_download |
diff --git a/platform_tools/barelinux/bin/arm64_download b/platform_tools/barelinux/bin/arm64_download |
new file mode 100755 |
index 0000000000000000000000000000000000000000..598ee89452a013a78519e8897b289fe5be057c6d |
--- /dev/null |
+++ b/platform_tools/barelinux/bin/arm64_download |
@@ -0,0 +1,167 @@ |
+#!/bin/sh |
+ |
+# Copyright 2014 Google Inc. |
+# |
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+ |
+ |
+usage() { |
+ cat >&2 <<EOF |
+arm64_download - this script downloads the Linaro's ARMv8 Aarch64 |
+toolchain and minimal embedded Linux system as well as ARM's |
+foundation model. The required files are mirrored on Google Cloud. |
+ |
+If the files are already located in the working directory, the |
+download can be skipped if the checksums match. |
+ |
+The script then starts a emulated Arm64 Linux system in the |
+background. After the boot is complete, you can SSH into the system |
+at port 8022 via user@localhost. The SSH key will be downloaded into |
+the working directery as well. |
+ |
+Requires gsutil, xz, tar, and gunzip. |
+ |
+Usage: |
+ $0 WORKING_DIRECTORY |
+ ssh-add WORKING_DIRECTORY/key |
+ ...wait... |
+ ssh -p 8022 user@localhost |
+EOF |
+ return 1 |
+} |
+ |
+try() { |
+ # print an error on nonzero return code |
+ "$@" |
+ local ret=$? |
+ if [ $ret != 0 ] ; then |
+ echo "'$@' failed and returned ${ret}." >&2 |
+ return $ret |
+ fi |
+} |
+ |
+gsutil_check_get() { |
+ local gurl="$1" |
+ local file="$2" |
+ if ! [ -f "$file" ] || \ |
+ [ "$(gsutil stat "$gurl" | sed -n 's/\W*Hash (md5):\W*//p')" \ |
+ != "$(md5sum < "$file" | sed 's/\W*-//')" ] ; then |
+ try gsutil cp "$gurl" "$file" || return |
+ fi |
+} |
+ |
+download_compiler() { |
+ local working_dir="$1" |
+ local location="$2" |
+ local toolchain="$3" |
+ |
+ try cd "$working_dir" || return |
+ |
+ try gsutil_check_get "gs://${location}/${toolchain}.tar.xz" \ |
+ "${working_dir}/${toolchain}.tar.xz" || return |
+ ( |
+ cd "$working_dir" |
+ xz --decompress --stdout < "${toolchain}.tar.xz" | tar xf - |
+ ) |
+ local dir="${working_dir}/${toolchain}" |
+ try test -d "$dir" || return |
+ try test -x "${dir}/bin/aarch64-linux-gnu-gcc" || return |
+ try test -x "${dir}/bin/aarch64-linux-gnu-g++" || return |
+} |
+ |
+download_runtime() { |
+ local working_dir="$1" |
+ local location="$2" |
+ local firmware="$3" |
+ local compressed_rootfs="$4" |
+ local compressed_foundation_model="$5" |
+ local keyfile="$6" |
+ |
+ try gsutil_check_get "gs://${location}/${firmware}" \ |
+ "${working_dir}/firmware" || return |
+ |
+ try gsutil_check_get "gs://${location}/${compressed_rootfs}" \ |
+ "${working_dir}/${compressed_rootfs}" || return |
+ |
+ try xz --decompress --stdout \ |
+ < "${working_dir}/${compressed_rootfs}" \ |
+ > "${working_dir}/rootfs" || return |
+ try test -f "${working_dir}/rootfs" || return |
+ |
+ try gsutil_check_get "gs://${location}/${compressed_foundation_model}" \ |
+ "${working_dir}/${compressed_foundation_model}" || return |
+ ( |
+ try cd "$working_dir" || return |
+ try gunzip -c "$compressed_foundation_model" | try tar xf - || return |
+ try test -d "Foundation_v8pkg" || return # Assert. |
+ ) |
+ |
+ try gsutil_check_get "gs://${location}/${keyfile}" \ |
+ "${working_dir}/key" || return |
+ chmod go= "${working_dir}/key" |
+} |
+ |
+start_arm64_image() { |
+ local working_dir="$1" |
+ local foundation_dir="${working_dir}/Foundation_v8pkg" |
+ local foundation="${foundation_dir}/models/Linux64_GCC-4.1/Foundation_v8" |
+ local firmware="${working_dir}/firmware" |
+ local rootfs="${working_dir}/rootfs" |
+ |
+ try test -d "$foundation_dir" || return |
+ try test -x "$foundation" || return |
+ try test -f "$firmware" || return |
+ try test -f "$rootfs" || return |
+ |
+ for PID in $(ps -o 'pid=' -C 'Foundation_v8') ; do |
+ kill $PID |
+ done |
+ |
+ DISPLAY='' nohup \ |
+ "$foundation" \ |
+ --image="${firmware}" \ |
+ --cores=4 \ |
+ --block-device="${rootfs}" \ |
+ --network="nat" \ |
+ --network-nat-subnet="192.168.31.0/24" \ |
+ --network-nat-ports="8022=22" \ |
+ > /dev/null 2>&1 & |
+ echo 'Listening to SSH on port 8022.' |
+} |
+ |
+arm64_download() { |
+ local working_directory="$1" |
+ local location="chromium-skia-gm/arm64env" |
+ try mkdir -p "$working_directory" || return |
+ |
+ try download_compiler \ |
+ "$working_directory" \ |
+ "$location" \ |
+ 'gcc-linaro-aarch64-linux-gnu-4.8-2013.12_linux' \ |
+ || return |
+ |
+ local rootfs='vexpress64-openembedded_lamp-armv8-gcc-4.8_20131215-557' |
+ try download_runtime \ |
+ "$working_directory" \ |
+ "$location" \ |
+ 'img-foundation.axf' \ |
+ "${rootfs}.img.CLEAN_AND_CONFIGURED.xz" \ |
+ 'FM000-KT-00035-r0p8-52rel06.tgz' \ |
+ 'CLEAN_AND_CONFIGURED_key' \ |
+ || return |
+ |
+ try start_arm64_image \ |
+ "$working_directory" \ |
+ || return |
+ |
+} |
+ |
+for command in gsutil xz tar gunzip; do |
+ try command -v "$command" > /dev/null || usage || exit |
+done |
+ |
+if [ -z "$1" ] ; then |
+ usage || exit |
+fi |
+try arm64_download "$1" || exit |