blob: d941401cf18efd30521a07378946676282c7550f (
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
|
#!/bin/sh
### BEGIN INIT INFO
# Provides: udev
# Required-Start: mountvirtfs
# Required-Stop:
# Default-Start: S
# Default-Stop:
# Short-Description: Start udevd, populate /dev and load drivers.
### END INIT INFO
export TZ=/etc/localtime
[ -d /sys/class ] || exit 1
[ -r /proc/mounts ] || exit 1
[ -x @UDEVD@ ] || exit 1
[ -f /etc/default/udev-cache ] && . /etc/default/udev-cache
[ -f /etc/udev/udev.conf ] && . /etc/udev/udev.conf
[ -f /etc/default/rcS ] && . /etc/default/rcS
readfiles () {
READDATA=""
for filename in $@; do
if [ -r $filename ]; then
while read line; do
READDATA="$READDATA$line"
done < $filename
fi
done
}
kill_udevd () {
pid=`pidof -x udevd`
[ -n "$pid" ] && kill $pid
}
case "$1" in
start)
export ACTION=add
# propagate /dev from /sys
echo "Starting udev"
# Check for requireed devtmpfs before trying to start udev and
# mount a no-existant fs.
if ! grep -q devtmpfs /proc/filesystems
then
echo "Missing devtmpfs, which is required for udev to run";
echo "Halting..."
halt
fi
# mount the devtmpfs on /dev, if not already done
LANG=C awk '$2 == "/dev" && ($3 == "devtmpfs") { exit 1 }' /proc/mounts && {
mount -n -o mode=0755 -t devtmpfs none "/dev"
}
[ -e /dev/pts ] || mkdir -m 0755 /dev/pts
[ -e /dev/shm ] || mkdir -m 1777 /dev/shm
# the automount rule for udev needs /tmp directory available, as /tmp is a symlink
# to /var/tmp which in turn is a symlink to /var/volatile/tmp, we need to make sure
# /var/volatile/tmp directory to be available.
mkdir -m 1777 -p /var/volatile/tmp
# Cache handling.
# A list of files which are used as a criteria to judge whether the udev cache could be reused.
CMP_FILE_LIST="/proc/version /proc/cmdline /proc/devices /proc/atags"
if [ "$DEVCACHE" != "" ]; then
if [ -e $DEVCACHE ]; then
readfiles $CMP_FILE_LIST
NEWDATA="$READDATA"
readfiles /etc/udev/cache.data
OLDDATA="$READDATA"
if [ "$OLDDATA" = "$NEWDATA" ]; then
(cd /; tar xf $DEVCACHE > /dev/null 2>&1)
not_first_boot=1
[ "$VERBOSE" != "no" ] && echo "udev: using cache file $DEVCACHE"
[ -e /dev/shm/udev.cache ] && rm -f /dev/shm/udev.cache
else
# Output detailed reason why the cached /dev is not used
if [ "$VERBOSE" != "no" ]; then
echo "udev: udev cache not used"
echo "udev: we use $CMP_FILE_LIST as criteria to judge whether the cache /dev could be resued"
echo "udev: olddata: $OLDDATA"
echo "udev: newdata: $NEWDATA"
fi
echo "$NEWDATA" > /dev/shm/udev.cache
fi
else
if [ "$ROOTFS_READ_ONLY" != "yes" ]; then
# If rootfs is not read-only, it's possible that a new udev cache would be generated;
# otherwise, we do not bother to read files.
readfiles $CMP_FILE_LIST
echo "$READDATA" > /dev/shm/udev.cache
fi
fi
fi
# make_extra_nodes
kill_udevd > "/dev/null" 2>&1
# trigger the sorted events
echo -e '\000\000\000\000' > /proc/sys/kernel/hotplug
@UDEVD@ -d
udevadm control --env=STARTUP=1
if [ "$not_first_boot" != "" ];then
if [ "$PROBE_PLATFORM_BUS" != "yes" ]; then
PLATFORM_BUS_NOMATCH="--subsystem-nomatch=platform"
else
PLATFORM_BUS_NOMATCH=""
fi
udevadm trigger --action=add --subsystem-nomatch=tty --subsystem-nomatch=mem --subsystem-nomatch=vc --subsystem-nomatch=vtconsole --subsystem-nomatch=misc --subsystem-nomatch=dcon --subsystem-nomatch=pci_bus --subsystem-nomatch=graphics --subsystem-nomatch=backlight --subsystem-nomatch=video4linux $PLATFORM_BUS_NOMATCH
(udevadm settle --timeout=10; udevadm control --env=STARTUP=)&
else
udevadm trigger --action=add
udevadm settle
fi
;;
stop)
echo "Stopping udevd"
start-stop-daemon --stop --name udevd --quiet
;;
restart)
$0 stop
sleep 1
$0 start
;;
status)
pid=`pidof -x udevd`
if [ -n "$pid" ]; then
echo "udevd (pid $pid) is running ..."
else
echo "udevd is stopped"
fi
;;
*)
echo "Usage: $0 {start|stop|status|restart}"
exit 1
esac
exit 0
|