Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 353 - (show 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 #!/bin/sh
2 # $Header: /home/cvsd/magellan-cvs/magellan-src/mkinitrd/lib/linuxrc.sh,v 1.5 2006-03-25 11:29:06 niro Exp $
3
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 mkdir /dev/misc
75 mkdir /dev/fb
76 mkdir /dev/vc
77 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 echo "-- Waiting 8 seconds for possible usb mount ..."
150 sleep 8
151 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 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
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 if [ "${DOSCSI}" = "yes" ] || [ "${DOSATA}" = "yes" ]; then
170 check_drives "/dev/sr*" iso9660
171 fi
172
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 mkdir -p initrd proc tmp sys var/tmp dev media
201
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 # ensure the right permissions
209 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