Magellan Linux

Annotation of /trunk/mkinitrd/lib/linuxrc.sh

Parent Directory Parent Directory | Revision Log Revision Log


Revision 353 - (hide annotations) (download) (as text)
Sat Mar 25 11:29:06 2006 UTC (18 years, 1 month ago) by niro
File MIME type: application/x-sh
File size: 4876 byte(s)
- wait for usb devices increased to 8 seconds
- now creating missing /media directory (needed at last for pmount)

1 niro 333 #!/bin/sh
2 niro 353 # $Header: /home/cvsd/magellan-cvs/magellan-src/mkinitrd/lib/linuxrc.sh,v 1.5 2006-03-25 11:29:06 niro Exp $
3 niro 333
4     # loads given kernel modules
5     load_kernel_modules()
6     {
7     local type="$1"
8     local module
9     local args
10    
11     echo -e "-- Loading ${type} modules:"
12     ( cat /etc/modules.${type}; echo) | while read module args
13     do
14     case "${module}" in
15     \#*|"") continue ;;
16     esac
17    
18     if [ -e /lib/${module}.ko ]
19     then
20     insmod -f /lib/${module}.ko ${args} > /dev/null 2>&1
21     [ $? -eq 0 ] && echo -e "-- ${module}"
22     fi
23     done
24     echo
25     }
26    
27     # check_drives $devices $fstype
28     check_drives()
29     {
30     local devices="$1"
31     local fs="$2"
32    
33     for dev in ${devices}
34     do
35     mount -t ${fs} ${dev} /sysroot/mnt/cdrom >/dev/null 2>&1
36     media_found=$?
37    
38     # if mount was ok check if cdid exists
39     if [ "${media_found}" -eq 0 ]
40     then
41     [ -e /sysroot/mnt/cdrom/livecdrootfs.sqsh ] && media_id_ok=$?
42     umount /sysroot/mnt/cdrom
43    
44     if [ "${media_id_ok}" -eq 0 ]
45     then
46     echo -e "Magellan boot device found."
47     BOOT_DEVICE="${dev}"
48     FSTYPE=${fs}
49     break
50     fi
51     fi
52     done
53     }
54    
55     ## some defaults ##
56     DOSCSI=no
57     DOUSB=no
58     DOSATA=no
59    
60     ## starts here ##
61    
62     # mount essential filesystems
63     mount -t proc proc /proc
64     mount -t sysfs sysfs /sys
65    
66     # silencio
67     echo 0 > /proc/sys/kernel/printk
68    
69     echo "-- Creating inital device nodes ..."
70     mount -o mode=0755 -t tmpfs udev /dev
71     mkdir /dev/pts
72     mkdir /dev/shm
73     mkdir /dev/mapper
74 niro 344 mkdir /dev/misc
75     mkdir /dev/fb
76     mkdir /dev/vc
77 niro 333 mknod /dev/console c 5 1
78     mknod /dev/null c 1 3
79     mknod /dev/ram b 1 1
80     mknod /dev/rtc c 10 135
81     mknod /dev/systty c 4 0
82     mknod /dev/tty c 5 0
83     mknod /dev/zero c 1 5
84     mknod /dev/tty0 c 4 0
85     mknod /dev/tty1 c 4 1
86     mknod /dev/tty2 c 4 2
87     mknod /dev/tty3 c 4 3
88     mknod /dev/tty4 c 4 4
89     mknod /dev/tty5 c 4 5
90     mknod /dev/tty6 c 4 6
91     mknod /dev/tty7 c 4 7
92     mknod /dev/tty8 c 4 8
93     mknod /dev/tty9 c 4 9
94     mknod /dev/tty10 c 4 10
95     mknod /dev/tty11 c 4 11
96     mknod /dev/tty12 c 4 12
97     mknod /dev/ttyS0 c 4 64
98     mknod /dev/ttyS1 c 4 65
99     mknod /dev/ttyS2 c 4 66
100     mknod /dev/ttyS3 c 4 67
101    
102     echo "-- Starting udevd ..."
103     /sbin/udevstart
104     ln -snf /proc/self/fd /dev/fd
105     ln -snf fd/0 /dev/stdin
106     ln -snf fd/1 /dev/stdout
107     ln -snf fd/2 /dev/stderr
108     ln -snf /proc/kcore /dev/core
109     touch /dev/.udev
110    
111     echo "-- Setting up hotplug ..."
112     #echo "/sbin/hotplug" > /proc/sys/kernel/hotplug
113     echo "/sbin/udev" > /proc/sys/kernel/hotplug
114    
115     # check command line for params
116     for i in $(cat /proc/cmdline)
117     do
118     case "${i}" in
119     doscsi)
120     DOSCSI=yes
121     ;;
122     dousb)
123     DOUSB=yes
124     ;;
125     dosata)
126     DOSATA=yes
127     ;;
128     esac
129     done
130    
131     # now load all needed modules
132     load_kernel_modules "generic"
133     [ "${DOSCSI}" = "yes" ] && load_kernel_modules "scsi"
134     [ "${DOUSB}" = "yes" ] && load_kernel_modules "usb"
135     [ "${DOSATA}" = "yes" ] && load_kernel_modules "sata"
136    
137     # create newroot mount point
138     mkdir -p /sysroot
139     # fake a new filesystem (also needed with an initramfs!!)
140     mount -t tmpfs tmpfs /sysroot
141    
142     mkdir -p /sysroot/mnt/cdrom
143     mkdir -p /sysroot/mnt/cloop
144     mkdir -p /sysroot/mnt/magellan
145    
146    
147     # needed for the usbstick, the timeout maybe to short
148     if [ "${DOUSB}" = "yes" ]; then
149 niro 353 echo "-- Waiting 8 seconds for possible usb mount ..."
150     sleep 8
151 niro 333 fi
152    
153     # searching cdrom with cdid
154     BOOT_DEVICE=""
155     FSTYPE=""
156    
157     echo "Searching for a boot device ..."
158    
159     # searching usbstick
160 niro 335 if [ "${DOUSB}" = "yes" ]; then
161     check_drives "/dev/scsi/host[0-99]/bus[0-99]/target[0-99]/lun[0-99]/part[0-99]" "vfat"
162     fi
163 niro 333
164     # for cdrom_device in $CDROM_LIST (ide)
165     check_drives "/dev/cdroms/*" iso9660
166     check_drives "/dev/hd*" iso9660
167    
168     # scsi cdroms
169 niro 335 if [ "${DOSCSI}" = "yes" ] || [ "${DOSATA}" = "yes" ]; then
170     check_drives "/dev/sr*" iso9660
171     fi
172 niro 333
173     # mount our rootfs from cdrom
174     if [ "${BOOT_DEVICE}" = "" ]
175     then
176     echo "No Magellan boot CD/USBStick found!!!"
177     ash
178     exit 1
179     else
180     echo -e "Booting from: $BOOT_DEVICE ..."
181     mount -o ro -t "${FSTYPE}" "${BOOT_DEVICE}" /sysroot/mnt/cdrom >/dev/null 2>&1
182    
183     # write our boot_device to /mnt/.bootdev for later use (mtab)
184     echo "BOOTDEV=${BOOT_DEVICE}" > /sysroot/.bootdev
185     echo "FSTYPE=${FSTYPE}" >> /sysroot/.bootdev
186    
187     # mount squashfs
188     echo -e "Mounting squashfs system image ..."
189     echo
190     [ ! -e /dev/loop0 ] && mknod /dev/loop0 b 7 0
191     mount -o loop,ro -t squashfs /sysroot/mnt/cdrom/livecdrootfs.sqsh /sysroot/mnt/cloop
192    
193     # symlinking cloop rootfs to /mnt as newroot
194     cd /sysroot
195    
196     for x in bin sbin lib boot usr opt
197     do
198     ln -s mnt/cloop/${x} ${x}
199     done
200 niro 353 mkdir -p initrd proc tmp sys var/tmp dev media
201 niro 333
202     # make /sysroot/dev/console & /mnt/dev/null
203     [ ! -e /sysroot/dev/console ] && mknod -m 600 /sysroot/dev/console c 5 1
204     [ ! -e /sysroot/dev/null ] && mknod -m 666 /sysroot/dev/null c 1 3
205    
206     (cd /sysroot/mnt/cloop; cp -a etc root home var /sysroot)
207    
208 niro 334 # ensure the right permissions
209 niro 333 chmod 1777 /sysroot/tmp
210     chmod 1777 /sysroot/var/tmp
211     fi
212    
213     cd /
214    
215     # de-silencio
216     echo 3 > /proc/sys/kernel/printk
217    
218     echo "-- Switching to real sysroot ..."
219     umount /sys
220     umount /proc
221    
222     exec run-init /sysroot /sbin/init $@ </sysroot/dev/console >/sysroot/dev/console