86cbfbeee6
R=epoger@google.com TBR=epoger@google.com NOTRY=true Author: halcanary@google.com Review URL: https://codereview.chromium.org/239653003 git-svn-id: http://skia.googlecode.com/svn/trunk@14210 2bbb7eff-a529-9590-31e7-b0007b416f81
151 lines
4.3 KiB
Bash
Executable File
151 lines
4.3 KiB
Bash
Executable File
#!/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
|
|
}
|
|
|
|
download_necessary_software_to_dir() (
|
|
cd "$1"
|
|
local location="chromium-skia-gm/arm64env"
|
|
try gsutil cp "gs://${location}/md5sum.txt" . || return
|
|
if md5sum -c --quiet "md5sum.txt"; then
|
|
return 0
|
|
fi
|
|
try gsutil cp "gs://${location}/*" . || return
|
|
)
|
|
|
|
install_compiler() {
|
|
local working_dir="$1"
|
|
local toolchain="gcc-linaro-aarch64-linux-gnu-4.8-2013.12_linux"
|
|
(
|
|
try cd "$working_dir" || return
|
|
try test -f "${toolchain}.tar.xz" || return
|
|
try xz --decompress --stdout < "${toolchain}.tar.xz" | \
|
|
try tar xf - || return
|
|
)
|
|
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
|
|
}
|
|
|
|
install_runtime() {
|
|
local working_dir="$1"
|
|
|
|
local firmware='img-foundation.axf'
|
|
local rootfs='vexpress64-openembedded_lamp-armv8-gcc-4.8_20131215-557'
|
|
local compressed_rootfs="${rootfs}.img.CLEAN_AND_CONFIGURED.xz"
|
|
local compressed_foundation_model='FM000-KT-00035-r0p8-52rel06.tgz'
|
|
local keyfile='CLEAN_AND_CONFIGURED_key'
|
|
|
|
try cp "${working_dir}/$firmware" "${working_dir}/firmware" || return
|
|
|
|
try xz --decompress --stdout \
|
|
< "${working_dir}/${compressed_rootfs}" \
|
|
> "${working_dir}/rootfs" || return
|
|
try test -f "${working_dir}/rootfs" || return
|
|
|
|
(
|
|
try cd "$working_dir" || return
|
|
try test -f "$compressed_foundation_model" || return
|
|
try gunzip -c "$compressed_foundation_model" | try tar xf - || return
|
|
try test -d "Foundation_v8pkg" || return # Assert.
|
|
)
|
|
|
|
try cp "${working_dir}/${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 'Waiting for foundation model to boot...'
|
|
while ! ssh -i "${working_dir}/key" \
|
|
-o NoHostAuthenticationForLocalhost=yes \
|
|
-p 8022 user@localhost true 2> /dev/null; do
|
|
sleep 5
|
|
done
|
|
echo 'Listening to SSH on port 8022.'
|
|
}
|
|
|
|
arm64_download() {
|
|
local working_directory="$1"
|
|
try mkdir -p "$working_directory" || return
|
|
|
|
try download_necessary_software_to_dir "$working_directory" || return
|
|
|
|
try install_compiler "$working_directory" || return
|
|
|
|
try install_runtime "$working_directory" || return
|
|
|
|
try start_arm64_image "$working_directory" || return
|
|
}
|
|
|
|
for command in gsutil xz tar md5sum gunzip; do
|
|
try command -v "$command" > /dev/null || usage || exit
|
|
done
|
|
|
|
if [ -z "$1" ] ; then
|
|
usage || exit
|
|
fi
|
|
try arm64_download "$1"
|