rmdir /tmp/new_root
}
+nand_remove_ubiblock() {
+ local ubivol=$1
+ local ubiblk=ubiblock${ubivol:3}
+ if [ -e /dev/$ubiblk ]; then
+ echo "removing $ubiblk"
+ if ! ubiblock -r /dev/$ubivol; then
+ echo "cannot remove $ubiblk"
+ return 1
+ fi
+ fi
+}
+
nand_upgrade_prepare_ubi() {
local rootfs_length="$1"
local rootfs_type="$2"
ubiattach -m "$mtdnum"
sync
ubidev="$( nand_find_ubi "$CI_UBIPART" )"
- fi
- if [ ! "$ubidev" ]; then
- ubiformat /dev/mtd$mtdnum -y
- ubiattach -m "$mtdnum"
- sync
- ubidev="$( nand_find_ubi "$CI_UBIPART" )"
- [ "$has_env" -gt 0 ] && {
- ubimkvol /dev/$ubidev -n 0 -N ubootenv -s 1MiB
- ubimkvol /dev/$ubidev -n 1 -N ubootenv2 -s 1MiB
- }
+ if [ ! "$ubidev" ]; then
+ ubiformat /dev/mtd$mtdnum -y
+ ubiattach -m "$mtdnum"
+ sync
+ ubidev="$( nand_find_ubi "$CI_UBIPART" )"
+
+ if [ ! "$ubidev" ]; then
+ echo "cannot attach ubi mtd partition $CI_UBIPART"
+ return 1
+ fi
+
+ if [ "$has_env" -gt 0 ]; then
+ ubimkvol /dev/$ubidev -n 0 -N ubootenv -s 1MiB
+ ubimkvol /dev/$ubidev -n 1 -N ubootenv2 -s 1MiB
+ fi
+ fi
fi
local kern_ubivol="$( nand_find_volume $ubidev $CI_KERNPART )"
local root_ubivol="$( nand_find_volume $ubidev $CI_ROOTPART )"
local data_ubivol="$( nand_find_volume $ubidev rootfs_data )"
+ [ "$root_ubivol" = "$kern_ubivol" ] && root_ubivol=
- local ubiblk ubiblkvol
- for ubiblk in /dev/ubiblock*_? ; do
- [ -e "$ubiblk" ] || continue
- echo "removing ubiblock${ubiblk:13}"
- ubiblkvol=ubi${ubiblk:13}
- if ! ubiblock -r /dev/$ubiblkvol; then
- echo "cannot remove $ubiblk"
- return 1
- fi
- done
+ # remove ubiblocks
+ [ "$kern_ubivol" ] && { nand_remove_ubiblock $kern_ubivol || return 1; }
+ [ "$root_ubivol" ] && { nand_remove_ubiblock $root_ubivol || return 1; }
+ [ "$data_ubivol" ] && { nand_remove_ubiblock $data_ubivol || return 1; }
# kill volumes
- [ "$kern_ubivol" ] && ubirmvol /dev/$ubidev -N $CI_KERNPART || true
- [ "$root_ubivol" -a "$root_ubivol" != "$kern_ubivol" ] && ubirmvol /dev/$ubidev -N $CI_ROOTPART || true
- [ "$data_ubivol" ] && ubirmvol /dev/$ubidev -N rootfs_data || true
+ [ "$kern_ubivol" ] && ubirmvol /dev/$ubidev -N $CI_KERNPART || :
+ [ "$root_ubivol" ] && ubirmvol /dev/$ubidev -N $CI_ROOTPART || :
+ [ "$data_ubivol" ] && ubirmvol /dev/$ubidev -N rootfs_data || :
# update kernel
if [ -n "$kernel_length" ]; then
# create rootfs_data for non-ubifs rootfs
if [ "$rootfs_type" != "ubifs" ]; then
- local availeb=$(cat /sys/devices/virtual/ubi/$ubidev/avail_eraseblocks)
- local ebsize=$(cat /sys/devices/virtual/ubi/$ubidev/eraseblock_size)
- local avail_size=$((availeb * ebsize))
local rootfs_data_size_param="-m"
- if [ -n "$rootfs_data_max" ] &&
- [ "$rootfs_data_max" != "0" ] &&
- [ "$rootfs_data_max" -le "$avail_size" ]; then
+ if [ -n "$rootfs_data_max" ]; then
rootfs_data_size_param="-s $rootfs_data_max"
fi
if ! ubimkvol /dev/$ubidev -N rootfs_data $rootfs_data_size_param; then
- echo "cannot initialize rootfs_data volume"
- return 1
+ if ! ubimkvol /dev/$ubidev -N rootfs_data -m; then
+ echo "cannot initialize rootfs_data volume"
+ return 1
+ fi
fi
fi
sync