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
131
132
|
#!/bin/sh
trap 'exec /bin/sh' INT EXIT
# We need proc for reading the kernel command line
mount -n -t proc none /proc
set -- $(cat /proc/cmdline)
# We don't want to leave mount points around
umount /proc
rootwait=true # defaults to off in the kernel, I think it's more useful on
for arg; do
case "$arg" in
root=LABEL=*)
if [ x"$root_type" != x ]; then
echo "Warning, multiple root= specified, using latest."
fi
root_type=label
root="${arg#root=LABEL=}"
;;
root=UUID=*)
if [ x"$root_type" != x ]; then
echo "Warning, multiple root= specified, using latest."
fi
root_type=uuid
root="${arg#root=UUID=}"
;;
root=*)
if [ x"$root_type" != x ]; then
echo "Warning, multiple root= specified, using latest."
fi
root_type=disk
root="${arg#root=}"
;;
rootflags=*)
if [ x"$rootflags" != x ]; then
echo "Warning, multiple rootflags= specified, using latest."
fi
rootflags=",${arg#rootflags=}"
;;
rootfstype=*)
if [ x"$rootfstype" != x ]; then
echo "Warning, multiple rootfstype= specified, using latest."
fi
rootfstype="${arg#rootfstype=}"
;;
rootdelay=*)
if [ x"$rootdelay" != x ]; then
echo "Warning, multiple rootdelay= specified, using latest."
fi
rootdelay="${arg#rootdelay=}"
;;
rootwait)
rootwait=true
;;
norootwait)
rootwait=false
;;
ro)
ro=ro
;;
rw)
ro=rw
;;
init=*)
init="${arg#init=}"
;;
esac
done
if [ x"$rootdelay" != x ]; then
sleep "$rootdelay"
fi
if [ x"$rootfstype" = x ]; then
# Warn that busybox may not be able to auto-detect rootfs type
cat <<\EOF
Warning, rootfs type not specified, auto-detection of type is slow and
may fail. Please add rootfstype=$type to kernel command line.
EOF
fi
mount -n -t devtmpfs devtmpfs /dev
while true; do
case "$root_type" in
disk)
if mount -n -t "${rootfstype}" -o "${ro-rw}""$rootflags" "$root" /mnt; then
break
else
echo disk $root not found
blkid
fi
;;
label)
disk="$(findfs LABEL="$root")"
if [ x"$disk" = x ]; then
echo disk with label $root not found
blkid
else
mount -n -t "${rootfstype}" -o "${ro-rw}""$rootflags" "$disk" /mnt && break
fi
;;
uuid)
disk="$(findfs UUID="$root")"
if [ x"$disk" = x ]; then
echo disk with UUID $root not found
blkid
else
mount -n -t "${rootfstype}" -o "${ro-rw}""$rootflags" "$disk" /mnt && break
fi
;;
'')
echo "Error, no root specified"
exit 1
;;
esac
if "$rootwait"; then
echo Trying again in 0.5 seconds
sleep 0.5
fi
done
umount -n /dev
# We dont create any static device nodes while building,
# device nodes will be created by systemd but before that
# we at least need the console
mknod -m 0600 /mnt/dev/console c 5 1
exec switch_root -c /dev/console /mnt "${init-/sbin/init}"
|