summaryrefslogtreecommitdiffstats
path: root/updater.sh
blob: 02a1c377cc93e8a6f9903981950f7c206ed6c85f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#!/tmp/busybox sh
#
# Universal Updater Script for Samsung Galaxy S Phones
# (c) 2011 by Teamhacksung
#

set -x
export PATH=/:/sbin:/system/xbin:/system/bin:/tmp:$PATH

# check if we're running on a bml or mtd device
if /tmp/busybox test -e /dev/block/bml7 ; then
# we're running on a bml device

	# make sure sdcard is mounted
	if ! /tmp/busybox grep -q /mnt/sdcard /proc/mounts ; then
		/tmp/busybox mkdir -p /mnt/sdcard
		/tmp/busybox umount -l /dev/block/mmcblk0p1
    		if ! /tmp/busybox mount -t vfat /dev/block/mmcblk0p1 /mnt/sdcard ; then
	      		/tmp/busybox echo "Cannot mount sdcard."
      		        exit 1
    		fi
  	fi

	# remove old log
	rm -rf /mnt/sdcard/cyanogenmod_bml.log

	# everything is logged into /sdcard/cyanogenmod.log
	exec >> /mnt/sdcard/cyanogenmod_bml.log 2>&1

	# make sure efs is mounted
	if ! /tmp/busybox grep -q /efs /proc/mounts ; then
		/tmp/busybox mkdir -p /efs
		/tmp/busybox umount -l /dev/block/stl3
    		if ! /tmp/busybox mount -t rfs /dev/block/stl3 /efs ; then
	      		/tmp/busybox echo "Cannot mount efs."
      		        exit 1
    		fi
  	fi

	# create a backup of efs
	/tmp/busybox rm -rf /mnt/sdcard/backup/efs
	/tmp/busybox mkdir -p /mnt/sdcard/backup/efs
	/tmp/busybox cp -R /efs/ /mnt/sdcard/backup

	# write the package path to sdcard cyanogenmod.cfg
	if /tmp/busybox test -n "$UPDATE_PACKAGE" ; then
		PACKAGE_LOCATION=${UPDATE_PACKAGE#/mnt}
		/tmp/busybox echo "$PACKAGE_LOCATION" > /mnt/sdcard/cyanogenmod.cfg
        fi

	# write new kernel to boot partition
	/tmp/flash_image boot /tmp/boot.img

	# reboot to interrupt the updater-script and load the mtd kernel
        # update.zip will be automatically recalled using extendedcommands
	reboot now

        # make sure to interrupt the updater-script if reboot fails
        exit 1

elif busybox test -e /dev/block/mtdblock0 ; then
# we're running on a mtd device

	# make sure sdcard is mounted
	/tmp/busybox mkdir -p /sdcard
	
	if ! /tmp/busybox grep -q /sdcard /proc/mounts ; then
		/tmp/busybox umount -l /dev/block/mmcblk0p1
    		if ! /tmp/busybox mount -t vfat /dev/block/mmcblk0p1 /sdcard ; then
	      		/tmp/busybox echo "Cannot mount sdcard."
      		exit 1
    		fi
  	fi

	# if cyanogenmod.cfg exists, we need to do the conversion
	if /tmp/busybox test -e /sdcard/cyanogenmod.cfg ; then

		# remove old log
		rm -rf /sdcard/cyanogenmod_mtd.log

		# everything is logged into /sdcard/cyanogenmod.log
		exec >> /sdcard/cyanogenmod_mtd.log 2>&1

		# unmount and format cache
		/tmp/busybox umount -l /cache
		/tmp/erase_image cache

		# unmount and format datadata
		/tmp/busybox umount -l /datadata
		/tmp/erase_image datadata

		# flash radio image
		/tmp/erase_image radio
		/tmp/flash_image radio /tmp/modem.bin

		# restore efs backup
		if /tmp/busybox test -e /sdcard/backup/efs/nv_data.bin ; then
			/tmp/busybox umount -l /efs
			/tmp/erase_image efs
			/tmp/busybox mkdir -p /efs
	
			if ! /tmp/busybox grep -q /efs /proc/mounts ; then
    				if ! /tmp/busybox mount -t yaffs2 /dev/block/mtdblock4 /efs ; then
	      				/tmp/busybox echo "Cannot mount efs."
      					exit 1
    				fi
  			fi

			/tmp/busybox cp -R /sdcard/backup/efs /
			/tmp/busybox umount -l /efs
		else
			/tmp/busybox echo "Cannot restore efs."
			exit 1
		fi

		# we've finished conversion, remove cyanogenmod.cfg
		/tmp/busybox rm -f /sdcard/cyanogenmod.cfg
	fi

	exit 0
fi