3 # on-target updater script for Pandora
4 # Copyright (c) 2010, GraÅžvydas Ignotas
8 . /etc/updater_funcs.sh
10 status_uboot="missing"
11 status_uboot_env="already empty"
12 status_uimage="missing"
13 status_rootfs="missing"
18 if [ -n "$finalize_mpoint" ]
20 umount $finalize_mpoint 2> /dev/null || true
22 if [ -n "$rootfs_mpoint" ]
24 umount $rootfs_mpoint 2> /dev/null || true
28 mkdir /mnt/ubifs 2> /dev/null || true
30 if [ ! -e /dev/mmcblk0p1 ]
32 # hmh what's up with the SD card?
33 log "Can't access SD card, please reinsert and press enter"
35 test -e /dev/mmcblk0p1
38 mdevs="/dev/mmcblk0p1 /dev/mmcblk0p2"
39 bootfiles="bootf.tgz bootfiles.tar.gz uimage.tar.gz"
45 mpoint="/mnt/`basename $md`"
47 mkdir $mpoint 2> /dev/null || true
48 if ! mount $md $mpoint
53 if [ -x $mpoint/initialize.sh ]
56 log "running init script.."
60 log "initialize.sh failed."
76 if [ -x $mpoint/finalize.sh ]
78 finalize_mpoint=$mpoint
82 if [ -e $mpoint/rootfs.img -a -e $mpoint/rootfs.md5 -a -z "$rootfs_file" ]
84 rootfs_file=$mpoint/rootfs.img
85 rootfs_md5=`head -n 1 $mpoint/rootfs.md5 | cut -c 1-32`
90 if [ "$keep_mpoint" != "yes" ]
98 size=`stat -c %s u-boot.bin`
99 nanddump --omitoob --omitbad -q -l $size -f u-boot.bin.flashed /dev/mtd1ro
100 if ! cmp u-boot.bin u-boot.bin.flashed
102 flash_eraseall /dev/mtd1
103 nandwrite -p /dev/mtd1 u-boot.bin
104 log "u-boot.bin flashed."
105 status_uboot="flashed"
107 log "u-boot.bin already flashed, skipped."
108 status_uboot="already there"
111 log "u-boot is missing, skipped."
114 nanddump --omitoob --omitbad -q -f mtd2dump /dev/mtd2ro
115 if ! cmp mtd2dump /usr/local/erasednandblk
117 flash_eraseall /dev/mtd2
118 status_uboot_env="cleared"
119 log "u-boot environment cleared."
124 # attempt to mount and check
125 ubiattach /dev/ubi_ctrl -m 3 || true
126 mount -t ubifs ubi0:boot /mnt/ubifs 2> /dev/null || true
127 if ! cmp uImage /mnt/ubifs/uImage 2> /dev/null
129 log "flashing uImage.."
130 umount /mnt/ubifs 2> /dev/null || true
131 ubidetach /dev/ubi_ctrl -d 0 2> /dev/null || true
132 # format just in case, should be harmless even it's formated already
133 ubiformat /dev/mtd3 -s 512 -y
134 ubiattach /dev/ubi_ctrl -m 3
135 ubimkvol /dev/ubi0 -m -N boot
136 mount -t ubifs ubi0:boot /mnt/ubifs
137 cp uImage /mnt/ubifs/uImage
138 status_uimage="flashed"
141 log "uImage already flashed, skipped."
142 status_uimage="already there"
145 ubidetach /dev/ubi_ctrl -d 0
147 log "uImage is missing, skipped."
150 if [ -n "$rootfs_file" ]
152 log "Calculating checksum, this might take a few minutes.."
153 real_md5=`md5sum $rootfs_file | cut -c 1-32`
154 if [ "$real_md5" = "$rootfs_md5" ]
163 # be destructive here, too hard to validate rootfs to bother
165 ubiformat /dev/mtd4 -s 512 -y
166 ubiattach /dev/ubi_ctrl -m 4
167 ubimkvol /dev/ubi0 -m -N rootfs
169 log "Writing rootfs, please wait. This may take up to 15 minutes.."
170 ubiupdatevol /dev/ubi0_0 $rootfs_file
171 ubidetach /dev/ubi_ctrl -d 0
172 status_rootfs="flashed"
175 log "root filesystem is missing, skipped."
178 log "======================="
180 log "u-boot: $status_uboot"
181 log "u-boot-env: $status_uboot_env"
182 log "kernel: $status_uimage"
183 log "rootfs: $status_rootfs $rootfs_file"
185 if [ -n "$finalize_mpoint" ]
188 log "running finalize script.."
192 log "finalize.sh failed."