be823d71bd
The pvmfw partition holds the protected VM firmware that is used by Protected KVM to bootstrap the trust in protected VMs. Teach fastboot about the partition so it gets flashed with flashall. pvmfw is an AVB chained partition so is marked as BootCritical to allow ABL's AVB verification to pass. Test: tab complete and flashall Bug: 171280178 Change-Id: Ie4cc478de25a945bc510488d87c2bee3aa5031f2
182 lines
5.2 KiB
Bash
182 lines
5.2 KiB
Bash
# /* vim: set ai ts=4 ft=sh: */
|
|
#
|
|
# Copyright 2017, The Android Open Source Project
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
#
|
|
|
|
_fastboot() {
|
|
if ! check_type "$1" >/dev/null; then
|
|
return
|
|
fi
|
|
|
|
if check_type _init_completion >/dev/null; then
|
|
_init_completion || return
|
|
fi
|
|
|
|
local where i cur serial
|
|
COMPREPLY=()
|
|
|
|
serial="${ANDROID_SERIAL:-none}"
|
|
where=OPTIONS
|
|
for ((i=1; i <= COMP_CWORD; i++)); do
|
|
cur="${COMP_WORDS[i]}"
|
|
case "${cur}" in
|
|
-s)
|
|
where=OPT_SERIAL
|
|
;;
|
|
--slot)
|
|
where=OPT_SLOT
|
|
;;
|
|
-*)
|
|
where=OPTIONS
|
|
;;
|
|
*)
|
|
if [[ $where == OPT_SERIAL ]]; then
|
|
where=OPT_SERIAL_ARG
|
|
serial=${cur}
|
|
elif [[ $where == OPT_SLOT ]]; then
|
|
where=OPT_SLOT_ARG
|
|
else
|
|
where=COMMAND
|
|
break
|
|
fi
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [[ $where == COMMAND && $i -ge $COMP_CWORD ]]; then
|
|
where=OPTIONS
|
|
fi
|
|
|
|
OPTIONS="-a -c --disable-verification --disable-verity -h --help -s --set-active --skip-secondary --skip-reboot --slot -u --version -w"
|
|
COMMAND="continue devices erase flash flashall flashing format getvar get_staged help oem reboot stage update"
|
|
|
|
case $where in
|
|
OPTIONS|OPT_SERIAL)
|
|
COMPREPLY=( $(compgen -W "$OPTIONS $COMMAND" -- "$cur") )
|
|
;;
|
|
OPT_SERIAL_ARG)
|
|
local devices=$(command fastboot devices 2> /dev/null | awk '{ print $1 }')
|
|
COMPREPLY=( $(compgen -W "${devices}" -- ${cur}) )
|
|
;;
|
|
OPT_SLOT_ARG)
|
|
local slots="a all b other"
|
|
COMPREPLY=( $(compgen -W "${slots}" -- ${cur}) )
|
|
;;
|
|
COMMAND)
|
|
if [[ $i -eq $COMP_CWORD ]]; then
|
|
COMPREPLY=( $(compgen -W "$COMMAND" -- "$cur") )
|
|
else
|
|
i=$((i+1))
|
|
case "${cur}" in
|
|
flash)
|
|
_fastboot_cmd_flash "$serial" $i
|
|
;;
|
|
reboot)
|
|
if [[ $COMP_CWORD == $i ]]; then
|
|
args="bootloader"
|
|
COMPREPLY=( $(compgen -W "${args}" -- "${COMP_WORDS[i]}") )
|
|
fi
|
|
;;
|
|
update)
|
|
_fastboot_cmd_update "$serial" $i
|
|
;;
|
|
esac
|
|
fi
|
|
;;
|
|
esac
|
|
|
|
return 0
|
|
}
|
|
|
|
_fastboot_cmd_flash() {
|
|
local serial i cur
|
|
local partitions
|
|
|
|
serial=$1
|
|
i=$2
|
|
|
|
cur="${COMP_WORDS[COMP_CWORD]}"
|
|
if [[ $i -eq $COMP_CWORD ]]; then
|
|
partitions="boot bootloader dtbo modem odm odm_dlkm oem product pvmfw radio recovery system vbmeta vendor vendor_dlkm"
|
|
COMPREPLY=( $(compgen -W "$partitions" -- $cur) )
|
|
else
|
|
_fastboot_util_complete_local_file "${cur}" '!*.img'
|
|
fi
|
|
}
|
|
|
|
_fastboot_cmd_update() {
|
|
local serial i cur
|
|
|
|
serial=$1
|
|
i=$2
|
|
|
|
cur="${COMP_WORDS[COMP_CWORD]}"
|
|
|
|
_fastboot_util_complete_local_file "${cur}" '!*.zip'
|
|
}
|
|
|
|
_fastboot_util_complete_local_file() {
|
|
local file xspec i j IFS=$'\n'
|
|
local -a dirs files
|
|
|
|
file=$1
|
|
xspec=$2
|
|
|
|
# Since we're probably doing file completion here, don't add a space after.
|
|
if [[ $(check_type compopt) == "builtin" ]]; then
|
|
compopt -o plusdirs
|
|
if [[ "${xspec}" == "" ]]; then
|
|
COMPREPLY=( ${COMPREPLY[@]:-} $(compgen -f -- "${cur}") )
|
|
else
|
|
compopt +o filenames
|
|
COMPREPLY=( ${COMPREPLY[@]:-} $(compgen -f -X "${xspec}" -- "${cur}") )
|
|
fi
|
|
else
|
|
# Work-around for shells with no compopt
|
|
|
|
dirs=( $(compgen -d -- "${cur}" ) )
|
|
|
|
if [[ "${xspec}" == "" ]]; then
|
|
files=( ${COMPREPLY[@]:-} $(compgen -f -- "${cur}") )
|
|
else
|
|
files=( ${COMPREPLY[@]:-} $(compgen -f -X "${xspec}" -- "${cur}") )
|
|
fi
|
|
|
|
COMPREPLY=( $(
|
|
for i in "${files[@]}"; do
|
|
local skip=
|
|
for j in "${dirs[@]}"; do
|
|
if [[ $i == $j ]]; then
|
|
skip=1
|
|
break
|
|
fi
|
|
done
|
|
[[ -n $skip ]] || printf "%s\n" "$i"
|
|
done
|
|
))
|
|
|
|
COMPREPLY=( ${COMPREPLY[@]:-} $(
|
|
for i in "${dirs[@]}"; do
|
|
printf "%s/\n" "$i"
|
|
done
|
|
))
|
|
fi
|
|
}
|
|
|
|
if [[ $(check_type compopt) == "builtin" ]]; then
|
|
complete -F _fastboot fastboot
|
|
else
|
|
complete -o nospace -F _fastboot fastboot
|
|
fi
|