Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 335 - (show annotations) (download) (as text)
Thu Feb 23 15:54:30 2006 UTC (18 years, 2 months ago) by niro
File MIME type: application/x-sh
File size: 4844 byte(s)
search for scsi, sata and usb drives only if triggert with do{scsi,sata,usb}

1 #!/bin/sh
2 # $Header: /home/cvsd/magellan-cvs/magellan-src/mkinitrd/lib/linuxrc.sh,v 1.3 2006-02-23 15:54:30 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 mknod /dev/console c 5 1
75 mknod /dev/null c 1 3
76 mknod /dev/ram b 1 1
77 mknod /dev/rtc c 10 135
78 mknod /dev/systty c 4 0
79 mknod /dev/tty c 5 0
80 mknod /dev/zero c 1 5
81 mknod /dev/tty0 c 4 0
82 mknod /dev/tty1 c 4 1
83 mknod /dev/tty2 c 4 2
84 mknod /dev/tty3 c 4 3
85 mknod /dev/tty4 c 4 4
86 mknod /dev/tty5 c 4 5
87 mknod /dev/tty6 c 4 6
88 mknod /dev/tty7 c 4 7
89 mknod /dev/tty8 c 4 8
90 mknod /dev/tty9 c 4 9
91 mknod /dev/tty10 c 4 10
92 mknod /dev/tty11 c 4 11
93 mknod /dev/tty12 c 4 12
94 mknod /dev/ttyS0 c 4 64
95 mknod /dev/ttyS1 c 4 65
96 mknod /dev/ttyS2 c 4 66
97 mknod /dev/ttyS3 c 4 67
98
99 echo "-- Starting udevd ..."
100 ln -snf bin /sbin
101 /sbin/udevstart
102 ln -snf /proc/self/fd /dev/fd
103 ln -snf fd/0 /dev/stdin
104 ln -snf fd/1 /dev/stdout
105 ln -snf fd/2 /dev/stderr
106 ln -snf /proc/kcore /dev/core
107 touch /dev/.udev
108
109 echo "-- Setting up hotplug ..."
110 #echo "/sbin/hotplug" > /proc/sys/kernel/hotplug
111 echo "/sbin/udev" > /proc/sys/kernel/hotplug
112
113 # check command line for params
114 for i in $(cat /proc/cmdline)
115 do
116 case "${i}" in
117 doscsi)
118 DOSCSI=yes
119 ;;
120 dousb)
121 DOUSB=yes
122 ;;
123 dosata)
124 DOSATA=yes
125 ;;
126 esac
127 done
128
129 # now load all needed modules
130 load_kernel_modules "generic"
131 [ "${DOSCSI}" = "yes" ] && load_kernel_modules "scsi"
132 [ "${DOUSB}" = "yes" ] && load_kernel_modules "usb"
133 [ "${DOSATA}" = "yes" ] && load_kernel_modules "sata"
134
135 # create newroot mount point
136 mkdir -p /sysroot
137 # fake a new filesystem (also needed with an initramfs!!)
138 mount -t tmpfs tmpfs /sysroot
139
140 mkdir -p /sysroot/mnt/cdrom
141 mkdir -p /sysroot/mnt/cloop
142 mkdir -p /sysroot/mnt/magellan
143
144
145 # needed for the usbstick, the timeout maybe to short
146 if [ "${DOUSB}" = "yes" ]; then
147 echo "-- Waiting 3 seconds for possible usb mount ..."
148 sleep 3
149 fi
150
151 # searching cdrom with cdid
152 BOOT_DEVICE=""
153 FSTYPE=""
154
155 echo "Searching for a boot device ..."
156
157 # searching usbstick
158 if [ "${DOUSB}" = "yes" ]; then
159 check_drives "/dev/scsi/host[0-99]/bus[0-99]/target[0-99]/lun[0-99]/part[0-99]" "vfat"
160 fi
161
162 # for cdrom_device in $CDROM_LIST (ide)
163 check_drives "/dev/cdroms/*" iso9660
164 check_drives "/dev/hd*" iso9660
165
166 # scsi cdroms
167 if [ "${DOSCSI}" = "yes" ] || [ "${DOSATA}" = "yes" ]; then
168 check_drives "/dev/sr*" iso9660
169 fi
170
171 # mount our rootfs from cdrom
172 if [ "${BOOT_DEVICE}" = "" ]
173 then
174 echo "No Magellan boot CD/USBStick found!!!"
175 ash
176 exit 1
177 else
178 echo -e "Booting from: $BOOT_DEVICE ..."
179 mount -o ro -t "${FSTYPE}" "${BOOT_DEVICE}" /sysroot/mnt/cdrom >/dev/null 2>&1
180
181 # write our boot_device to /mnt/.bootdev for later use (mtab)
182 echo "BOOTDEV=${BOOT_DEVICE}" > /sysroot/.bootdev
183 echo "FSTYPE=${FSTYPE}" >> /sysroot/.bootdev
184
185 # mount squashfs
186 echo -e "Mounting squashfs system image ..."
187 echo
188 [ ! -e /dev/loop0 ] && mknod /dev/loop0 b 7 0
189 mount -o loop,ro -t squashfs /sysroot/mnt/cdrom/livecdrootfs.sqsh /sysroot/mnt/cloop
190
191 # symlinking cloop rootfs to /mnt as newroot
192 cd /sysroot
193
194 for x in bin sbin lib boot usr opt
195 do
196 ln -s mnt/cloop/${x} ${x}
197 done
198 mkdir -p initrd proc tmp sys var/tmp dev
199
200 # make /sysroot/dev/console & /mnt/dev/null
201 [ ! -e /sysroot/dev/console ] && mknod -m 600 /sysroot/dev/console c 5 1
202 [ ! -e /sysroot/dev/null ] && mknod -m 666 /sysroot/dev/null c 1 3
203
204 (cd /sysroot/mnt/cloop; cp -a etc root home var /sysroot)
205
206 # ensure the right permissions
207 chmod 1777 /sysroot/tmp
208 chmod 1777 /sysroot/var/tmp
209 fi
210
211 cd /
212
213 # de-silencio
214 echo 3 > /proc/sys/kernel/printk
215
216 echo "-- Switching to real sysroot ..."
217 umount /sys
218 umount /proc
219
220 exec run-init /sysroot /sbin/init $@ </sysroot/dev/console >/sysroot/dev/console