Make script that flashes block device more generic
- Add switch to choose to expand filesystem after write
- Change all instances of "sd card" to "block device"
- Remove echo with information about the Rock Pi
- Use Android's shflags
Test: local flash image and run
Change-Id: Ia14980788bb428a586904a1e7f50a9fe1e02168c
diff --git a/tools/flash-blk-dev.sh b/tools/flash-blk-dev.sh
index b4d59f9..5b39381 100755
--- a/tools/flash-blk-dev.sh
+++ b/tools/flash-blk-dev.sh
@@ -14,39 +14,27 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-image=$1
-if [ "${image}" == "" ]; then
- echo "usage: "`basename $0`" <image>"
- exit 1
-fi
-if [ ! -e "${image}" ]; then
- echo "error: can't find image. aborting..."
- exit 1
-fi
+source "${ANDROID_BUILD_TOP}/external/shflags/src/shflags"
-init_devs=`lsblk --nodeps -oNAME -n`
-echo "Reinsert device (to write to) into PC"
-while true; do
- devs=`lsblk --nodeps -oNAME -n`
- new_devs="$(echo -e "${init_devs}\n${devs}" | sort | uniq -u | awk 'NF')"
- num_devs=`echo "${new_devs}" | wc -l`
- if [[ "${new_devs}" == "" ]]; then
- num_devs=0
- fi
- if [[ ${num_devs} -gt 1 ]]; then
- echo "error: too many new devices detected! aborting..."
+DEFINE_boolean expand \
+ false "expand filesystem to fill device" "e"
+
+FLAGS_HELP="USAGE: $0 [flags] image"
+
+main ()
+{
+ image=$1
+ if [ "${image}" == "" ]; then
+ flags_help
exit 1
fi
- if [[ ${num_devs} -eq 1 ]]; then
- break
+ if [ ! -e "${image}" ]; then
+ echo "error: can't find image. aborting..."
+ exit 1
fi
-done
-sd_card=${new_devs}
-# don't inform user we found the sd card yet (it's confusing)
-init_devs=${devs}
-echo "${init_devs}" | grep "${sd_card}" >/dev/null
-if [[ $? -ne 0 ]]; then
+ init_devs=`lsblk --nodeps -oNAME -n`
+ echo "Reinsert device (to write to) into PC"
while true; do
devs=`lsblk --nodeps -oNAME -n`
new_devs="$(echo -e "${init_devs}\n${devs}" | sort | uniq -u | awk 'NF')"
@@ -59,46 +47,71 @@
exit 1
fi
if [[ ${num_devs} -eq 1 ]]; then
- if [[ "${new_devs}" != "${sd_card}" ]]; then
- echo "error: block device name mismatch ${new_devs} != ${sd_card}"
- echo "Reinsert device (to write to) into PC"
- sd_card=${new_devs}
- new_devs=""
- continue
- fi
break
fi
done
-fi
-# now inform the user
-echo "Detected device at /dev/${sd_card}"
+ blk_dev=${new_devs}
+ # don't inform user we found the block device yet (it's confusing)
-imgsize=`ls -lah ${image} | awk -F " " {'print $5'}`
-echo "Ready to write ${imgsize} image to block device at /dev/${sd_card}..."
-sudo chmod 666 /dev/${sd_card}
-type pv > /dev/null 2>&1
-if [ $? == 0 ]; then
- pv ${image} > /dev/${sd_card}
-else
- dd if=${image} of=/dev/${sd_card} bs=1M conv=sync,noerror status=progress
-fi
+ init_devs=${devs}
+ echo "${init_devs}" | grep "${blk_dev}" >/dev/null
+ if [[ $? -ne 0 ]]; then
+ while true; do
+ devs=`lsblk --nodeps -oNAME -n`
+ new_devs="$(echo -e "${init_devs}\n${devs}" | sort | uniq -u | awk 'NF')"
+ num_devs=`echo "${new_devs}" | wc -l`
+ if [[ "${new_devs}" == "" ]]; then
+ num_devs=0
+ fi
+ if [[ ${num_devs} -gt 1 ]]; then
+ echo "error: too many new devices detected! aborting..."
+ exit 1
+ fi
+ if [[ ${num_devs} -eq 1 ]]; then
+ if [[ "${new_devs}" != "${blk_dev}" ]]; then
+ echo "error: block device name mismatch ${new_devs} != ${blk_dev}"
+ echo "Reinsert device (to write to) into PC"
+ blk_dev=${new_devs}
+ new_devs=""
+ continue
+ fi
+ break
+ fi
+ done
+ fi
+ # now inform the user
+ echo "Detected device at /dev/${blk_dev}"
-echo "Expanding partition and filesystem..."
-part_type=`sudo gdisk -l /dev/${sd_card} 2>/dev/null | grep ": present" | sed 's/ *\([^:]*\):.*/\1/'`
-if [ "$part_type" == "MBR" ]; then
- sudo parted -s /dev/${sd_card} resizepart 1 100%
- sudo e2fsck -y -f /dev/${sd_card}1 >/dev/null 2>&1
- sudo resize2fs /dev/${sd_card}1 >/dev/null 2>&1
-elif [ "$part_type" == "GPT" ]; then
- parts=`sudo gdisk -l /dev/${sd_card} | grep "^Number" -A999 | tail -n +2 | wc -l`
- FIRST_SECTOR=`sudo gdisk -l /dev/${sd_card} 2>/dev/null | tail -1 | tr -s ' ' | cut -d" " -f3`
- LAST_SECTOR=61071326 # 32GB eMMC size
- sudo sgdisk -d${parts} /dev/${sd_card} >/dev/null 2>&1
- sudo sgdisk -a1 -n:${parts}:${FIRST_SECTOR}:${LAST_SECTOR} -A:${parts}:set:2 -t:${parts}:8305 -c:${parts}:rootfs /dev/${sd_card} >/dev/null 2>&1
- sudo e2fsck -fy /dev/${sd_card}${parts} >/dev/null 2>&1
- sudo resize2fs /dev/${sd_card}${parts} >/dev/null 2>&1
-fi
-sudo sync /dev/${sd_card}
-sudo eject /dev/${sd_card}
+ imgsize=`ls -lah ${image} | awk -F " " {'print $5'}`
+ echo "Ready to write ${imgsize} image to block device at /dev/${blk_dev}..."
+ sudo chmod 666 /dev/${blk_dev}
+ type pv > /dev/null 2>&1
+ if [ $? == 0 ]; then
+ pv ${image} > /dev/${blk_dev}
+ else
+ dd if=${image} of=/dev/${blk_dev} bs=1M conv=sync,noerror status=progress
+ fi
-echo "Now insert the device into Rock Pi and plug in the USB power adapter"
+ if [ ${FLAGS_expand} -eq ${FLAGS_TRUE} ]; then
+ echo "Expanding partition and filesystem..."
+ part_type=`sudo gdisk -l /dev/${blk_dev} 2>/dev/null | grep ": present" | sed 's/ *\([^:]*\):.*/\1/'`
+ if [ "$part_type" == "MBR" ]; then
+ sudo parted -s /dev/${blk_dev} resizepart 1 100%
+ sudo e2fsck -y -f /dev/${blk_dev}1 >/dev/null 2>&1
+ sudo resize2fs /dev/${blk_dev}1 >/dev/null 2>&1
+ elif [ "$part_type" == "GPT" ]; then
+ parts=`sudo gdisk -l /dev/${blk_dev} | grep "^Number" -A999 | tail -n +2 | wc -l`
+ FIRST_SECTOR=`sudo gdisk -l /dev/${blk_dev} 2>/dev/null | tail -1 | tr -s ' ' | cut -d" " -f3`
+ sudo sgdisk -d${parts} /dev/${blk_dev} >/dev/null 2>&1
+ sudo sgdisk -a1 -n:${parts}:${FIRST_SECTOR}:- -A:${parts}:set:2 -t:${parts}:8305 -c:${parts}:rootfs /dev/${blk_dev} >/dev/null 2>&1
+ sudo e2fsck -fy /dev/${blk_dev}${parts} >/dev/null 2>&1
+ sudo resize2fs /dev/${blk_dev}${parts} >/dev/null 2>&1
+ fi
+ fi
+ sudo sync /dev/${blk_dev}
+ sudo eject /dev/${blk_dev}
+}
+
+FLAGS "$@" || exit $?
+eval set -- "${FLAGS_ARGV}"
+main "$@"