Update libhardware_legacy
[xdandroid:rootfs.git] / init
1 #!/bin/sh
2 fail() {
3         /bin/echo "Failed"
4                 /bin/echo "$1"
5                 exec /bin/sh
6 }
7
8 /bin/mount -o remount,rw / /
9
10 PATH=/sbin:/system/sbin:/system/bin:/bin:/system/xbin:/system/xbin/bb:/data/local/bin
11
12 /bin/echo "Rootfs loaded."
13
14 /bin/mount -t proc proc /proc
15 /bin/mount -t sysfs sys /sys
16
17 /bin/mount | grep mtd
18 notnand=$?
19
20 if [ $notnand = "0" ] ; then
21   echo "running from NAND"
22   /bin/mount -t yaffs2 /dev/block/mtdblock2 /system
23   /bin/mount -t yaffs2 /dev/block/mtdblock3 /data
24 fi
25
26
27 partition=mmcblk0p1
28
29 # Try unpartitioned card
30 if [ ! -d /sys/block/mmcblk0/$partition ] ; then
31         partition=mmcblk0
32 fi
33
34 if [ -f /sys/class/vogue_hw/gsmphone ] ; then
35         echo "GSM phone found"
36 fi
37
38 #mkdir -m 0777 /sdcard
39 #fsck already done in initrd
40 mount -t vfat -o fmask=0000,dmask=0000,rw,flush,noatime,nodiratime /dev/block/$partition /sdcard
41 [ $? -eq 0 ] || fail "Failed to mount the SD card. Cannot continue."
42
43 if [ ! -d /sdcard/cache ] ; then
44         mkdir /sdcard/cache
45 fi
46
47 #mkdir -m 0777 /cache
48 mount /sdcard/cache /cache
49
50 CARD_PATH=`/bin/grep -o "rel_path=.*" /proc/cmdline | /bin/sed -e "s/.*rel_path=//g" -e "s/ .*//g"`
51 if [ "$CARD_PATH" = "" ];then
52         CARD_PATH="andboot"
53 fi;
54 if [ -d /sdcard/$CARD_PATH ] ; then
55         card=/sdcard/$CARD_PATH
56 else
57         card=/sdcard
58 fi
59
60
61 if [ $notnand = "1" ] ; then
62     
63     if [ -f $card/data.gz ] ; then
64             echo "Please wait... extracting Data Image"
65             if [ -f $card/data.img ] ; then
66                     rm $card/data.img
67             fi
68             gzip -df $card/data.gz
69             [ $? -eq 0 ] || fail "Failed to extract Data Image"
70             mv $card/data $card/data.img
71             echo "done"
72     fi
73     
74     PARTITIONED=0
75     echo "Checking for partition..."
76     if [ -d /sys/block/mmcblk0/mmcblk0p2 ] ; then
77             PARTITIONED=1
78             if [ -d /sys/block/mmcblk0/mmcblk0p3 ] ; then
79                     PARTITIONED=2
80             fi
81     fi
82     
83     if [ -f $card/backupsystem/installedsystem.sqsh -o -f $card/backupsystem/installedsystem.img -o -f $card/backupsystem.ext2 ]; then
84             echo "Partitioned Build Detected"
85     else
86             PARTITIONED=0
87     fi
88     
89     if [ $PARTITIONED -lt 2 ] ; then
90              
91             if [ ! -f $card/data.img ] ; then
92                     echo "Creating a new Data store"
93                     dd if=/dev/zero of=$card/data.img bs=1048576 count=256
94                     [ $? -eq 0 ] || fail "Failed to allocate the storage"
95                     mke2fs -F $card/data.img
96                     [ $? -eq 0 ] || fail "Failed to format the storage"
97             fi
98     fi
99     
100     if [ $PARTITIONED -lt 2 ] ; then
101             losetup /dev/block/loop0 $card/data.img
102             [ $? -eq 0 ] || fail "Failed to find data.img on SD Card"
103             e2fsck -y /dev/block/loop0
104             mount -t ext2 -o noatime,nodiratime,sync /dev/block/loop0 /data
105     else
106             e2fsck -y /dev/block/mmcblk0p3
107             mount -t ext2 -o noatime,nodiratime /dev/block/mmcblk0p3 /data
108     fi
109     [ $? -eq 0 ] || fail "Failed to mount /data"
110     
111     if [ $PARTITIONED -eq 0 ] ; then
112             if      [ -f $card/system.ext2 ] ; then
113                     echo "Using uncompressed system"
114                     losetup /dev/block/loop1 $card/system.ext2
115                     [ $? -eq 0 ] || fail "Failed to reach system.ext2 on SD Card"
116                     e2fsck -y /dev/block/loop1
117                     mount -t ext2 -o noatime,nodiratime /dev/block/loop1 /system
118                     [ $? -eq 0 ] || fail "Failed to mount /system"
119             elif    
120                     [ -f $card/system.sqsh ] ; then
121                     echo "Using SquashFS system"
122                     losetup /dev/block/loop1 $card/system.sqsh
123                     [ $? -eq 0 ] || fail "Failed to find system.sqsh on SD Card"
124                     mount -t squashfs -o ro,noatime,nodiratime /dev/block/loop1 /system
125                     [ $? -eq 0 ] || fail "Failed to mount /system"
126             else
127                     losetup /dev/block/loop1 $card/system.img
128                     [ $? -eq 0 ] || fail "Failed to find system.img on SD Card"
129                     mount -t cramfs -o ro,noatime,nodiratime /dev/block/loop1 /system
130                     [ $? -eq 0 ] || fail "Failed to mount /system"
131             fi
132     else
133             echo "Using partitioned system"
134             e2fsck -y /dev/block/mmcblk0p2
135             mount -t ext2 -o ro,noatime,nodiratime /dev/block/mmcblk0p2 /system
136             [ $? -eq 0 ] || fail "Failed to mount /system"
137     fi
138 fi
139
140 if [ -d $card/AndroidApps ] ; then
141         echo Copying Applications
142         if [ ! -d /data/app ] ; then
143                 mkdir -m 0771 /data/app
144         fi
145         /bin/cp $card/AndroidApps/* /data/app
146         chown -R 1000:1000 /data/app
147 fi
148
149 if [ ! -d $card/media ] ; then
150         echo You have no media folder, please extract the resources to your SD card android folder
151 fi
152
153 /bin/rm -rf /data/etc
154 /bin/mkdir -m 0755 /data/etc
155 mount /data/etc /etc
156 cp -a /system/etc/* /etc
157 cp -ar /init.etc/* /etc/
158
159 LCDDENSITY=`/bin/grep -o "lcd.density=.*" /proc/cmdline | /bin/sed -e "s/.*lcd.density=//g" -e "s/ .*//g"`
160
161 if [ "$LCDDENSITY" != "" ] ; then
162         echo "ro.sf.lcd_density=$LCDDENSITY" >> /etc/default.prop
163         echo Setting ro.sf.lcd_density=$LCDDENSITY
164 fi
165
166 if [ ! -d /data/shared_prefs ] ; then
167         mkdir -m 0770 /data/shared_prefs
168 fi
169 chmod 0770 /data/shared_prefs
170 chown 1000:1000 /data/shared_prefs
171 mount /data/shared_prefs /shared_prefs
172
173 mount /sdcard/cache /tmp
174
175 cp /system/build.prop /tmp/build.prop
176 KAISER=0
177 DIAMOND=0
178 WIFI_TI=0
179 WIFI_BCM=0
180 ### Is this a Kaiser?
181 if cat /proc/cpuinfo|grep -q Kaiser ; then
182         echo "KAISER detected"
183         KAISER=1
184         WIFI_TI=1
185 elif cat /proc/cpuinfo|grep -q Polaris ; then
186         echo "POLARIS detected"
187         KAISER=1
188         WIFI_TI=1
189 elif cat /proc/cpuinfo|grep -q Diamond ; then
190         echo "DIAMOND detected"
191         DIAMOND=1
192         WIFI_TI=1
193 elif cat /proc/cpuinfo|grep -q Raphael ; then
194         echo "RAPHAEL detected"
195         DIAMOND=1
196         WIFI_TI=1
197 elif cat /proc/cpuinfo|grep -q blackstone ; then
198         echo "BLACKSTONE detected"
199         DIAMOND=1
200         WIFI_TI=1
201 elif cat /proc/cpuinfo|grep -q Topaz ; then
202         echo "TOPAZ detected"
203         DIAMOND=1
204         WIFI_TI=1
205 elif cat /proc/cpuinfo|grep -q Rhodium ; then
206         echo "RHODIUM detected"
207         DIAMOND=1
208         WIFI_BCM=1
209 else
210         echo "VOGUE detected"
211         sed -i s/^wifi/#wifi/ /tmp/build.prop
212 fi
213
214 mount --bind /tmp/build.prop /system/build.prop
215
216 ### Fix su on some builds...
217 mount --bind /bin/su /system/bin/su 2> /dev/null
218 mount --bind /bin/su /system/xbin/su 2> /dev/null
219
220 RCSCRIPT=""
221 RCCONFIG=""
222
223 echo "Checking for build type..."
224 if [ -f /system/hero.build ] ; then
225         echo "Hero build detected"
226         RCSCRIPT="hero"
227         RCCONFIG="hero"
228         ln /data/app_s /system/app
229
230 elif [ -f /system/eclairhero.build ] ; then
231         echo "HERO 2.1 BUILD DETECTED -- ECLAIR"
232         RCSCRIPT="eclairhero"
233         RCCONFIG="eclairhero"
234         mount --bind /lib/eclair/hw /system/lib/hw
235
236 elif [ -f /system/eclair.build ] ; then
237         echo "Eclair build detected"
238         RCSCRIPT="eclair"
239         RCCONFIG="eclair"
240         mount --bind /lib/eclair/hw /system/lib/hw
241
242 elif [ -f /system/tattoo.build ] ; then
243         echo "Tattoo build detected"
244         RCSCRIPT="tattoo"
245         RCCONFIG="tattoo"
246
247 elif [ -f /system/donut.build ] ; then
248         echo "Donut build detected"
249         RCSCRIPT="donut"
250         RCCONFIG="donut"
251         mount --bind /lib/donut/hw /system/lib/hw
252
253 elif [ -d /system/lib/donut ] ; then
254         echo "Donut build detected"
255         RCSCRIPT="donut"
256         RCCONFIG="donut"
257
258 elif [ -f /system/xrom.build ] ; then
259         echo "xROM build detected"
260         RCSCRIPT="xrom"
261         RCCONFIG="xrom"
262
263 elif [ -f /system/rogers.build ] ; then
264         echo "Rogers build detected"
265         RCSCRIPT="rogers"
266         RCCONFIG="rogers"
267
268 elif [ -f /system/cyanogen.build ] ; then
269         echo "cyanogen experimental detected.....eating donuts"
270         RCSCRIPT="cyanogen"
271         RCCONFIG="cyanogen"
272
273 elif [ -f /system/custom.build ] ; then
274         echo "Custom init.rc detected"
275         cp /system/sysinit.rc /build.cfg/init.sysinit.rc
276         RCCONFIG="hero"
277         RCSCRIPT="sysinit"
278         
279 else
280         echo "Unknown Android build. Assuming Ion variant"
281         RCSCRIPT="ion"
282         RCCONFIG="ion"
283
284         # for the fake sensors library
285         mount /lib/hw /system/lib/hw -o loop
286         chmod 666 /dev/input/event0
287
288         if [ $DIAMOND -eq 1 ] ; then
289                 RCCONFIG="ion.diamond"
290         fi
291 fi
292
293 if [ $KAISER -eq 1 ] ; then
294         RCSCRIPT="$RCSCRIPT.kaiser"
295 fi
296
297 echo "using /init.$RCSCRIPT.rc as init.rc"
298 echo "using $card/conf/$RCCONFIG.user.conf"
299
300 cp "/init.cfg/init.$RCSCRIPT.rc" /etc/init.rc
301
302 #Assume this rootfs.img will be used only on "good" devices
303 #Meaning raph/diam/blac/
304
305 # echo /dev/block/mmcblk0p2 > /sys/devices/platform/usb_mass_storage/lun0/file
306 ifconfig usb0 192.168.20.1 up
307 busybox telnetd -b 192.168.20.1 -l /bin/sh
308 #chmod 4755 /bin/su
309 #mkdir -m 0777 /smodem
310 if [ -d /data/dropbear/ ] ; then
311         echo "Starting SSH"
312         mknod /dev/random c 1 8
313         mknod /dev/urandom c 1 9
314         /bin/dropbear -r /data/dropbear/dropbear_rsa_host_key -s
315 fi
316
317 if [ "$WIFI_TI" = "1" ] || [ "$WIFI_BCM" = "1" ];then
318         if [ -e "$card/modules-$(uname -r).tar.gz" ] && ! `strings /data/modules/wlan.ko 2>/dev/null | grep -q "vermagic=$(uname -r)"`; then
319                 echo "Installing $card/modules-$(uname -r).tar.gz"
320                 if [ ! -d "/data/modules" ] ; then
321                         mkdir /data/modules
322                 fi
323                 tar xzf $card/modules-$(uname -r).tar.gz -C /data/modules
324                 ln -s /data/modules /data/modules/`uname -r`
325
326                 [ -f /etc/wifi/wlan.ko ] && rm /etc/wifi/wlan.ko
327                 cp -R /etc/wifi/* /data/modules/
328                 depmod
329         else
330                 echo "Modules already unpacked for this kernel version -- skipping installation of $card/modules-$(uname -r).tar.gz"
331         fi
332         mount --bind /data/modules /lib/modules
333         mount --bind /data/modules /system/lib/modules
334         sed -i s/^#wifi/wifi/ /tmp/build.prop
335 fi
336
337 mount --bind /lib/eclair/libhardware_legacy.so /system/lib/libhardware_legacy.so
338 if [ "$WIFI_TI" = "1" ];then
339         if [ "`grep -c ^wifi /tmp/build.prop`" != "2" ]; then
340                 echo "wifi.interface = tiwlan0" >> /tmp/build.prop
341                 echo "wifi.supplicant_scan_interval = 45" >> /tmp/build.prop
342         fi
343 fi
344
345 if [ "$WIFI_BCM" = "1" ] ;then
346         if [ "`grep -c ^wifi /tmp/build.prop`" != "2" ]; then
347                 echo "wifi.interface = eth0" >> /tmp/build.prop
348                 echo "wifi.supplicant_scan_interval = 45" >> /tmp/build.prop
349         fi
350
351         # fyi: firmware is loaded from /etc/wifi/bcm432x/bcm4325-rtecdc.bin, nvram from /data/wifi-nvram.txt
352
353         mount --bind /etc/wifi/bcm432x/dhcpcd.conf /system/etc/dhcpcd/dhcpcd.conf
354         mount --bind /etc/wifi/bcm432x/wpa_supplicant.conf /system/etc/wifi/wpa_supplicant.conf
355
356         # init.rc: fix wpa_supplicant service
357         sed -i s/-itiwlan0/-ieth0/ /etc/init.rc
358         sed -i s/-Dtiwlan0/-Dwext/ /etc/init.rc
359
360         # init.rc: fix dhcpcd service, wifi.interface, and wpa_supplicant service socket
361         sed -i s/tiwlan0/eth0/ /etc/init.rc
362
363         # init.rc:
364         sed -i s/user\ wifi/#user\ wifi/ /etc/init.rc
365         sed -i s/group\ wifi/#group\ wifi/ /etc/init.rc
366
367         # extract nvram (todo: clean this up/integrate with TI calibration)
368         if [ ! -e /data/wifi-nvram.txt ]; then
369                 for SKIP in 5744 4736;do
370                         insmod /lib/modules/mtdchar.ko
371                         mknod /dev/mtd0ro c 90 1
372                         mkdir /lib/modules/$(uname -r)
373
374                         dd if=/dev/mtd0ro of=/tmp/tempcal bs=8192 count=1 skip=$SKIP
375                         rm /dev/mtd0ro
376                         rmmod mtdchar
377                         rmdir /lib/modules/$(uname -r)
378                         dd if=/tmp/tempcal of=/data/wifi-nvram.txt bs=1 count=466
379                         rm /tmp/tempcal
380                 
381                         if grep nocrc= /data/wifi-nvram.txt 2>&1 > /dev/null;then 
382                                 break
383                         fi;
384                 done
385                 if [ "$SKIP" = "5744" ];then
386                         echo "CDMA Rhodium detected"
387                 fi;
388                 if [ "$SKIP" = "4736" ];then
389                         echo "GSM Rhodium detected"
390                 fi;
391
392         fi
393 fi
394
395
396 if [ -f "$card/conf/$RCCONFIG.user.conf" ]; then
397         /bin/userinit.sh -c "$card/conf/$RCCONFIG.user.conf"
398 else
399         echo "No user config files ($RCCONFIG) found on sdcard"
400 fi
401
402 mount -tdebugfs none /dbgfs
403 #Activate baclight control
404 echo 3 > /sys/class/htc_hw/test
405 #Smooth scroll
406 echo 40 >/sys/devices/system/cpu/cpu0/cpufreq/ondemand/up_threshold
407 #Activate full charging
408 echo 2 > /dbgfs/htc_battery/charger_state
409
410 echo 1024 > /dbgfs/micropklt_dbg/sleep_leds
411
412 if /bin/grep -c 'physkeyboard=fuze' /proc/cmdline >/dev/null ; then
413         echo "USING RAPH110|FUZE LAYOUT"
414         cp -f /init.etc/keymaps/fuze_microp-keypad.kcm.bin /etc/keymaps/microp-keypad.kcm.bin
415         cp -f /init.etc/keymaps/fuze_microp-keypad.kl /etc/keymaps/microp-keypad.kl
416         cp -f /init.etc/keymaps/fuze_raph_navi_pad.kl /etc/keymaps/raph_navi_pad.kl
417 elif /bin/grep -c 'physkeyboard=raph' /proc/cmdline >/dev/null ; then
418         echo "USING NEW RAPH LAYOUT"
419         cp -f /init.etc/keymaps/raphfix_microp-keypad.kcm.bin /etc/keymaps/microp-keypad.kcm.bin
420 elif /bin/grep -c 'physkeyboard=tilt2' /proc/cmdline >/dev/null ; then
421         echo "USING EXPERIMENTAL TILT2 LAYOUT"
422         cp -f /init.etc/keymaps/tilt2_microp-keypad.kl /etc/keymaps/microp-keypad.kl
423         cp -f /init.etc/keymaps/tilt2_microp-keypad.kcm.bin /etc/keymaps/microp-keypad.kcm.bin
424         cp -f /init.etc/keymaps/tilt2_navi_pad.kl /etc/keymaps/raph_navi_pad.kl
425 elif /bin/grep -c 'physkeyboard=rhod210' /proc/cmdline >/dev/null ; then
426         echo "USING EXPERIMENTAL RHOD210 LAYOUT"
427         cp -f /init.etc/keymaps/rhod210_microp-keypad.kl /etc/keymaps/microp-keypad.kl
428         cp -f /init.etc/keymaps/rhod210_microp-keypad.kcm.bin /etc/keymaps/microp-keypad.kcm.bin
429         cp -f /init.etc/keymaps/rhod210_navi_pad.kl /etc/keymaps/raph_navi_pad.kl
430 elif /bin/grep -c 'physkeyboard=rhod100_de' /proc/cmdline >/dev/null ; then
431         echo "USING RHOD100 DE LAYOUT"
432         cp -f /init.etc/keymaps/rhod100_de_microp-keypad.kl /etc/keymaps/microp-keypad.kl
433         cp -f /init.etc/keymaps/rhod100_de_microp-keypad.kcm.bin /etc/keymaps/microp-keypad.kcm.bin
434         cp -f /init.etc/keymaps/rhod100_de_navi_pad.kl /etc/keymaps/raph_navi_pad.kl
435 elif /bin/grep -c 'physkeyboard=rhod100_fr' /proc/cmdline >/dev/null ; then
436         echo "USING RHOD100 FR LAYOUT"
437         cp -f /init.etc/keymaps/rhod100_fr_microp-keypad.kl /etc/keymaps/microp-keypad.kl
438         cp -f /init.etc/keymaps/rhod100_fr_microp-keypad.kcm.bin /etc/keymaps/microp-keypad.kcm.bin
439         cp -f /init.etc/keymaps/rhod100_fr_navi_pad.kl /etc/keymaps/raph_navi_pad.kl
440 elif /bin/grep -c 'physkeyboard=rhod100_it' /proc/cmdline >/dev/null ; then
441         echo "USING RHOD100 IT LAYOUT"
442         cp -f /init.etc/keymaps/rhod100_it_microp-keypad.kl /etc/keymaps/microp-keypad.kl
443         cp -f /init.etc/keymaps/rhod100_it_microp-keypad.kcm.bin /etc/keymaps/microp-keypad.kcm.bin
444         cp -f /init.etc/keymaps/rhod100_it_navi_pad.kl /etc/keymaps/raph_navi_pad.kl
445 elif /bin/grep -c 'physkeyboard=rhod100_uk' /proc/cmdline >/dev/null ; then
446         echo "USING RHOD100 UK LAYOUT"
447         cp -f /init.etc/keymaps/rhod100_uk_microp-keypad.kl /etc/keymaps/microp-keypad.kl
448         cp -f /init.etc/keymaps/rhod100_uk_microp-keypad.kcm.bin /etc/keymaps/microp-keypad.kcm.bin
449         cp -f /init.etc/keymaps/rhod100_uk_navi_pad.kl /etc/keymaps/raph_navi_pad.kl
450 elif /bin/grep -c 'physkeyboard=rhod100_nordic' /proc/cmdline >/dev/null ; then
451         echo "USING RHOD100 NORDIC LAYOUT"
452         cp -f /init.etc/keymaps/rhod100_nordic_microp-keypad.kl /etc/keymaps/microp-keypad.kl
453         cp -f /init.etc/keymaps/rhod100_nordic_microp-keypad.kcm.bin /etc/keymaps/microp-keypad.kcm.bin
454         cp -f /init.etc/keymaps/rhod100_nordic_navi_pad.kl /etc/keymaps/raph_navi_pad.kl
455 elif /bin/grep -c 'physkeyboard=rhod400' /proc/cmdline >/dev/null ; then
456         echo "USING EXPERIMENTAL RHOD400 LAYOUT"
457         cp -f /init.etc/keymaps/rhod400_microp-keypad.kl /etc/keymaps/microp-keypad.kl
458         cp -f /init.etc/keymaps/rhod400_microp-keypad.kcm.bin /etc/keymaps/microp-keypad.kcm.bin
459         cp -f /init.etc/keymaps/rhod400_navi_pad.kl /etc/keymaps/raph_navi_pad.kl #does not exist, just following example
460 elif /bin/grep -c 'physkeyboard=rhod500' /proc/cmdline >/dev/null ; then
461         echo "USING EXPERIMENTAL RHOD500 LAYOUT"
462         cp -f /init.etc/keymaps/rhod500_microp-keypad.kl /etc/keymaps/microp-keypad.kl
463         cp -f /init.etc/keymaps/rhod500_microp-keypad.kcm.bin /etc/keymaps/microp-keypad.kcm.bin
464         cp -f /init.etc/keymaps/rhod500_navi_pad.kl /etc/keymaps/raph_navi_pad.kl #does not exist, just following example
465 else
466         echo "USING OLD KEYMAP"
467         cp -f /init.etc/keymaps/oldqwerty_microp-keypad.kcm.bin /etc/keymaps/microp-keypad.kcm.bin
468         cp -f /init.etc/keymaps/oldqwerty_microp-keypad.kl /etc/keymaps/microp-keypad.kl
469         cp -f /init.etc/keymaps/oldqwerty_raph_navi_pad.kl /etc/keymaps/raph_navi_pad.kl
470 fi
471
472 cp -af /init.etc/keymaps/qwerty.kcm.bin /init.etc/keymaps/qwerty.kl /etc/keymaps/
473 mount --bind /etc/keymaps /system/usr/keychars
474 mount --bind /etc/keymaps /system/usr/keylayout
475
476 for i in /sys/class/input/input* ; do
477         if [ "`cat $i/name`" = "tssc-manager" ] ; then
478                 touchscreendir=$i
479                 echo "Touchscreen device directory is $i"
480         fi
481 done
482
483 if [ -f $card/ts-calibration ] ; then
484         echo "Using Saved Touchscreen Calibration"
485         echo 128,128,1903,128,128,1907,1903,1907,1024,1024 > $touchscreendir/calibration_screen
486         cat $card/ts-calibration > $touchscreendir/calibration_points
487 else
488         mkdir /dev/graphics
489         mknod /dev/graphics/fb0 c 29 0
490         clear
491         echo; echo; echo; echo; echo; echo; echo; echo "Calibrating Touchscreen:"
492         echo "Click the Five Targets in order -- Top Left, Top Right, Middle, Bottom Left, Bottom Right"
493         echo "(Tap lightly. The screen is quite sensitive.)"
494         tssc-calibrate
495         echo 0,0,0,0,0,0,0,0,0,0 | cmp -s $touchscreendir/calibration_points # determine if calibration is still null -- means failed calibration
496         if [ $? -eq 0 ] ; then
497                 echo "Touchscreen Calibration Failed"
498         else
499                 echo "Touchscreen Calibration Successful; Saving..."
500                 cat $touchscreendir/calibration_points > $card/ts-calibration
501         fi
502 fi
503
504 mkdir /dev/msm_camera
505 mknod /dev/msm_camera/control0 c 250 0
506 mknod /dev/msm_camera/config0 c 250 1
507 mknod /dev/msm_camera/frame0 c 250 2
508 chmod a+s /bin/pppd
509
510 exec /init.android