blob: cb14d8b2b57217c8cf178cc9344a1069e2e1da89 [file] [log] [blame]
#!/bin/bash
# $1 -- Filesystem path
# $2 -- Block device
function check_emmc_matches {
local CURRENT=$(mktemp)
local SIZE=$(stat -c%s $1)
dd if=/dev/$2 of=${CURRENT} \
count=${SIZE} \
bs=512 \
iflag=count_bytes
diff ${CURRENT} $1
local DIFF_RETURN_CODE=$?
rm ${CURRENT}
echo ${DIFF_RETURN_CODE}
}
# $1 -- Filesystem path
# $2 -- Block device
function write_emmc {
for i in `seq 1 5`
do
dd if=$1 of=/dev/$2 bs=512
local EMMC_MATCHES=$(check_emmc_matches $1 $2)
if [[ ${EMMC_MATCHES} -eq 0 ]]; then
UPDATE_SUCCESS=true
break
fi
done
echo ${UPDATE_SUCCESS}
}
BL2_MATCHES=$(check_emmc_matches /boot/bl2.img mmcblk0boot0)
FIP_BIN_MATCHES=$(check_emmc_matches /boot/fip.bin mmcblk0p1)
U_BOOT_ENV_MATCHES=$(check_emmc_matches /boot/u-boot-env.bin mmcblk0boot1)
if [[ ${BL2_MATCHES} -ne 0 ]]; then
MMCBLK_RO_PATH=/sys/block/mmcblk0boot0/force_ro
# Get the read-only setting for the bootloader
MMCBLK_RO=$(cat ${MMCBLK_RO_PATH})
# Disable read-only on bootloader block device
echo 0 > ${MMCBLK_RO_PATH}
UPDATE_SUCCESS=$(write_emmc /boot/bl2.img mmcblk0boot0)
# Restore whatever the setting was before
echo ${MMCBLK_RO} > ${MMCBLK_RO_PATH}
if [[ "${UPDATE_SUCCESS}" != true ]]; then
echo "Failed to update bl2! Rebooting is unsafe!"
exit 1
fi
fi
if [[ ${FIP_BIN_MATCHS} -ne 0 ]]; then
UPDATE_SUCCESS=$(write_emmc /boot/fip.bin mmcblk0p1)
if [[ "${UPDATE_SUCCESS}" != true ]]; then
echo "Failed to update fip.bin! Rebooting is unsafe!"
exit 1
fi
fi
if [[ ${U_BOOT_ENV_MATCHS} -ne 0 ]]; then
UPDATE_SUCCESS=$(write_emmc /boot/u-boot-env.bin mmcblk0boot1)
if [[ "${UPDATE_SUCCESS}" != true ]]; then
echo "Failed to update u-boot-env.bin! Rebooting is unsafe!"
exit 1
fi
fi