Contents of /trunk/mkinitrd/lib/linuxrc.sh
Parent Directory | 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)
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 |