| 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
|
|
|