Qtopia/X11: Install the right Qtopia XSession start script as well
[vuplus_openembedded] / packages / initrdscripts / files / 30-bootmenu.sh
1 #
2 # (c) 2007 Paul Sokolovsky
3 #
4
5 # If root is explicitly specified, skip interactive selection
6 if [ -z "$ROOT_DEVICE" ]; then
7 ##############################
8
9 E="\033["
10 MOUNTLOC="tmp"
11 LOOP_IMG_MASK='*.img'
12
13 if ! (echo " " | read -n1 foo) >/dev/null 2>&1; then
14     echo "'read' command lacks -n switch support, aborting" 
15     exit 1
16 fi
17
18 mkdir -p $MOUNTLOC
19
20 list=""
21
22 add_menu_item()
23 {
24     if [ -n "$list" ]; then
25         list="$list\n"
26     fi
27         
28     list="$list$1"
29 }
30
31 show_menu() {
32     echo -e -n "${E}3;0H"
33     cnt=0
34     echo -e $list | \
35     while read l; do
36         if [ $cnt == $num ]; then
37             echo -e -n "${E}1m"
38         fi
39         echo -e "$cnt: $l${E}0m"
40         cnt=$((cnt + 1))
41     done
42 }
43
44 get_menu_selection()
45 {
46     cnt=0
47     sel=`echo -e $list | \
48     while read l; do
49     if [ $cnt == $num ]; then
50             echo $l
51             break
52         fi
53         cnt=$((cnt + 1))
54     done`
55 }
56
57 get_partition_type()
58 {
59 #    fstype=`mount -f --guess-fstype /dev/$dev $MOUNTLOC`
60     fstype=`fstype </dev/$dev`
61     fstype=`expr "$fstype" : 'FSTYPE=\([A-Za-z0-9]*\).*'`
62 }
63
64 scan_for_loopimgs()
65 {
66 # Scan a device for loopback images, add to the list if found
67         mount /dev/$dev $MOUNTLOC
68         p=$PWD
69         cd $MOUNTLOC
70         for img in `ls -1 $LOOP_IMG_MASK 2>/dev/null`; do
71             add_menu_item "$dev/$img (loop img on vfat)"
72         done
73         cd $p
74         umount $MOUNTLOC
75 }
76
77 # Scan all available device/partitions
78 while read maj min nblk dev; do
79     if [ -z "$maj" -o "$maj" == "major" ]; then
80         continue;
81     fi
82
83     get_partition_type
84     if [ "$fstype" != "ext2" -a "$fstype" != "ext3" -a "$fstype" != "vfat" -a "$fstype" != "jffs2" ]; then
85 #       continue
86         true
87     fi
88     
89     if [ "$fstype" == "vfat" ]; then
90         scan_for_loopimgs
91         continue
92     fi
93     
94     add_menu_item "$dev ($fstype)"
95 done < /proc/partitions
96
97 add_menu_item "NFS (nfsroot=192.168.2.200:/srv/nfs/oe/image)"
98 add_menu_item "Shell"
99
100 total=`echo -e $list | wc -l`
101 num=0
102
103 # Draw UI
104 stty -echo
105 echo -e -n "${E}2J"
106 echo -e -n "${E}0;0H"
107 echo "Select boot image:"
108
109 # Main loop
110 show_menu
111 while read -n1 i; do
112     case "$i" in
113         "A")
114             num=$((num - 1))
115             if [ $num -lt 0 ]; then
116                 num=$(($total - 1))
117             fi
118         ;;
119         ["B"-"Z"])
120             num=$((num + 1))
121             if [ $num -ge $total ]; then
122                 num=0
123             fi
124         ;;
125         "q")
126             exec sh
127         ;;
128         "")
129             break
130         ;;
131     esac
132     show_menu
133 #    echo "*$esc$i"
134 done
135
136 stty echo
137
138 # Process results of user selection, prepare input arguments
139 # for boot modules
140
141 get_menu_selection
142 echo Selected: $sel
143
144 dev=`expr "$sel" : '\([^ /]*\)'`
145 path=`expr "$sel" : '[^/]*\([^ ]*\).*'`
146 fstype=`expr "$sel" : '[^ ]* *\(.*\)'`
147
148 if [ "$dev" == "Shell" ]; then
149     exec /bin/sh
150 elif [ "$dev" == "NFS" ]; then
151     ROOT_DEVICE="/dev/nfs"
152     CMDLINE="$CMDLINE root=/dev/nfs nfsroot=192.168.2.200:/srv/nfs/oe/image"
153 elif [ -n "$path" ]; then
154     ROOT_DEVICE="/dev/loop"
155     CMDLINE="$CMDLINE root=/dev/loop looproot=/dev/$dev:$path"
156 else
157     ROOT_DEVICE="/dev/$dev"
158     # jffs2 is not recognized by mount automagically
159     if [ "$fstype" == "(jffs2)" ]; then
160         ROOT_FSTYPE="jffs2"
161     fi
162     CMDLINE="$CMDLINE root=$ROOT_DEVICE"
163 fi
164
165 echo ROOT_DEVICE=$ROOT_DEVICE
166 echo CMDLINE=$CMDLINE
167
168 ##############################
169 fi