From 09f86010fa32f39906800c694447e892a5e5ce05 Mon Sep 17 00:00:00 2001 From: John Klug Date: Wed, 27 Oct 2021 11:35:14 -0500 Subject: mlinux-firmware-upgrade with factory reset --- .../mlinux-scripts/mlinux-firmware-upgrade | 66 ++++++++++++++++++++-- .../mlinux-scripts/mlinux-scripts_%.bbappend | 2 +- 2 files changed, 62 insertions(+), 6 deletions(-) diff --git a/recipes-core/mlinux-scripts/mlinux-scripts/mlinux-firmware-upgrade b/recipes-core/mlinux-scripts/mlinux-scripts/mlinux-firmware-upgrade index a377309..a6e6d68 100755 --- a/recipes-core/mlinux-scripts/mlinux-scripts/mlinux-firmware-upgrade +++ b/recipes-core/mlinux-scripts/mlinux-scripts/mlinux-firmware-upgrade @@ -1,9 +1,41 @@ #!/bin/bash dofile=/var/volatile/do_flash_upgrade +dofactoryreset=0 +id=$(id -u) +function usage { + echo "Usage: $0 -f upgrade.bin" + echo " \"-f\" factory reset" + echo " \"-h\" help" + exit 1 +} +if (($(id -u) != 0)) ; then + echo "You must be root to do a flash upgrade" + exit 1 +fi +while getopts "hf" arg; do + case $arg in + h) + usage + exit 1 + ;; + f) + mtd=$(cat /proc/mtd) + if ! [[ $mtd =~ at91bootstrap ]] ; then + echo Factory reset option is only supported on Atmel devices + exit 1 + fi + dofactoryreset=1 + ;; + *) + usage + ;; + esac +done +shift $((OPTIND-1)) + if [ $# != 1 ]; then - echo "Usage: $0 upgrade.bin" - exit 1 + usage fi set -e @@ -45,6 +77,23 @@ for (( i = 0; i < ${#files[@]}; i++ )); do done if (( $tobeflashed )); then + if ((dofactoryreset == 1)) ; then + for name in "u-Boot Config" "u-Boot Redundant Config" ; do + part=$(echo "$mtd" | grep "$name" | sed 's/:.*//') + if [[ $part =~ ^mtd[0-9] ]] ; then + flash_erase /dev/${part} 0 0 + fi + done + fuser -mk /var/config || true + for name in "User data" "Config" ; do + part=$(echo "$mtd" | grep "\"$name\"" | sed 's/:.*//') + num=$(echo "$part" | sed 's/mtd//') + if [[ $part =~ ^mtd[0-9] ]] ; then + umount -l /dev/mtdblock${num} || true + flash_erase -j /dev/${part} 0 0 + fi + done + fi mkdir -p /var/volatile/flash-upgrade mv -f $upgrade /var/volatile/flash-upgrade/upgrade.bin touch "${dofile}" @@ -59,9 +108,16 @@ if (( $tobeflashed )); then logger -s -t firmware_upgrade "Cannot set ownership of ${dofile} to root" exit 1 fi - logger -s -t firmware_upgrade "Rebooting" - sleep 1 - reboot + if ((dofactoryreset == 1)) ; then + logger -s -t firmware_upgrade "Power Off" + sleep 1 + poweroff + else + logger -s -t firmware_upgrade "Rebooting" + sleep 1 + reboot + fi + # NOTREACHED exit 0 else logger -s -t firmware_upgrade "Nothing to be flashed!" diff --git a/recipes-core/mlinux-scripts/mlinux-scripts_%.bbappend b/recipes-core/mlinux-scripts/mlinux-scripts_%.bbappend index ecda287..39c0807 100644 --- a/recipes-core/mlinux-scripts/mlinux-scripts_%.bbappend +++ b/recipes-core/mlinux-scripts/mlinux-scripts_%.bbappend @@ -1,6 +1,6 @@ FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" -PR .= ".mlinux0" +PR .= ".mlinux1" SRC_URI += " \ file://mlinux-firmware-upgrade \ -- cgit v1.2.3