blob: e6b2986f89494661f6548d990d22cb55615c684a (
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
|
#!/bin/sh -e
PATH="/usr/sbin:/usr/bin:/sbin:/bin"
UDEVSTART=/sbin/udevstart
# default maximum size of the /dev ramfs
ramfs_size="1M"
[ -x $UDEVSTART ] || exit 0
. /etc/udev/udev.conf
case "$(uname -r)" in
2.[012345].*)
echo "udev requires a kernel >= 2.6, not started."
exit 0
;;
esac
if ! grep -q '[[:space:]]ramfs$' /proc/filesystems; then
echo "udev requires ramfs support, not started."
exit 0
fi
if [ ! -e /proc/sys/kernel/hotplug ]; then
echo "udev requires hotplug support, not started."
exit 0
fi
##############################################################################
# we need to unmount /dev/pts/ and remount it later over the ramfs
unmount_devpts() {
if mountpoint -q /dev/pts/; then
umount -l /dev/pts/
fi
if mountpoint -q /dev/shm/; then
umount -l /dev/shm/
fi
}
# mount a ramfs over /dev, if somebody did not already do it
mount_ramfs() {
if grep -E -q "^[^[:space:]]+ /dev ramfs" /proc/mounts; then
return 0
fi
# /.dev is used by /sbin/MAKEDEV to access the real /dev directory.
# if you don't like this, remove /.dev/.
[ -d /.dev ] && mount --bind /dev /.dev
echo -n "Mounting a ramfs over /dev..."
mount -n -o size=$ramfs_size,mode=0755 -t ramfs none /dev
echo "done."
}
# I hate this hack. -- Md
make_extra_nodes() {
grep '^[^#]' /etc/udev/links.conf | \
while read type name arg1; do
[ "$type" -a "$name" -a ! -e "/dev/$name" -a ! -L "/dev/$name" ] ||continue
case "$type" in
L)
ln -s $arg1 /dev/$name
;;
D)
mkdir -p /dev/$name
;;
M)
mknod --mode=600 /dev/$name $arg1
;;
*)
echo "unparseable line ($type $name $arg1)"
;;
esac
done
}
##############################################################################
if [ "$udev_root" != "/dev/" ]; then
echo "WARNING: udev_root != /dev/"
case "$1" in
start)
if [ -e "$udev_root/.udev.tdb" ]; then
if mountpoint -q /dev/; then
echo "FATAL: udev is already active on $udev_root."
exit 1
else
echo "WARNING: .udev.tdb already exists on the old $udev_root!"
fi
fi
mount -n -o size=$ramfs_size,mode=0755 -t ramfs none $udev_root
echo -n "Creating initial device nodes..."
$UDEVSTART
echo "done."
;;
stop)
start-stop-daemon -K -x /sbin/udevd
echo -n "Unmounting $udev_root..."
# unmounting with -l should never fail
if umount -l $udev_root; then
echo "done."
else
echo "failed."
fi
;;
restart|force-reload)
$0 stop
$0 start
;;
*)
echo "Usage: /etc/init.d/udev {start|stop|restart|force-reload}"
exit 1
;;
esac
exit 0
fi # udev_root != /dev/
##############################################################################
# When modifying this script, do not forget that between the time that
# the new /dev has been mounted and udevstart has been run there will be
# no /dev/null. This also means that you cannot use the "&" shell command.
case "$1" in
start)
if [ -e "$udev_root/.udev.tdb" ]; then
if mountpoint -q /dev/; then
echo "FATAL: udev is already active on $udev_root."
exit 1
else
echo "WARNING: .udev.tdb already exists on the old $udev_root!"
fi
fi
unmount_devpts
mount_ramfs
ACTION=add
echo -n "Creating initial device nodes..."
$UDEVSTART
make_extra_nodes
echo "done."
# /etc/init.d/mountvirtfs start
;;
stop)
start-stop-daemon -K -x /sbin/udevd
unmount_devpts
echo -n "Unmounting /dev..."
# unmounting with -l should never fail
if umount -l /dev; then
echo "done."
umount -l /.dev || true
# /etc/init.d/mountvirtfs start
else
echo "failed."
fi
;;
restart|force-reload)
start-stop-daemon -K -x /sbin/udevd
echo -n "Recreating device nodes..."
ACTION=add
$UDEVSTART
make_extra_nodes
echo "done."
;;
*)
echo "Usage: /etc/init.d/udev {start|stop|restart|force-reload}"
exit 1
;;
esac
exit 0
|