blob: 4f06e90750b04620573a8f61a74e5f634444bde2 [file] [log] [blame]
#!/bin/bash
usage ()
{
echo "Usage: sudo fastboot.sh <options>";
echo "options:";
echo " --help Show this message and exit"
echo " --revg Flashes the dtb required for Rev-G J6 EVm which has 10inch panel";
exit 1;
}
#no args case
if [ "$1" = "--help" ] ; then
usage
fi
# Pre-packaged DB
export FASTBOOT=${FASTBOOT-"./fastboot"}
export PRODUCT_OUT=${PRODUCT_OUT-"./"}
echo "Fastboot: $FASTBOOT"
echo "Image location: $PRODUCT_OUT"
# =============================================================================
# pre-run
# =============================================================================
# Verify fastboot program is available
# Verify user permission to run fastboot
# Verify fastboot detects a device, otherwise exit
if [ -f ${FASTBOOT} ]; then
fastboot_status=`${FASTBOOT} devices 2>&1`
if [ `echo $fastboot_status | grep -wc "no permissions"` -gt 0 ]; then
cat <<-EOF >&2
-------------------------------------------
Fastboot requires administrator permissions
Please run the script as root or create a
fastboot udev rule, e.g:
% cat /etc/udev/rules.d/99_android.rules
SUBSYSTEM=="usb",
SYSFS{idVendor}=="0451"
OWNER="<username>"
GROUP="adm"
-------------------------------------------
EOF
exit 1
elif [ "X$fastboot_status" = "X" ]; then
echo "No device detected. Please ensure that" \
"fastboot is running on the target device"
exit -1;
else
device=`echo $fastboot_status | awk '{print$1}'`
echo -e "\nFastboot - device detected: $device\n"
fi
else
echo "Error: fastboot is not available at ${FASTBOOT}"
exit -1;
fi
## poll the board to find out its configuration
#product=`${FASTBOOT} getvar product 2>&1 | grep product | awk '{print$2}'`
cpu=`${FASTBOOT} getvar cpu 2>&1 | grep cpu | awk '{print$2}'`
cputype=`${FASTBOOT} getvar secure 2>&1 | grep secure | awk '{print$2}'`
# Make EMU = HS
if [ ${cputype} = "EMU" ] || [ ${cputype} = "HS" ]; then
cputype="HS"
xloader="${PRODUCT_OUT}${cputype}_QSPI_MLO"
fi
# If fastboot does not support getvar default to GP
if [ ${cputype} = "" ] || [ ${cputype} = "GP" ]; then
cputype="GP"
xloader="${PRODUCT_OUT}${cputype}_MLO"
fi
# Based on cpu, decide the dtb to flash, default fall back to J6
if [ ${cpu} = "J6ECO" ]; then
environment="${PRODUCT_OUT}dra72-evm-lcd10.dtb"
else
environment="${PRODUCT_OUT}dra7-evm-lcd7.dtb"
fi
# Create the filename
bootimg="${PRODUCT_OUT}boot.img"
uboot="${PRODUCT_OUT}u-boot.img"
systemimg="${PRODUCT_OUT}system.img"
userdataimg="${PRODUCT_OUT}userdata.img"
cacheimg="${PRODUCT_OUT}cache.img"
efsimg="${PRODUCT_OUT}efs.img"
recoveryimg="${PRODUCT_OUT}recovery.img"
# Verify that all the files required for the fastboot flash
# process are available
if [ ! -e "${bootimg}" ] ; then
echo "Missing ${bootimg}"
exit -1;
fi
if [ ! -e "$xloader" ] ; then
echo "Missing ${xloader}"
exit -1;
fi
if [ ! -e "${uboot}" ] ; then
echo "Missing ${uboot}"
exit -1;
fi
if [ ! -e "${environment}" ] ; then
echo "Missing ${environment}"
exit -1;
fi
if [ ! -e "${systemimg}" ] ; then
echo "Missing ${systemimg}"
exit -1;
fi
if [ ! -e "${userdataimg}" ] ; then
echo "Missing ${userdataimg}"
exit -1;
fi
if [ ! -e "${cacheimg}" ] ; then
echo "Missing ${cacheimg}"
# exit -1;
fi
if [ ! -e "${recoveryimg}" ] ; then
echo "Missing ${recoveryimg}"
exit -1;
fi
echo "Create GPT partition table"
${FASTBOOT} oem format
echo "Setting target for bootloader to SPI"
${FASTBOOT} oem spi
sleep 3
echo "Flashing bootloader....."
echo " xloader: ${xloader}"
${FASTBOOT} flash xloader ${xloader}
sleep 3
${FASTBOOT} flash bootloader ${uboot}
#echo "Reboot: make sure new bootloader runs..."
${FASTBOOT} reboot-bootloader
sleep 5
echo "Re-creating GPT partition table with new bootloader"
${FASTBOOT} oem format
echo "Flash android partitions"
${FASTBOOT} flash boot ${bootimg}
echo "Flashing device tree ${environment}"
${FASTBOOT} flash environment ${environment}
${FASTBOOT} flash recovery ${recoveryimg}
${FASTBOOT} flash system ${systemimg}
userdataimg_orig="${userdataimg}.orig"
if [ ! -f $userdataimg_orig ]; then
cp $userdataimg $userdataimg_orig
else
cp $userdataimg_orig $userdataimg
fi
echo "Resizing userdata.img"
resizefail=0
userdatasize=`./fastboot getvar userdata_size 2>&1 | grep "userdata_size" | awk '{print$2}'`
if [ -n "$userdatasize" ]; then
while [ 1 ];do
echo Current userdata partition size=${userdatasize} KB
if [ -d "./data" ]; then
echo "Removing data"
rm -rf ./data || resizefail=1
if [ $resizefail -eq 1 ]; then
echo "unable to remove data folder" && break
fi
fi
mkdir ./data
./simg2img userdata.img userdata.img.raw
mount -o loop -o grpid -t ext4 ./userdata.img.raw ./data || resizefail=1
if [ $resizefail -eq 1 ]; then
echo "Mount failed" && break
fi
./make_ext4fs -s -l ${userdatasize}K -a data userdata.img data/
sync
umount data
sync
rm -rf ./data
rm userdata.img.raw
break
done
else
resizefail=1
fi
if [ $resizefail -eq 1 ]; then
echo "userdata resize failed."
echo "Eg: sudo ./fastboot.sh"
echo "For now, we are defaulting to original userdata.img"
cp $userdataimg_orig $userdataimg
fi
${FASTBOOT} flash userdata ${userdataimg}
if [ "$1" != "--noefs" ] ; then
if [ ! -f ${efsimg} ] ; then
echo "Creating efs.img as 16M ext4 img..."
test -d ./efs/ || mkdir efs
./make_ext4fs -s -l 16M -a efs efs.img efs/
else
echo "Using previously created efs.img..."
fi
${FASTBOOT} flash efs ${efsimg}
else
echo "efs partition is untouched"
fi
#Create cache.img
if [ ! -f ${cacheimg} ]
then
echo "Creating cache.img as empty ext4 img...."
rm -rf /tmp/fastboot-cache
mkdir /tmp/fastboot-cache
./make_ext4fs -s -l 256M -a cache ${cacheimg} /tmp/fastboot-cache/
rm -rf /tmp/fastboot-cache
fi
#flash cache.img
${FASTBOOT} flash cache ${cacheimg}
#reboot now
#${FASTBOOT} reboot
#if [ $resizefail -eq 1 ]; then
# echo "--------------------------------------------------"
# echo "Attempt was made to resize the userdata partition image"
# echo "to the size available on your SOM. But it failed either"
# echo "because it failed to remove existing ./data folder or because"
# echo "you are not running this script with superuser privileges"
# echo "Don't panic! The script just loaded the original userdata.img"
# echo "so, things should just work as expected. Just that the size"
# echo "of /data will be smaller on target."
# echo ""
# echo "If you really want to resize userdata.img, remove any existing"
# echo "./data folder and run \"sudo ./fastboot.sh\""
# echo "For now, we are defaulting to original userdata.img"
# echo "--------------------------------------------------"
#fi