blob: 3f594c1d48d167a3455c15cb68fa4522e81a82d9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
#!/bin/sh
msg () { [ "${quiet}" != "y" ] && echo $@; }
err () { echo "ERROR: $@"; }
msg ":: Loading Initramfs"
/bin/mount -t sysfs none /sys
/bin/mount -t proc none /proc
read CMDLINE </proc/cmdline
export CMDLINE
# Used so hooks can override params to kinit
export kinit_params=""
export root=""
echo "/bin/modprobe" > /proc/sys/kernel/modprobe
for cmd in $CMDLINE; do
case "$cmd" in
\#*) break ;; # ignore everything after a # in the commandline
[0123456Ss]) export runlevel="$cmd" ;;
single) export runlevel="S" ;; #some people use 'single'
# replace can cause problems for the following entries
# These should only be applied to the lefthand side of the expression
# until we find a fix hardcode the stuff here.
root=*) export "${cmd}";;
md=*) export "${cmd}" ;;
crypto=*) export "${cmd}" ;;
resume2=*) export "${cmd}" ;;
ip=*) export "${cmd}" ;;
nfsaddrs=*) export "${cmd}" ;;
nfsroot=*) export "${cmd}" ;;
# only export stuff that does work with dash :)
*=*) cmd="$(replace "${cmd}" '.' '_')"
cmd="$(replace "${cmd}" '-' '_')"
export "${cmd}"
;;
*) cmd="$(replace "${cmd}" '.' '_')"
cmd="$(replace "${cmd}" '-' '_')"
export "${cmd}=y"
;;
esac
done
if [ "x${disablehooks}" != "x" ]; then
for d in $(replace "${disablehooks}" ','); do
export "hook_${d}=disabled"
done
fi
if [ "x${disablemodules}" != "x" ]; then
for d in $(replace "${disablemodules}" ','); do
export "mod_${d}=disabled"
done
fi
if [ "x${earlymodules}" != "x" ]; then
for m in $(replace "${earlymodules}" ','); do
/bin/modprobe -q $m > /dev/null 2>&1
done
fi
. /config
for m in $MODULES; do
TST=""
eval "TST=\$mod_${m}"
if [ "${TST}" != "disabled" ]; then
/bin/modprobe -q $m > /dev/null 2>&1
fi
done
if [ -e "/hooks" ]; then
for h in $HOOKS; do
TST=""
eval "TST=\$hook_${h}"
if [ "${TST}" != "disabled" ]; then
run_hook () { msg "$h: no run function defined"; }
if [ -e "/hooks/$h" ]; then
. /hooks/$h
msg ":: Running Hook [${h}]"
run_hook
fi
fi
done
fi
if [ "${rootdelay}" != "0" ]; then
msg -n "Waiting for devices to settle..."
/bin/sleep "${rootdelay}"
export rootdelay=0
export kinit_params="$kinit_params rootdelay=0"
msg "done."
fi
if [ "${break}" = "y" ]; then
echo ":: Break requested, type 'exit' to resume operation"
echo " NOTE: klibc contains no 'ls' binary, use 'echo *' instead"
PS1="ramfs$ " /bin/sh -i
fi
if [ ! -e "${root}" ]; then
err "Unable to create/detect root device '${root}'"
echo "Dropping to a recovery shell... type 'exit' to reboot"
echo "NOTE: klibc contains no 'ls' binary, use 'echo *' instead"
echo ""
echo "If the device '${root}' gets created while you are here,"
echo "try adding 'rootdelay=8' or higher to the kernel command-line"
PS1="ramfs$ " /bin/sh -i
msg "Rebooting..."
/bin/reboot
else
msg ":: Initramfs Completed - control passing to kinit"
if [ -f "/message" ]; then
msg "$(cat /message)"
fi
fi
#Special handling if udev is running
udevpid=$(/bin/minips -C udevd -o pid=)
if [ "x${udevpid}" != "x" ]; then
/bin/kill -9 $udevpid
/bin/sleep 0.01
fi
echo "/sbin/modprobe" > /proc/sys/kernel/modprobe
exec /bin/kinit -- "root=${root}" ${kinit_params} "${runlevel}" > /dev/null 2>&1
|