- while true; do
- case $answer in
- yes)
- cp -f $MTD_BACKUP_FNAME $NEW_UBOOT_DIR/backup/$MTD_BACKUP_FNAME &>/dev/null
- if [ $? -ne 0 ]; then
- echo_err "Could not copy backup file $MTD_BACKUP_FNAME to $NEW_UBOOT_DIR/backup/"
- exit 1
- fi
-
- echo_ok "Backup of /dev/$MTD_DEVICE successfully copied to $NEW_UBOOT_DIR/backup/"
- break
- ;;
- no)
- break
- ;;
- *)
- read -p " Please, type 'yes' or 'no': " answer
- ;;
- esac
- done
+ wait_for_yesno "Do you want to store backup (recommended) in '$NEW_UBOOT_DIR/backup/'" || return 0
+
+ mkdir -p "$NEW_UBOOT_DIR/backup" >/dev/null 2>&1 || {
+ echo_err "Could not create '$NEW_UBOOT_DIR/backup'"
+ return 1
+ }
+
+ cp -f "$MTD_BACKUP_FNAME" "$NEW_UBOOT_DIR/backup/$MTD_BACKUP_FNAME" >/dev/null 2>&1 || {
+ echo_err "Could not copy backup file '$MTD_BACKUP_FNAME' to '$NEW_UBOOT_DIR/backup/'"
+ return 1
+ }
+
+ echo_ok "Backup of '/dev/$MTD_DEVICE' successfully copied to '$NEW_UBOOT_DIR/backup/'"
+}
+
+check_rw_status() {
+ local mtdrw="kmod-mtd-rw"
+ local rwfalg="0x400"
+ local flags=""
+
+ [ -e "/sys/class/mtd/$MTD_DEVICE/flags" ] || return 0
+
+ flags="$(cat /sys/class/mtd/$MTD_DEVICE/flags)"
+ [ "$((flags & rwfalg))" -gt "0" ] && {
+ echo_info "Partition '/dev/$MTD_DEVICE' is writable"
+ return 0
+ }
+
+ echo_warn "Partition '/dev/$MTD_DEVICE' is not writable"
+
+ opkg list-installed | grep -q "$mtdrw" || {
+ wait_for_yesno "Do you want to install '$mtdrw' and unclock '/dev/$MTD_DEVICE'" || return 1
+
+ echo_info "Updating packages..."
+
+ opkg update > /dev/null 2>&1 || {
+ echo_err "Could not update packages, check your Internet connection"
+ return 1
+ }
+
+ echo_ok "Packages successfully updated, installing '$mtdrw'..."
+
+ opkg install "$mtdrw" > /dev/null 2>&1 || {
+ echo_err "Could not install '$mtdrw' package"
+ return 1
+ }
+
+ echo_ok "Package '$mtdrw' successfully installed"
+ }
+
+ echo_info "Unlocking '/dev/$MTD_DEVICE' partition..."
+
+ insmod mtd-rw i_want_a_brick=1 >/dev/null 2>&1 || {
+ echo_err "Could not load 'mtd-rw' kernel module"
+ return 1
+ }
+
+ flags="$(cat /sys/class/mtd/$MTD_DEVICE/flags)"
+ [ "$((flags & rwfalg))" -gt "0" ] || {
+ echo_err "Could not unlock '/dev/$MTD_DEVICE' partition"
+ return 1
+ }
+
+ echo_ok "Partition '/dev/$MTD_DEVICE' successfully unlocked"