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"
31 mpoint="/mnt/`basename $md`"
33 mkdir $mpoint 2> /dev/null || true
34 if ! mount $md $mpoint
39 if [ -e $mpoint/sysf.tgz ]
41 tar xzvf $mpoint/sysf.tgz
44 if [ -x $mpoint/finalize.sh ]
46 finalize_mpoint=$mpoint
50 if [ -e $mpoint/rootfs.img -a -e $mpoint/rootfs.md5 -a -z "$rootfs_file" ]
52 rootfs_file=$mpoint/rootfs.img
53 rootfs_md5=`head -n 1 $mpoint/rootfs.md5 | cut -c 1-32`
58 if [ "$keep_mpoint" != "yes" ]
66 size=`stat -c %s u-boot.bin`
67 dd if=/dev/mtdblock1 of=u-boot.bin.flashed bs=$size count=1
68 if ! cmp u-boot.bin u-boot.bin.flashed
70 flash_eraseall /dev/mtd1
71 nandwrite -p /dev/mtd1 u-boot.bin
72 log "u-boot.bin flashed."
73 status_uboot="flashed"
75 log "u-boot.bin already flashed, skipped."
76 status_uboot="already there"
79 log "u-boot is missing, skipped."
82 if ! cmp /dev/mtdblock2 /usr/local/erasednandblk
84 flash_eraseall /dev/mtd2
85 status_uboot_env="cleared"
86 log "u-boot environment cleared."
91 # attempt to mount and check
92 ubiattach /dev/ubi_ctrl -m 3 || true
93 mount -t ubifs ubi0:boot /mnt/ubifs 2> /dev/null || true
94 if ! cmp uImage /mnt/ubifs/uImage 2> /dev/null
96 log "flashing uImage.."
97 umount /mnt/ubifs 2> /dev/null || true
98 ubidetach /dev/ubi_ctrl -d 0 2> /dev/null || true
99 # format just in case, should be harmless even it's formated already
100 ubiformat /dev/mtd3 -s 512 -y
101 ubiattach /dev/ubi_ctrl -m 3
102 ubimkvol /dev/ubi0 -m -N boot
103 mount -t ubifs ubi0:boot /mnt/ubifs
104 cp uImage /mnt/ubifs/uImage
105 status_uimage="flashed"
108 log "uImage already flashed, skipped."
109 status_uimage="already there"
112 ubidetach /dev/ubi_ctrl -d 0
114 log "uImage is missing, skipped."
117 if [ -n "$rootfs_file" ]
119 log "Calculating checksum, this might take a few minutes.."
120 real_md5=`md5sum $rootfs_file | cut -c 1-32`
121 if [ "$real_md5" = "$rootfs_md5" ]
129 # be destructive here, too hard to validate rootfs to bother
131 ubiformat /dev/mtd4 -s 512 -y
132 ubiattach /dev/ubi_ctrl -m 4
133 ubimkvol /dev/ubi0 -m -N rootfs
135 log "Writing rootfs, please wait. This may take up to 15 minutes.."
136 ubiupdatevol /dev/ubi0_0 $rootfs_file
137 ubidetach /dev/ubi_ctrl -d 0
138 status_rootfs="flashed"
141 log "root filesystem is missing, skipped."
144 if [ -n "$finalize_mpoint" ]
146 log "running finalize script.."
150 log "finalize.sh failed."
155 umount $finalize_mpoint
158 if [ -n "$rootfs_mpoint" ]
160 umount $rootfs_mpoint 2> /dev/null || true
163 log "======================="
165 log "u-boot: $status_uboot"
166 log "u-boot-env: $status_uboot_env"
167 log "kernel: $status_uimage"
168 log "rootfs: $status_rootfs $rootfs_file"