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"
15 mkdir /mnt/ubifs 2> /dev/null || true
17 if [ ! -e /dev/mmcblk0p1 ]
19 # hmh what's up with the SD card?
20 log "Can't access SD card, please reinsert and press enter"
22 test -e /dev/mmcblk0p1
25 mdevs="/dev/mmcblk0p1 /dev/mmcblk0p2"
26 bootfiles="bootf.tgz bootfiles.tar.gz uimage.tar.gz"
32 mpoint="/mnt/`basename $md`"
34 mkdir $mpoint 2> /dev/null || true
35 if ! mount $md $mpoint
48 if [ -x $mpoint/finalize.sh ]
50 finalize_mpoint=$mpoint
54 if [ -e $mpoint/rootfs.img -a -e $mpoint/rootfs.md5 -a -z "$rootfs_file" ]
56 rootfs_file=$mpoint/rootfs.img
57 rootfs_md5=`head -n 1 $mpoint/rootfs.md5 | cut -c 1-32`
62 if [ "$keep_mpoint" != "yes" ]
70 size=`stat -c %s u-boot.bin`
71 dd if=/dev/mtdblock1 of=u-boot.bin.flashed bs=$size count=1
72 if ! cmp u-boot.bin u-boot.bin.flashed
74 flash_eraseall /dev/mtd1
75 nandwrite -p /dev/mtd1 u-boot.bin
76 log "u-boot.bin flashed."
77 status_uboot="flashed"
79 log "u-boot.bin already flashed, skipped."
80 status_uboot="already there"
83 log "u-boot is missing, skipped."
86 if ! cmp /dev/mtdblock2 /usr/local/erasednandblk
88 flash_eraseall /dev/mtd2
89 status_uboot_env="cleared"
90 log "u-boot environment cleared."
95 # attempt to mount and check
96 ubiattach /dev/ubi_ctrl -m 3 || true
97 mount -t ubifs ubi0:boot /mnt/ubifs 2> /dev/null || true
98 if ! cmp uImage /mnt/ubifs/uImage 2> /dev/null
100 log "flashing uImage.."
101 umount /mnt/ubifs 2> /dev/null || true
102 ubidetach /dev/ubi_ctrl -d 0 2> /dev/null || true
103 # format just in case, should be harmless even it's formated already
104 ubiformat /dev/mtd3 -s 512 -y
105 ubiattach /dev/ubi_ctrl -m 3
106 ubimkvol /dev/ubi0 -m -N boot
107 mount -t ubifs ubi0:boot /mnt/ubifs
108 cp uImage /mnt/ubifs/uImage
109 status_uimage="flashed"
112 log "uImage already flashed, skipped."
113 status_uimage="already there"
116 ubidetach /dev/ubi_ctrl -d 0
118 log "uImage is missing, skipped."
121 if [ -n "$rootfs_file" ]
123 log "Calculating checksum, this might take a few minutes.."
124 real_md5=`md5sum $rootfs_file | cut -c 1-32`
125 if [ "$real_md5" = "$rootfs_md5" ]
133 # be destructive here, too hard to validate rootfs to bother
135 ubiformat /dev/mtd4 -s 512 -y
136 ubiattach /dev/ubi_ctrl -m 4
137 ubimkvol /dev/ubi0 -m -N rootfs
139 log "Writing rootfs, please wait. This may take up to 15 minutes.."
140 ubiupdatevol /dev/ubi0_0 $rootfs_file
141 ubidetach /dev/ubi_ctrl -d 0
142 status_rootfs="flashed"
145 log "root filesystem is missing, skipped."
148 if [ -n "$finalize_mpoint" ]
150 log "running finalize script.."
154 log "finalize.sh failed."
159 umount $finalize_mpoint
162 if [ -n "$rootfs_mpoint" ]
164 umount $rootfs_mpoint 2> /dev/null || true
167 log "======================="
169 log "u-boot: $status_uboot"
170 log "u-boot-env: $status_uboot_env"
171 log "kernel: $status_uimage"
172 log "rootfs: $status_rootfs $rootfs_file"