Add msm_camera /dev entries
[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 if [ -d /sdcard/android ] ; then
51         card=/sdcard/android
52 else
53         card=/sdcard
54 fi
55
56
57 if [ $notnand = "1" ] ; then
58     
59     if [ -f $card/data.gz ] ; then
60             echo "Please wait... extracting Data Image"
61             if [ -f $card/data.img ] ; then
62                     rm $card/data.img
63             fi
64             gzip -df $card/data.gz
65             [ $? -eq 0 ] || fail "Failed to extract Data Image"
66             mv $card/data $card/data.img
67             echo "done"
68     fi
69     
70     PARTITIONED=0
71     echo "Checking for partition..."
72     if [ -d /sys/block/mmcblk0/mmcblk0p2 ] ; then
73             PARTITIONED=1
74             if [ -d /sys/block/mmcblk0/mmcblk0p3 ] ; then
75                     PARTITIONED=2
76             fi
77     fi
78     
79     if [ -f $card/backupsystem/installedsystem.sqsh -o -f $card/backupsystem/installedsystem.img -o -f $card/backupsystem.ext2 ]; then
80             echo "Partitioned Build Detected"
81     else
82             PARTITIONED=0
83     fi
84     
85     if [ $PARTITIONED -lt 2 ] ; then
86              
87             if [ ! -f $card/data.img ] ; then
88                     echo "Creating a new Data store"
89                     dd if=/dev/zero of=$card/data.img bs=1048576 count=256
90                     [ $? -eq 0 ] || fail "Failed to allocate the storage"
91                     mke2fs -F $card/data.img
92                     [ $? -eq 0 ] || fail "Failed to format the storage"
93             fi
94     fi
95     
96     if [ $PARTITIONED -lt 2 ] ; then
97             losetup /dev/block/loop0 $card/data.img
98             [ $? -eq 0 ] || fail "Failed to find data.img on SD Card"
99             e2fsck -y /dev/block/loop0
100             mount -t ext2 -o noatime,nodiratime,sync /dev/block/loop0 /data
101     else
102             e2fsck -y /dev/block/mmcblk0p3
103             mount -t ext2 -o noatime,nodiratime /dev/block/mmcblk0p3 /data
104     fi
105     [ $? -eq 0 ] || fail "Failed to mount /data"
106     
107     if [ $PARTITIONED -eq 0 ] ; then
108             if      [ -f $card/system.ext2 ] ; then
109                     echo "Using uncompressed system"
110                     losetup /dev/block/loop1 $card/system.ext2
111                     [ $? -eq 0 ] || fail "Failed to reach system.ext2 on SD Card"
112                     e2fsck -y /dev/block/loop1
113                     mount -t ext2 -o noatime,nodiratime /dev/block/loop1 /system
114                     [ $? -eq 0 ] || fail "Failed to mount /system"
115             elif    
116                     [ -f $card/system.sqsh ] ; then
117                     echo "Using SquashFS system"
118                     losetup /dev/block/loop1 $card/system.sqsh
119                     [ $? -eq 0 ] || fail "Failed to find system.sqsh on SD Card"
120                     mount -t squashfs -o ro,noatime,nodiratime /dev/block/loop1 /system
121                     [ $? -eq 0 ] || fail "Failed to mount /system"
122             else
123                     losetup /dev/block/loop1 $card/system.img
124                     [ $? -eq 0 ] || fail "Failed to find system.img on SD Card"
125                     mount -t cramfs -o ro,noatime,nodiratime /dev/block/loop1 /system
126                     [ $? -eq 0 ] || fail "Failed to mount /system"
127             fi
128     else
129             echo "Using partitioned system"
130             e2fsck -y /dev/block/mmcblk0p2
131             mount -t ext2 -o ro,noatime,nodiratime /dev/block/mmcblk0p2 /system
132             [ $? -eq 0 ] || fail "Failed to mount /system"
133     fi
134 fi
135
136 if [ -d $card/AndroidApps ] ; then
137         echo Copying Applications
138         if [ ! -d /data/app ] ; then
139                 mkdir -m 0771 /data/app
140         fi
141         /bin/cp $card/AndroidApps/* /data/app
142         chown -R 1000:1000 /data/app
143 fi
144
145 if [ ! -d $card/media ] ; then
146         echo You have no media folder, please extract the resources to your SD card android folder
147 fi
148
149 SQLITE3="/bin/sqlite3"
150 DB="/data/data/com.android.providers.telephony/databases/telephony.db"
151 if [ -f $DB ] ; then
152         if [ "`$SQLITE3 $DB 'SELECT numeric FROM carriers;' | grep 310995`" != "310995" ] ; then
153                 echo Creating android apn
154                 "$SQLITE3" "$DB" "INSERT INTO carriers VALUES(NULL, 'Android' , '310995' , '310' , '995' , 'internet' , '*' , '*' , '*' , NULL, NULL, NULL, NULL, 'null' , -1, 'default' , 1);"
155
156         fi
157 else
158         echo No telephony database. You must have a new data file. I will check for the android apn on the next reboot
159 fi
160
161 /bin/rm -rf /data/etc
162 /bin/mkdir -m 0755 /data/etc
163 mount /data/etc /etc
164 cp -a /system/etc/* /etc
165 cp -ar /init.etc/* /etc/
166
167 LCDDENSITY=`/bin/grep -o "lcd.density=.*" /proc/cmdline | /bin/sed -e "s/.*lcd.density=//g" -e "s/ .*//g"`
168
169 if [ "$LCDDENSITY" != "" ] ; then
170         echo "ro.sf.lcd_density=$LCDDENSITY" >> /etc/default.prop
171         echo Setting ro.sf.lcd_density=$LCDDENSITY
172 fi
173
174 if [ ! -d /data/shared_prefs ] ; then
175         mkdir -m 0770 /data/shared_prefs
176 fi
177 chmod 0770 /data/shared_prefs
178 chown 1000:1000 /data/shared_prefs
179 mount /data/shared_prefs /shared_prefs
180
181 mount /sdcard/cache /tmp
182
183 cp /system/build.prop /tmp/build.prop
184 KAISER=0
185 DIAMOND=0
186 ### Is this a Kaiser?
187 if [ "`cat /proc/cpuinfo|grep -o Kaiser`" = "Kaiser" ]; then
188         echo "KAISER detected"
189         KAISER=1
190         sed -i s/^#wifi/wifi/ /tmp/build.prop
191         if [ "`grep -c ^wifi /tmp/build.prop`" != "2" ]; then
192                 echo "wifi.interface = tiwlan0" >> /tmp/build.prop
193                 echo "wifi.supplicant_scan_interval = 45" >> /tmp/build.prop
194         fi
195         mount --bind /etc/wifi /system/lib/modules
196 elif [ "`cat /proc/cpuinfo|grep -o Polaris`" = "Polaris" ]; then
197         echo "POLARIS detected"
198         KAISER=1
199         sed -i s/^#wifi/wifi/ /tmp/build.prop
200         if [ "`grep -c ^wifi /tmp/build.prop`" != "2" ]; then
201                 echo "wifi.interface = tiwlan0" >> /tmp/build.prop
202                 echo "wifi.supplicant_scan_interval = 45" >> /tmp/build.prop
203         fi
204         mount --bind /etc/wifi /system/lib/modules
205 elif [ "`cat /proc/cpuinfo|grep -o Diamond`" = "Diamond" ]; then
206         echo "DIAMOND detected"
207         DIAMOND=1
208         sed -i s/^#wifi/wifi/ /tmp/build.prop
209         if [ "`grep -c ^wifi /tmp/build.prop`" != "2" ]; then
210                 echo "wifi.interface = tiwlan0" >> /tmp/build.prop
211                 echo "wifi.supplicant_scan_interval = 45" >> /tmp/build.prop
212         fi
213         mount --bind /etc/wifi /system/lib/modules
214 elif [ "`cat /proc/cpuinfo|grep -o Raphael`" = "Raphael" ]; then
215         echo "RAPHAEL detected"
216         DIAMOND=1
217         sed -i s/^#wifi/wifi/ /tmp/build.prop
218         if [ "`grep -c ^wifi /tmp/build.prop`" != "2" ]; then
219                 echo "wifi.interface = tiwlan0" >> /tmp/build.prop
220                 echo "wifi.supplicant_scan_interval = 45" >> /tmp/build.prop
221         fi
222         mount --bind /etc/wifi /system/lib/modules
223 elif [ "`cat /proc/cpuinfo|grep -o blackstone`" = "blackstone" ]; then
224         echo "BLACKSTONE detected"
225         DIAMOND=1
226         sed -i s/^#wifi/wifi/ /tmp/build.prop
227         if [ "`grep -c ^wifi /tmp/build.prop`" != "2" ]; then
228                 echo "wifi.interface = tiwlan0" >> /tmp/build.prop
229                 echo "wifi.supplicant_scan_interval = 45" >> /tmp/build.prop
230         fi
231         mount --bind /etc/wifi /system/lib/modules
232 elif [ "`cat /proc/cpuinfo|grep -o Topaz`" = "Topaz" ]; then
233         echo "TOPAZ detected"
234         DIAMOND=1
235         sed -i s/^#wifi/wifi/ /tmp/build.prop
236         if [ "`grep -c ^wifi /tmp/build.prop`" != "2" ]; then
237                 echo "wifi.interface = tiwlan0" >> /tmp/build.prop
238                 echo "wifi.supplicant_scan_interval = 45" >> /tmp/build.prop
239         fi
240         mount --bind /etc/wifi /system/lib/modules
241 elif [ "`cat /proc/cpuinfo|grep -o Rhodium`" = "Rhodium" ]; then
242         echo "RHODIUM detected"
243         DIAMOND=1
244         sed -i s/^#wifi/wifi/ /tmp/build.prop
245         if [ "`grep -c ^wifi /tmp/build.prop`" != "2" ]; then
246                 echo "wifi.interface = tiwlan0" >> /tmp/build.prop
247                 echo "wifi.supplicant_scan_interval = 45" >> /tmp/build.prop
248         fi
249         mount --bind /etc/wifi /system/lib/modules
250 else
251         echo "VOGUE detected"
252         sed -i s/^wifi/#wifi/ /tmp/build.prop
253 fi
254
255 mount --bind /tmp/build.prop /system/build.prop
256
257 ### Fix su on some builds...
258 mount --bind /bin/su /system/bin/su
259 mount --bind /bin/su /system/xbin/su
260
261 RCSCRIPT=""
262 RCCONFIG=""
263
264 echo "Checking for build type..."
265 if [ -f /system/hero.build ] ; then
266         echo "Hero build detected"
267         RCSCRIPT="hero"
268         RCCONFIG="hero"
269         ln /data/app_s /system/app
270
271 elif [ -f /system/eclairhero.build ] ; then
272         echo "HERO 2.1 BUILD DETECTED -- ECLAIR"
273         RCSCRIPT="eclairhero"
274         RCCONFIG="eclairhero"
275
276 elif [ -f /system/eclair.build ] ; then
277         echo "Eclair build detected"
278         RCSCRIPT="eclair"
279         RCCONFIG="eclair"
280
281 elif [ -f /system/tattoo.build ] ; then
282         echo "Tattoo build detected"
283         RCSCRIPT="tattoo"
284         RCCONFIG="tattoo"
285
286 elif [ -f /system/donut.build ] ; then
287         echo "Donut build detected"
288         RCSCRIPT="donut"
289         RCCONFIG="donut"
290
291 elif [ -d /system/lib/donut ] ; then
292         echo "Donut build detected"
293         RCSCRIPT="donut"
294         RCCONFIG="donut"
295
296 elif [ -f /system/xrom.build ] ; then
297         echo "xROM build detected"
298         RCSCRIPT="xrom"
299         RCCONFIG="xrom"
300
301 elif [ -f /system/rogers.build ] ; then
302         echo "Rogers build detected"
303         RCSCRIPT="rogers"
304         RCCONFIG="rogers"
305
306 elif [ -f /system/cyanogen.build ] ; then
307         echo "cyanogen experimental detected.....eating donuts"
308         RCSCRIPT="cyanogen"
309         RCCONFIG="cyanogen"
310
311 elif [ -f /system/custom.build ] ; then
312         echo "Custom init.rc detected"
313         cp /system/sysinit.rc /build.cfg/init.sysinit.rc
314         RCCONFIG="hero"
315         RCSCRIPT="sysinit"
316         
317 else
318         echo "Unknown Android build. Assuming Ion variant"
319         RCSCRIPT="ion"
320         RCCONFIG="ion"
321
322         # for the fake sensors library
323         mount /lib/hw /system/lib/hw -o loop
324         chmod 666 /dev/input/event0
325
326         if [ $DIAMOND -eq 1 ] ; then
327                 RCCONFIG="ion.diamond"
328         fi
329 fi
330
331 if [ $KAISER -eq 1 ] ; then
332         RCSCRIPT="$RCSCRIPT.kaiser"
333 fi
334
335 echo "using /init.$RCSCRIPT.rc as init.rc"
336 echo "using $card/conf/$RCCONFIG.user.conf"
337
338 cp "/init.cfg/init.$RCSCRIPT.rc" /etc/init.rc
339
340 #Assume this rootfs.img will be used only on "good" devices
341 #Meaning raph/diam/blac/
342
343 # echo /dev/block/mmcblk0p2 > /sys/devices/platform/usb_mass_storage/lun0/file
344 ifconfig usb0 192.168.20.1 up
345 busybox telnetd -b 192.168.20.1 -l /bin/sh
346 #chmod 4755 /bin/su
347 #mkdir -m 0777 /smodem
348 if [ -d /data/dropbear/ ] ; then
349         echo "Starting SSH"
350         mknod /dev/random c 1 8
351         mknod /dev/urandom c 1 9
352         /bin/dropbear -r /data/dropbear/dropbear_rsa_host_key -s
353 fi
354
355 DIAMOND=1
356 if [ "$DIAMOND" = "1" ];then
357         if [ -e "$card/modules-$(uname -r).tar.gz" ] ;then
358                 mkdir /data/modules
359                 mount --bind /data/modules /lib/modules
360                 tar xzf $card/modules-$(uname -r).tar.gz -C /lib/modules
361                 cd /lib/modules
362                 cp wlan.ko /etc/wifi
363         fi
364         sed -i s/^#wifi/wifi/ /tmp/build.prop
365         if [ "`grep -c ^wifi /tmp/build.prop`" != "2" ]; then
366                 echo "wifi.interface = wlan0" >> /tmp/build.prop
367                 echo "wifi.supplicant_scan_interval = 45" >> /tmp/build.prop
368         fi
369         mount --bind /etc/wifi /system/lib/modules
370 fi
371
372
373 if [ -f "$card/conf/$RCCONFIG.user.conf" ]; then
374         /bin/userinit.sh -c "$card/conf/$RCCONFIG.user.conf"
375 else
376         echo "No user config files ($RCCONFIG) found on sdcard"
377 fi
378
379 mount -tdebugfs none /dbgfs
380 #Activate baclight control
381 echo 3 > /sys/class/htc_hw/test
382 #Smooth scroll
383 echo 40 >/sys/devices/system/cpu/cpu0/cpufreq/ondemand/up_threshold
384 #Activate full charging
385 echo 2 > /dbgfs/htc_battery/charger_state
386 #Activate wifi
387 echo 1 > /dbgfs/htcraphaelmmc_dbg/wifi_pwr
388 echo 1 > /dbgfs/htcraphaelmmc_dbg/wifi_cd
389 echo 1024 > /dbgfs/micropklt_dbg/sleep_leds
390
391 if /bin/grep -c 'physkeyboard=fuze' /proc/cmdline >/dev/null ; then
392         echo "USING RAPH110|FUZE LAYOUT"
393         cp -f /init.etc/keymaps/fuze_microp-keypad.kcm.bin /etc/keymaps/microp-keypad.kcm.bin
394         cp -f /init.etc/keymaps/fuze_microp-keypad.kl /etc/keymaps/microp-keypad.kl
395         cp -f /init.etc/keymaps/fuze_raph_navi_pad.kl /etc/keymaps/raph_navi_pad.kl
396 elif /bin/grep -c 'physkeyboard=raph' /proc/cmdline >/dev/null ; then
397         echo "USING NEW RAPH LAYOUT"
398         cp -f /init.etc/keymaps/raphfix_microp-keypad.kcm.bin /etc/keymaps/microp-keypad.kcm.bin
399 elif /bin/grep -c 'physkeyboard=tilt2' /proc/cmdline >/dev/null ; then
400         echo "USING EXPERIMENTAL TILT2 LAYOUT"
401         cp -f /init.etc/keymaps/tilt2_microp-keypad.kl /etc/keymaps/microp-keypad.kl
402         cp -f /init.etc/keymaps/tilt2_microp-keypad.kcm.bin /etc/keymaps/microp-keypad.kcm.bin
403         cp -f /init.etc/keymaps/tilt2_navi_pad.kl /etc/keymaps/raph_navi_pad.kl
404 elif /bin/grep -c 'physkeyboard=rhod210' /proc/cmdline >/dev/null ; then
405         echo "USING EXPERIMENTAL RHOD210 LAYOUT"
406         cp -f /init.etc/keymaps/rhod210_microp-keypad.kl /etc/keymaps/microp-keypad.kl
407         cp -f /init.etc/keymaps/rhod210_microp-keypad.kcm.bin /etc/keymaps/microp-keypad.kcm.bin
408         cp -f /init.etc/keymaps/rhod210_navi_pad.kl /etc/keymaps/raph_navi_pad.kl
409 else
410         echo "USING OLD KEYMAP"
411         cp -f /init.etc/keymaps/oldqwerty_microp-keypad.kcm.bin /etc/keymaps/microp-keypad.kcm.bin
412         cp -f /init.etc/keymaps/oldqwerty_microp-keypad.kl /etc/keymaps/microp-keypad.kl
413         cp -f /init.etc/keymaps/oldqwerty_raph_navi_pad.kl /etc/keymaps/raph_navi_pad.kl
414 fi
415
416 for i in /sys/class/input/input* ; do
417         if [ "`cat $i/name`" = "tssc-manager" ] ; then
418                 touchscreendir=$i
419                 echo "Touchscreen device directory is $i"
420         fi
421 done
422
423 if [ -f $card/ts-calibration ] ; then
424         echo "Using Saved Touchscreen Calibration"
425         echo 128,128,1903,128,128,1907,1903,1907,1024,1024 > $touchscreendir/calibration_screen
426         cat $card/ts-calibration > $touchscreendir/calibration_points
427 else
428         mkdir /dev/graphics
429         mknod /dev/graphics/fb0 c 29 0
430         clear
431         echo; echo; echo; echo; echo; echo; echo; echo "Calibrating Touchscreen:"
432         echo "Click the Five Targets in order -- Top Left, Top Right, Middle, Bottom Left, Bottom Right"
433         echo "(Tap lightly. The screen is quite sensitive.)"
434         tssc-calibrate
435         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
436         if [ $? -eq 0 ] ; then
437                 echo "Touchscreen Calibration Failed"
438         else
439                 echo "Touchscreen Calibration Successful; Saving..."
440                 cat $touchscreendir/calibration_points > $card/ts-calibration
441         fi
442 fi
443
444 mkdir /dev/msm_camera
445 mknod /dev/msm_camera/control0 c 250 0
446 mknod /dev/msm_camera/config0 c 250 1
447 mknod /dev/msm_camera/frame0 c 250 2
448
449 exec /init.android