Annotation of /branches/linuxrc-1_6/mkinitrd/lib/linuxrc.sh
Parent Directory | Revision Log
Revision 353 -
(hide annotations)
(download)
(as text)
Sat Mar 25 11:29:06 2006 UTC (18 years, 6 months ago) by niro
Original Path: trunk/mkinitrd/lib/linuxrc.sh
File MIME type: application/x-sh
File size: 4876 byte(s)
Sat Mar 25 11:29:06 2006 UTC (18 years, 6 months ago) by niro
Original Path: trunk/mkinitrd/lib/linuxrc.sh
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 |