OSDN Git Service

add auto mount for sdcard
[android-x86/bootable-newinstaller.git] / initrd / init
1 #!/bin/busybox sh
2 #
3 # By Chih-Wei Huang <cwhuang@linux.org.tw>
4 # Last updated 2009/07/18
5 #
6 # License: GNU Public License
7 # We explicitely grant the right to use the scripts
8 # with Android-x86 project.
9 #
10
11 if [ -n "$DEBUG" ]; then
12         LOG=/tmp/log
13         set -x
14 else
15         LOG=/dev/null
16         [ -e $LOG ] || busybox mknod $LOG c 1 3
17 fi
18 exec 2> $LOG
19
20 busybox mount -t proc proc /proc
21 busybox mount -t sysfs sys /sys
22
23 busybox --install -s
24
25 export PATH=$PATH:/system/bin
26
27 if [ -n "$DEBUG" ]; then
28         mknod /dev/tty2 c 4 2 && openvt
29         mknod /dev/tty3 c 4 3 && openvt
30 fi
31
32 echo -n Detecting Android...
33
34 while [ 1 ]; do
35         mdev -s
36
37         for device in /dev/sr* /dev/sd[a-z]*; do
38                 mount $device /mnt || continue
39                 cd /mnt/$SRC
40                 if [ ! -e ramdisk.img -o ! -e system.img ]; then
41                         umount /mnt
42                         continue
43                 fi
44                 mount -t tmpfs tmpfs /android
45                 cd /android
46                 zcat /mnt/$SRC/ramdisk.img | cpio -id > /dev/null
47                 mount -o loop,rw /mnt/$SRC/system.img /sfs
48                 if [ -e /sfs/etc/mountd.conf ]; then
49                         if [ -n "$SDCARD" ]; then
50                                 if [ -b $SDCARD ]; then
51                                         sed -i "s|\(^ *block_device *\)\(/dev/.*\)|\1$SDCARD|g" /sfs/etc/mountd.conf
52                                         sed -i 's/^EXTERNAL_STORAGE_STATE=.*$/EXTERNAL_STORAGE_STATE=mounted/g' /sfs/build.prop
53                                 elif [ -b /dev/$SDCARD ]; then
54                                         SDCARD=`echo $SDCARD | sed -e 's|^/\(.*\)|\1|g'`
55                                         sed -i "s|\(^ *block_device *\)\(/dev/.*\)|\1/dev/$SDCARD|g" /sfs/etc/mountd.conf
56                                         sed -i 's/^EXTERNAL_STORAGE_STATE=.*$/EXTERNAL_STORAGE_STATE=mounted/g' /sfs/build.prop
57                                 else
58                                         SDCARD=`echo $SDCARD | sed -e 's|^/\(.*\)|\1|g'`
59                                         # reset the mount status, mountd will set it when the external storage is added
60                                         sed -i 's/^EXTERNAL_STORAGE_STATE=.*$/EXTERNAL_STORAGE_STATE=unmounted/g' /sfs/build.prop
61                                         _sdcard=1
62                                         sed -i "s|\(^ *block_device *\)\(/dev/.*\)|\1/dev/$SDCARD|g" /sfs/etc/mountd.conf
63                                 fi
64                         else
65                                 # clean up the mountd.conf to always mount from tmpfs
66                                 sed -i "s|\(^ *block_device *\)\(/dev/.*\)|\1/dev/SDCARD|g" /sfs/etc/mountd.conf
67                                 sed -i 's/^EXTERNAL_STORAGE_STATE=.*$/EXTERNAL_STORAGE_STATE=mounted/g' /sfs/build.prop
68                         fi
69                 elif [ -e /sfs/build.prop ]; then
70                         sed -i 's/^EXTERNAL_STORAGE_STATE=.*$/EXTERNAL_STORAGE_STATE=mounted/g' /sfs/build.prop
71                 fi
72                 umount /sfs
73                 mount -o loop,ro /mnt/$SRC/system.img /sfs
74                 if [ -e /sfs/system.img ]; then
75                         mount -o loop,rw /sfs/system.img system
76                         if [ -e system/etc/mountd.conf ]; then
77                                 if [ -n "$SDCARD" ] ; then
78                                         if [ -b $SDCARD ]; then
79                                                 sed -i "s|\(^ *block_device *\)\(/dev/.*\)|\1$SDCARD|g" /system/etc/mountd.conf
80                                                 sed -i 's/^EXTERNAL_STORAGE_STATE=.*$/EXTERNAL_STORAGE_STATE=mounted/g' /system/build.prop
81                                         elif [ -b /dev/$SDCARD ]; then
82                                                 SDCARD=`echo $SDCARD | sed -e 's|^/\(.*\)|\1|g'`
83                                                 sed -i "s|\(^ *block_device *\)\(/dev/.*\)|\1/dev/$SDCARD|g" /sfs/etc/mountd.conf
84                                                 sed -i 's/^EXTERNAL_STORAGE_STATE=.*$/EXTERNAL_STORAGE_STATE=mounted/g' /system/build.prop
85                                         else
86                                                 SDCARD=`echo $SDCARD | sed -e 's|^/\(.*\)|\1|g'`
87                                                 # reset the mount status, mountd will set it when the external storage is added
88                                                 sed -i 's/^EXTERNAL_STORAGE_STATE=.*$/EXTERNAL_STORAGE_STATE=unmounted/g' /system/build.prop
89                                                 _sdcard=1
90                                                 sed -i "s|\(^ *block_device *\)\(/dev/.*\)|\1/dev/$SDCARD|g" /system/etc/mountd.conf
91                                         fi
92                                 else
93                                         # clean up the mountd.conf to always mount from tmpfs
94                                         sed -i "s|\(^ *block_device *\)\(/dev/.*\)|\1/dev/SDCARD|g" /system/etc/mountd.conf
95                                         sed -i 's/^EXTERNAL_STORAGE_STATE=.*$/EXTERNAL_STORAGE_STATE=mounted/g' /system/build.prop
96                                 fi
97                         elif [ -e system/build.prop ]; then
98                                 sed -i 's/^EXTERNAL_STORAGE_STATE=.*$/EXTERNAL_STORAGE_STATE=mounted/g' /system/build.prop
99                         fi
100                         umount system
101                         mount -o loop,ro /sfs/system.img system
102                 else
103                         mount --move /sfs system
104                 fi
105                 mkdir cache sdcard
106                 mount -t tmpfs tmpfs cache
107                 echo " found at $device"
108                 break
109         done
110         mountpoint -q /android && break
111         sleep 1
112         echo -n .
113         if [ -n "$DEBUG" ]; then
114                 echo -e "\nType 'exit' to continue booting...\n"
115                 sh
116         fi
117 done
118
119 ln -s android/system /
120
121 ln -s ../system/lib/modules /lib
122
123 if [ -b "$DATA" ]; then
124         mount $DATA data
125 elif [ -b "/dev/$DATA" ]; then
126         mount /dev/$DATA data
127 elif [ -d /mnt/$SRC/data ]; then
128         mount --bind /mnt/$SRC/data data
129 else
130         mount -t tmpfs tmpfs data
131 fi
132 if [ -z "$_sdcard"  ]; then
133         if [ -b "$SDCARD" ]; then
134                 mount $SDCARD sdcard
135         elif [ -b "/dev/$SDCARD" ]; then
136                 mount /dev/$SDCARD sdcard
137         else
138                 if [ -d /mnt/$SRC/sdcard ]; then
139                         mount --bind /mnt/$SRC/sdcard sdcard
140                 else
141                         mount -t tmpfs tmpfs sdcard
142                 fi
143         fi
144 fi
145
146 # load scripts
147 for s in `ls /scripts/* /mnt/$SRC/scripts/*`; do
148         source $s
149 done
150
151 load_modules
152
153 [ -n "$INSTALL" ] && install_hd
154
155 if [ -n "$DEBUG" ]; then
156         echo -e "\nUse Alt-F1/F2/F3 to switch between virtual consoles"
157         echo -e "Type 'exit' to enter Android...\n"
158
159         # FIXME: all error messages in the shell are sent to $LOG
160         sh
161         chroot /android /init
162 else
163         exec switch_root /android /init
164 fi
165
166 sh # aviod kernel panic