]> git.pld-linux.org Git - projects/geninitrd.git/blame - geninitrd
- fixed raidstart (if raidstart bsp builtin works)
[projects/geninitrd.git] / geninitrd
CommitLineData
bb529f94
JK
1#!/bin/sh
2
3# geninitrd
4#
5# by Jacek Konieczny <jajcus@pld.org.pl>
6#
413878f8 7# based on mkinitrd from RedHat
c31050f3 8
fef73933 9RCSID='$Id: geninitrd,v 2.17 2002/03/07 13:39:05 qboosh Exp $'
bb529f94
JK
10PATH=/sbin:$PATH
11export PATH
12
2b649ae0 13VERSION="`echo "$RCSID"|awk '{print $3}'`"
bb529f94
JK
14
15. /etc/rc.d/init.d/functions
16
17COMPRESS="yes"
2ad94d8a
AF
18# INITRDFS is set later (catch obsoleted FS option)
19#INITRDFS="rom"
2968c9dd 20USERAIDSTART="no"
10c3df06
MM
21# it should be safe to remove scsi_mod from here, but I'm not sure...
22PRESCSIMODS="-scsi_mod unknown -sd_mod"
23PREIDEMODS="-ide-probe -ide-probe-mod -ide-disk"
bb529f94
JK
24target=""
25kernel=""
26force=""
27verbose=""
28MODULES=""
29img_vers=""
30modulefile=/etc/modules.conf
611e9e47 31raidtab=/etc/raidtab
bb529f94
JK
32fstab="/etc/fstab"
33
34usage () {
a2c2980f 35 echo "usage: `basename $0` [--version] [-v] [-f] [--ifneeded] [--preload <module>]" 1>&2
c31050f3 36 echo " [--with=<module>] [--image-version] [--fstab=<fstab>] [--nocompress]" 1>&2
fd2dc249 37 echo " [--initrdfs=rom|ext2|cram] [--modules-conf=<modules.conf>]" 1>&2
a2c2980f
AF
38 echo " <initrd-image> <kernel-version>" 1>&2
39 echo " (ex: `basename $0` /boot/initrd-2.2.5-15.img 2.2.5-15)" 1>&2
7d2fc5eb 40 exit 1
bb529f94
JK
41}
42
aa69da6e 43
10c3df06
MM
44my_dirname() {
45 echo $1|awk -F/ '{print substr($0, 0, length($0) - length($NF));}'
46}
47
48find_depmod () {
49 typeset mods module f level depfile first
50
51 depfile=/lib/modules/$kernel/modules.dep
f6de9380
MM
52
53 if test -f $depfile ; then
54 : ok
55 else
c83257bc
AF
56 echo "Error: no $depfile ! Run depmod and rerun geninitrd." 1>&2
57 exit 1
f6de9380
MM
58 fi
59
10c3df06
MM
60 # prepend / if no path given, append .o if not given,
61 # quote /
62 module=$(echo "$2" | \
63 awk '/\// {print;next} {print "/" $0}' | \
64 awk '/\.o$/ {print;next} {print $0 ".o"}' |
65 awk '{gsub("/","\\/");print}')
66 mods=$(awk '
67BEGIN { here = 0 }
68/'"$module"':(.*)/ { gsub(/:/," "); gsub(/\\/," "); print; here = 1; next }
69/:/ { here = 0 }
70/(.*)/ { gsub(/\\/," "); if (here) print }
71' $depfile | xargs)
72
73 if [ "$mods" = "" ] ; then
74 if [ "$1" != silent ] ; then
75 echo "$module: module not found in $depfile" 1>&2
76 fi
fd2dc249
AF
77 if ! is_no "$EXIT_IF_MISSING" ; then
78 exit 1
79 else
80 echo "If $module isn't compiled in kernel then this initrd may not start your system". 1>&2
81 fi
10c3df06
MM
82 fi
83
84 level=$3
85 if [ "$level" = "" ] ; then
86 level=0
87 fi
88 level=$(awk "BEGIN{print $level + 1}")
89 if [ $level -gt 20 ] ; then
90 echo "$module: cycle in $depfile" 1>&2
91 exit 1
92 fi
93
94 first=
95 for f in $mods ; do
96 if [ "$first" = "" ] ; then
97 first=$f
413878f8 98 else
10c3df06 99 find_depmod $1 $f $level
9c9f7cdb 100 fi
aa69da6e 101 done
10c3df06
MM
102
103 echo $first
aa69da6e 104}
105
10c3df06
MM
106addmodule() {
107 fmPath=$1
108 skiperrors=$2
109
110 if [ ! -f "/lib/modules/$kernel/$fmPath" ]; then
111 if [ -n "$skiperrors" ]; then
112 return
113 fi
114
115 echo "module $fmPath present in modules.dep, but not in filesystem (kernel = $kernel)" 1>&2
116 exit 1
117 fi
118
119 # only need to add each module once
120 # quote /
121 tmpFmPath=$(echo $fmPath | awk '{gsub(/\//,"\\/");print}')
122 if echo "$MODULES" | awk '/'"$tmpFmPath"'/ {exit 1}' ; then
123 MODULES="$MODULES $fmPath"
124 fi
81de8443
AF
125}
126
bb529f94 127findmodule() {
413878f8 128 skiperrors=""
129 modName=$1
10c3df06 130
413878f8 131 if [ "$(echo $modName | awk '{print(substr($0,1,1));}')" = "-" ]; then
132 skiperrors=1
133 modName="$(echo $modName | awk '{print(substr($0,2));}')"
134 fi
bb529f94 135
10c3df06 136 # what's that?
413878f8 137 if [ "$modName" = "pluto" ]; then
138 findmodule fc4
139 findmodule soc
140 fi
141 if [ "$modName" = "fcal" ]; then
142 findmodule fc4
143 findmodule socal
144 fi
bb529f94 145
10c3df06
MM
146 if [ -n "$skiperrors" ]; then
147 allModulesToFind=`find_depmod silent $modName`
148 else
149 allModulesToFind=`find_depmod normal $modName`
150 if [ $? != 0 ] ; then
151 exit 1
413878f8 152 fi
413878f8 153 fi
10c3df06
MM
154
155 for mod in $allModulesToFind ; do
156 mod=$(echo $mod | \
157 awk '{sub(/^\/lib\/modules\/[^\/]*\//,"");print}')
158 addmodule $mod "$skiperrors"
159 done
bb529f94
JK
160}
161
162inst() {
413878f8 163 if [ "$#" != "2" ];then
164 echo "usage: inst <file> <destination>"
165 return
c31050f3 166 fi
413878f8 167 [ -n "$verbose" ] && echo "$1 -> $2"
168 cp "$1" "$2"
bb529f94
JK
169}
170
a2c2980f
AF
171get_label_ext2 () {
172 /sbin/e2label $1 2> /dev/null
173}
174
175get_uuid_ext2 () {
c31050f3 176 /sbin/tune2fs -l $1 2> /dev/null | awk -F: '/UUID:/ {gsub(" ",""); print $2}'
a2c2980f
AF
177}
178
179get_label_xfs () {
3b9c8219 180 /usr/sbin/xfs_db -x -p xfs_admin -c label -r "$1"|awk -F= '{sub("^\"","", $2); sub("\"$", "", $2); print $2}'
c31050f3 181
a2c2980f
AF
182}
183
184get_uuid_xfs () {
3b9c8219 185 /usr/sbin/xfs_db -x -p xfs_admin -c uuid -r "$1"|awk -F= '{print $2}'
a2c2980f
AF
186}
187
c31050f3 188find_root() {
a2c2980f
AF
189 eval `awk '/^[\t ]*#/ {next} {if ( $2 == "/" ) {print "rootdev=\"" $1 "\"\nrootFs=\"" $3 "\""}}' $fstab`
190 case $rootdev in
191 LABEL=*)
192 case $rootFs in
c31050f3 193 ext2)
a2c2980f
AF
194 if [ ! -x /sbin/e2label ] ; then
195 echo "/sbin/e2label is missing" 1>&2
196 exit 1
197 fi
198 get_label="get_label_ext2"
199 ;;
3b9c8219
AF
200 xfs)
201 if [ ! -x /usr/sbin/xfs_db ] ; then
202 echo "/usr/sbin/xfs_db is missing" 1>&2
203 exit 1
204 fi
205 get_label="get_label_xfs"
206 ;;
a2c2980f
AF
207 *)
208 echo "LABEL on $rootFs in not supported by geninitrd" 1>&2
209 exit 1
210 ;;
211 esac
212 if [ ! -r /proc/partitions ] ; then
213 echo '/proc/partitions is not readable'; 1>&2
214 exit 1
215 fi
216 label=${rootdev#"LABEL="}
217 for dev in `awk 'BEGIN {getline;getline} {print "/dev/" $4}' /proc/partitions` ; do
218 if [ -r $dev ] && [ "$label" = "`$get_label $dev`" ] ; then
219 if [ -n "$verbose" ] ; then
220 echo "Using $dev as device for rootfs"
221 fi
c31050f3
TP
222 rootdev=$dev
223 rootdev_found=1
224 break
a2c2980f
AF
225 fi
226 done
227 if [ "$rootdev_found" != 1 ] ; then
c31050f3
TP
228 echo "geninitrd can't find real device for LABEL=$label" 1>&2
229 exit 1
a2c2980f
AF
230 fi
231 ;;
232 UUID=*)
233 case $rootFs in
c31050f3 234 ext2)
a2c2980f
AF
235 if [ ! -x /sbin/tune2fs ] ; then
236 echo "/sbin/tune2fs is missing" 1>&2
237 exit 1
238 fi
239 get_uuid="get_uuid_ext2"
240 ;;
3b9c8219
AF
241 xfs)
242 if [ ! -x /usr/sbin/xfs_db ] ; then
243 echo "/usr/sbin/xfs_db is missing" 1>&2
244 exit 1
245 fi
246 get_label="get_uuid_xfs"
247 ;;
a2c2980f
AF
248 *)
249 echo "UUID on $rootFs in not supported by geninitrd" 1>&2
250 exit 1
251 ;;
252 esac
253 if [ ! -r /proc/partitions ] ; then
254 echo '/proc/partitions is not readable'; 1>&2
255 exit 1
256 fi
257 uuid=${rootdev#"UUID="}
258 for dev in `awk 'BEGIN {getline;getline} {print "/dev/" $4}' /proc/partitions` ; do
259 if [ -r $dev ] && [ "$uuid" = "`$get_uuid $dev`" ] ; then
260 if [ -n "$verbose" ] ; then
261 echo "Using $dev as device for rootfs"
262 fi
c31050f3
TP
263 rootdev=$dev
264 rootdev_found=1
265 break
a2c2980f
AF
266 fi
267 done
268 if [ "$rootdev_found" != 1 ] ; then
c31050f3
TP
269 echo "geninitrd can't find real device for UUID=$uuid" 1>&2
270 exit 1
a2c2980f
AF
271 fi
272 ;;
273 esac
274
275}
bb529f94 276
5dc785c7 277if [ -r /etc/sysconfig/geninitrd ] ; then
278 . /etc/sysconfig/geninitrd
279fi
280
2ad94d8a
AF
281if [ "x" = "x$INITRDFS" ] ; then
282 if [ "x" = "x$FS" ] ; then
283 # default value
284 INITRDFS="rom"
285 else
286 echo "Warning: FS configuration options is obsoleted. Use INITRDFS instead" 1>&2
287 INITRDFS="$FS"
288 fi
289fi
290
fd2dc249
AF
291if [ ! -x /sbin/bsp ] ; then
292 echo "/sbin/bsp is missing !"
293 exit 1
5dc785c7 294fi
295if [ "`uname -m`" = "ia64" ]; then
296 IMAGESIZE=3000
297else
298 IMAGESIZE=1500
299fi
bb529f94 300while [ $# -gt 0 ]; do
413878f8 301 case $1 in
bb529f94 302 --fstab*)
413878f8 303 if is_yes "`echo $1 | awk '/=/ { print "yes"; }'`" ; then
304 fstab="`echo $1 | awk -F= '{print $2;}'`"
305 else
306 fstab="$2"
307 shift
c31050f3 308 fi
413878f8 309 ;;
cd670d83
AF
310 --modules-conf=*)
311 modulefile="`echo $1 | awk -F= '{print $2;}'`"
312 ;;
57188d60 313 --modules-conf)
cd670d83
AF
314 modulefile="$2"
315 shift
316 ;;
611e9e47
AF
317 --raidtab=*)
318 raidtab="`echo $1 | awk -F= '{print $2;}'`"
319 ;;
320 --raidtab)
321 raidtab="$2"
322 shift
323 ;;
bb529f94 324 --with*)
413878f8 325 if is_yes "`echo $1 | awk '/=/ { print "yes"; }'`" ; then
326 modname="`echo $1 | awk -F= '{print $2;}'`"
327 else
328 modname="$2"
329 shift
c31050f3 330 fi
413878f8 331
332 BASICMODULES="$BASICMODULES $modname"
333 ;;
bb529f94 334 --version)
413878f8 335 echo "geninitrd: version $VERSION"
336 exit 0
337 ;;
bb529f94 338 -v)
413878f8 339 verbose=-v
340 ;;
bb529f94 341 --nocompress)
413878f8 342 COMPRESS="no"
343 ;;
bb529f94 344 --ifneeded)
413878f8 345 ifneeded=1
346 ;;
bb529f94 347 -f)
413878f8 348 force=1
349 ;;
ea1dbbbe 350 --preload*)
413878f8 351 if is_yes "`echo $1 | awk '/=/ { print "yes"; }'`" ; then
352 modname="`echo $1 | awk -F= '{print $2;}'`"
353 else
354 modname="$2"
355 shift
c31050f3 356 fi
413878f8 357 PREMODS="$PREMODS $modname"
358 ;;
2ad94d8a
AF
359 --fs=*)
360 echo "Warning: --fs option is obsoleted. Use --initrdfs instead" 1>&2
361 INITRDFS="`echo $1 | awk -F= '{print $2;}'`"
362 ;;
fd2dc249 363 --initrdfs=*)
2ad94d8a
AF
364 INITRDFS="`echo $1 | awk -F= '{print $2;}'`"
365 ;;
366 --fs)
367 echo "Warning: --fs option is obsoleted. Use --initrdfs instead" 1>&2
368 INITRDFS="$2"
369 shift
cd670d83 370 ;;
fd2dc249 371 --initrdfs)
2ad94d8a 372 INITRDFS="$2"
413878f8 373 shift
374 ;;
bb529f94 375 --image-version)
413878f8 376 img_vers=yes
377 ;;
2968c9dd
AF
378 --use-raidstart)
379 USERAIDSTART=yes
380 ;;
bb529f94 381 *)
413878f8 382 if [ -z "$target" ]; then
383 target="$1"
384 elif [ -z "$kernel" ]; then
385 kernel="$1"
386 else
387 usage
388 fi
389 ;;
390 esac
391
392 shift
bb529f94
JK
393done
394
06ac05d6 395if [ -z "$target" -o -z "$kernel" ]; then
413878f8 396 usage
06ac05d6
AF
397fi
398
2ad94d8a 399case "$INITRDFS" in
8b1e4ac7 400 ext2)
f5d71bb2 401 if [ ! -x /sbin/mke2fs ]; then
a2c2980f 402 echo "/sbin/mke2fs is missing" 1>&2
8b1e4ac7
AF
403 exit 1
404 fi
405 ;;
406 rom)
407 if [ ! -x /sbin/genromfs ]; then
a2c2980f 408 echo "/sbin/genromfs is missing" 1>&2
8b1e4ac7
AF
409 exit 1
410 fi
411 ;;
412 cram)
413 if [ ! -x /sbin/mkcramfs ]; then
a2c2980f 414 echo "/sbin/mkcramfs is missing" 1>&2
8b1e4ac7
AF
415 exit 1
416 fi
c31050f3 417 ;;
8b1e4ac7 418 *)
2ad94d8a 419 echo "Filesystem $INITRDFS on initrd is not supported" 1>&2
8b1e4ac7
AF
420 exit 1
421 ;;
422esac
bb529f94 423
bb529f94 424if [ -n "$img_vers" ]; then
413878f8 425 target="$target-$kernel"
bb529f94
JK
426fi
427
35164381 428if [ -z "$force" -a -f "$target" ]; then
a2c2980f 429 echo "$target already exists." 1>&2
413878f8 430 exit 1
bb529f94
JK
431fi
432
35164381 433if [ ! -d "/lib/modules/$kernel" ]; then
a2c2980f 434 echo "/lib/modules/$kernel is not a directory." 1>&2
413878f8 435 exit 1
bb529f94
JK
436fi
437
438for n in $PREMODS; do
35164381 439 findmodule "$n"
bb529f94
JK
440done
441
a2c2980f
AF
442find_root
443
611e9e47
AF
444if is_yes "`echo "$rootdev" | awk '/^\/dev\/md/ { print "yes"; }'`"; then
445 eval `awk -v rootdev=$rootdev 'BEGIN {
c31050f3 446 addide="no";
611e9e47
AF
447 addscsi="no";
448 found="no";
c31050f3
TP
449}
450
451{
452 gsub("\t"," ");
453 gsub(" +", " ");
454 gsub("^ ","");
455 if (/^[\t ]*#/)
456 next;
457 if (/^raiddev/) {
611e9e47
AF
458 if ($2 == rootdev) {
459 found="yes";
460 } else {
461 if (found == "yes") {
462 exit 0;
463 };
c31050f3
TP
464 };
465 };
611e9e47
AF
466 if (found == "yes") {
467 if ($1 == "device") {
2968c9dd 468 if ($2 ~ /\/dev\/(sd|scsi)/) {
611e9e47
AF
469 addscsi="yes";
470 };
2968c9dd 471 if ($2 ~ /\/dev\/(hd|ide)/) {
611e9e47
AF
472 addide="yes";
473 };
474 };
475 if ($1 == "raid-level") {
476 raidlevel=$2;
477 }
478 };
479}
480
481END {
482 print "raidfound=" found "\nADDSCSI=" addscsi "\nADDIDE=" addide "\nraidlevel=" raidlevel "\n";
483}' $raidtab `
c31050f3
TP
484 if is_yes "$raidfound" ; then
485 case "$raidlevel" in
486 [0145])
611e9e47
AF
487 findmodule "raid$raidlevel"
488 ;;
489 linear)
490 findmodule "linear"
491 ;;
c31050f3 492 *)
611e9e47
AF
493 echo "raid level $number (in $raidtab) not recognized" 1>&2
494 ;;
c31050f3
TP
495 esac
496 fi
2968c9dd
AF
497
498else
499 USERAIDSTART="no"
611e9e47
AF
500fi
501
2968c9dd 502if is_yes "$ADDSCSI" || is_yes "$(echo "$rootdev" | awk '/^\/dev\/(sd|scsi)/ { print "yes"; }')" ; then
bb529f94
JK
503
504 for n in $PRESCSIMODS; do
10c3df06 505 if [ "X$n" = "Xunknown" ] ; then
c31050f3
TP
506 if [ ! -f "$modulefile" ]; then
507 modulefile=/etc/conf.modules
508 fi
509 if [ -f "$modulefile" ]; then
35164381 510 scsimodules="`awk '/scsi_hostadapter/ && ! /^[\t ]*#/ { print $3; }' $modulefile| LC_ALL=C sort -u`"
218614aa 511 for n in $scsimodules; do
c31050f3
TP
512 # for now allow scsi modules to come from anywhere. There are some
513 # RAID controllers with drivers in block
514 findmodule "$n"
218614aa 515 done
c31050f3 516 fi
218614aa 517 else
413878f8 518 findmodule "$n"
218614aa 519 fi
bb529f94
JK
520 done
521
bb529f94
JK
522fi
523
2968c9dd 524if is_yes "$ADDIDE" || is_yes "`echo "$rootdev" | awk '/^\/dev\/(hd|ide)/ { print "yes"; }'`" ; then
5dc785c7 525 for n in $PREIDEMODS; do
526 findmodule "$n"
527 done
bb529f94
JK
528fi
529
cd670d83 530if is_yes "`echo "$rootdev" | awk '/\/dev\/rd\// { print "yes"; }'`" ; then
a183cab0 531 findmodule "DAC960"
cd670d83
AF
532fi
533
534if is_yes "`echo "$rootdev" | awk '/\/dev\/ida\// { print "yes"; }'`" ; then
535 findmodule "cpqarray"
536fi
537
538if is_yes "`echo "$rootdev" | awk '/\/dev\/cciss\// { print "yes"; }'`" ; then
539 findmodule "cciss"
540fi
541
bb529f94 542# check to see if we need to set up a loopback filesystem
f97d6d7b 543if is_yes "`echo "$rootdev" | awk -F/ '{print($3);}' | awk '/loop/ { print "yes"; }'`" ; then
fd2dc249
AF
544 echo "Sorry, root on loop device isn't supported." 1>&2
545 exit 1
546 # TODO: rewrite for bsp and make nfs ready
413878f8 547 if [ ! -x /sbin/losetup ]; then
548 echo "losetup is missing"
549 exit 1
550 fi
551 key="^# $(echo $rootdev | awk -F/ '{print($3);}' | tr '[a-z]' '[A-Z]'):"
552 if ! is_yes "`awk '/'$key'/ { print( "yes"); }' $fstab`" ; then
553 echo "The root filesystem is on a $rootdev, but there is no magic entry in $fstab" 1>&2
a2c2980f 554 echo "for this device. Consult the geninitrd man page for more information" 1>&2
413878f8 555 exit 1
556 fi
bb529f94 557
413878f8 558 line="`awk '/'$key'/ { print $0; }' $fstab`"
559 loopDev="$(echo $line | awk '{print $3}')"
560 loopFs="$(echo $line | awk '{print $4}')"
561 loopFile="$(echo $line | awk '{print $5}')"
562
563 BASICMODULES="$BASICMODULES -loop"
564 findmodule "-$loopFs"
565 BASICMODULES="$BASICMODULES -${loopFs}"
fd2dc249 566 # don't have any clue, how is this supposed to work
2b9510ad 567else # Check for other filesystems
7d2fc5eb 568 findmodule "-$rootFs"
bb529f94
JK
569fi
570
c31050f3 571for n in $BASICMODULES; do
7d2fc5eb 572 findmodule "$n"
bb529f94
JK
573done
574
575if [ -n "$ifneeded" -a -z "$MODULES" ]; then
7d2fc5eb 576 if [ -n "$verbose" ]; then
577 echo "No modules are needed -- not building initrd image."
578 fi
579 exit 0
bb529f94
JK
580fi
581
582if [ -n "$verbose" ]; then
7d2fc5eb 583 echo "Using modules: $MODULES"
bb529f94
JK
584fi
585
35164381
SZ
586MNTIMAGE="`mktemp -d /tmp/initrd.XXXXXX`"
587IMAGE="`mktemp -u /tmp/initrd.img-XXXXXX`"
588MNTPOINT="`mktemp -d /tmp/initrd.mnt-XXXXXX`"
589RCFILE="$MNTIMAGE/linuxrc"
bb529f94 590
35164381 591if [ -f "$MNTIMAGE" ]; then
c31050f3 592 echo "$MNTIMAGE already exists. Remove it and try again" 1>&2
7d2fc5eb 593 exit 1
bb529f94
JK
594fi
595
35164381 596if [ -f "$IMAGE" ]; then
a2c2980f 597 echo "$IMAGE already exists. Remove it and try again" 1>&2
7d2fc5eb 598 exit 1
bb529f94
JK
599fi
600
2ad94d8a 601if [ "$INITRDFS" = "ext2" ] ; then
35164381 602 dd if=/dev/zero of="$IMAGE" bs=1k count="$IMAGESIZE" 2> /dev/null
bb529f94 603
bb529f94
JK
604 # We have to "echo y |" so that it doesn't complain about $IMAGE not
605 # being a block device
35164381 606 echo y | mke2fs -F "$IMAGE" "$IMAGESIZE" >/dev/null 2>/dev/null
bb529f94 607
35164381
SZ
608 mkdir -p "$MNTPOINT"
609 mount -o loop -t ext2 "$IMAGE" "$MNTPOINT"
bb529f94 610else
35164381 611 mkdir -p "$MNTPOINT"
bb529f94
JK
612fi
613
8b1e4ac7 614
35164381 615mkdir -p "$MNTIMAGE"/{lib,bin,etc,dev,loopfs}
8b1e4ac7 616
bb529f94
JK
617
618# We don't need this directory, so let's save space
35164381 619rm -rf "$MNTPOINT"/lost+found
bb529f94 620
bb529f94 621for MODULE in $MODULES; do
81de8443
AF
622 MODULEDIR="`my_dirname "$MODULE"`"
623 mkdir -p "$MNTIMAGE/lib/modules/$kernel/$MODULEDIR"
624 cp $verbose -a "/lib/modules/$kernel/$MODULE" "$MNTIMAGE/lib/modules/$kernel/$MODULE"
bb529f94
JK
625done
626
627# mknod'ing the devices instead of copying them works both with and
628# without devfs...
35164381 629mknod "$MNTIMAGE/dev/console" c 5 1
bb529f94 630
fd2dc249
AF
631s="$MNTIMAGE/etc/startup"
632inst /sbin/bsp "$RCFILE"
633echo "# autogenerated startup" > "$s"
634echo "" >> "$s"
c31050f3 635
fd2dc249
AF
636for MODULE in $MODULES; do
637 module="`echo $MODULE | awk -F/ '{ $0=$NF } /.o$/ { $0=substr($0,1,length($0)-2); } { print $0; }'`"
638 options="`awk '{ if($1 == "options" && $2 == "'${module}'") { for(i=3;i<=NF;i++) printf("%s ",$i); }}' "$modulefile"`"
c31050f3 639
fd2dc249
AF
640 if [ -n "$verbose" ]; then
641 /bin/echo -n "Loading module $module "
642 if [ -n "$options" ] ; then
643 echo "with options $options."
ea10b6a5 644 else
fd2dc249 645 echo "without options."
7d2fc5eb 646 fi
7d2fc5eb 647 fi
fd2dc249
AF
648 echo "insmod /lib/modules/$kernel/$MODULE $options" >> "$s"
649done
650
651# TODO: rewrite for bsp
652#if [ -n "$loopDev" ]; then
653# if [ ! -d /initrd ]; then
654# mkdir /initrd
655# fi
656#
657# cp -a "$loopDev" "$MNTIMAGE/dev"
658# cp -a "$rootdev" "$MNTIMAGE/dev"
659# echo "echo Mounting device containing loopback root filesystem" >> "$RCFILE"
660# echo "mount -t $loopFs $loopDev /loopfs" >> "$RCFILE"
661# echo "echo Setting up loopback device $rootdev" >> $RCFILE
662# echo "losetup $rootdev /loopfs$loopFile" >> "$RCFILE"
663#fi
bb529f94 664
c31050f3 665if is_yes "$USERAIDSTART" ; then
fef73933
JB
666 [ -n "$verbose" ] && echo "Add raidstart to initrd"
667 inst "$raidtab" "$MNTIMAGE/etc/raidtab"
668
669 echo "raidstart $rootdev" >> "$s"
670
671# if [ -x /sbin/raidstart.static ] ; then
672# inst /sbin/raidstart.static "$MNTIMAGE/bin/raidstart"
673# echo "/bin/raidstart $rootdev" >> "$s"
674# else
675# echo "/sbin/raidstart.static is missing" 1>&2
676# exit 1
677# fi
2968c9dd
AF
678fi
679
35164381 680chmod +x "$RCFILE"
bb529f94 681
35164381 682(cd "$MNTIMAGE"; tar cf - .) | (cd "$MNTPOINT"; tar xf -)
bb529f94 683
2ad94d8a 684case "$INITRDFS" in
8b1e4ac7 685 ext2)
35164381 686 umount "$IMAGE"
8b1e4ac7
AF
687 ;;
688 rom)
689 genromfs -f "$IMAGE" -d "$MNTPOINT" -V "PLD initrd for kernel $kernel"
690 ;;
691 cram)
692 mkcramfs "$MNTPOINT" "$IMAGE"
8b1e4ac7
AF
693 ;;
694 *)
2ad94d8a 695 echo "Filesystem $INITRDFS not supported by $0";
c31050f3 696esac
bb529f94
JK
697
698if is_yes "$COMPRESS" ; then
7d2fc5eb 699 gzip -9 < "$IMAGE" > "$target"
bb529f94 700else
7d2fc5eb 701 cp -a "$IMAGE" "$target"
bb529f94 702fi
35164381 703rm -rf "$MNTIMAGE" "$MNTPOINT" "$IMAGE"
This page took 0.146723 seconds and 4 git commands to generate.