1 |
#!/bin/bash |
#!/bin/bash |
2 |
# $Header: /root/magellan-cvs/src/udev/udev.rc,v 1.2 2010-08-18 00:57:31 niro Exp $ |
# $Id$ |
3 |
|
|
4 |
udev_version() |
udev_version() |
5 |
{ |
{ |
8 |
if [[ -x /sbin/udev ]] |
if [[ -x /sbin/udev ]] |
9 |
then |
then |
10 |
version=$(/sbin/udev -V) |
version=$(/sbin/udev -V) |
|
# We need it without a leading '0', else bash do the wrong thing |
|
|
version=${version##0} |
|
|
# Older udev's will print nothing |
|
|
[[ -z ${version} ]] && version=0 |
|
11 |
elif [[ -x /sbin/udevd ]] |
elif [[ -x /sbin/udevd ]] |
12 |
then |
then |
13 |
version=$(/sbin/udevd --version) |
version=$(/sbin/udevd --version) |
14 |
version=${version##0} |
elif [[ -x /lib/udev/udevd ]] |
15 |
[[ -z ${version} ]] && version=0 |
then |
16 |
|
version=$(/lib/udev/udevd --version) |
17 |
|
elif [[ -x /usr/lib/systemd/systemd-udevd ]] |
18 |
|
then |
19 |
|
version=$(/usr/lib/systemd/systemd-udevd --version) |
20 |
fi |
fi |
21 |
|
|
22 |
|
# We need it without a leading '0', else bash do the wrong thing |
23 |
|
version=${version##0} |
24 |
|
# Older udev's will print nothing |
25 |
|
[[ -z ${version} ]] && version=0 |
26 |
|
|
27 |
echo "${version}" |
echo "${version}" |
28 |
} |
} |
29 |
|
|
31 |
{ |
{ |
32 |
local opts |
local opts |
33 |
|
|
|
# tell modprobe.sh to be verbose to $CONSOLE |
|
|
echo CONSOLE=${CONSOLE} > /dev/.udev_populate |
|
|
|
|
34 |
# populate /dev with devices already found by the kernel |
# populate /dev with devices already found by the kernel |
35 |
rc_print " Populating /dev with existing devices through uevents ..." |
rc_print " Populating /dev with existing devices through uevents ..." |
36 |
if [[ ${RC_COLDPLUG} = yes ]] |
if [[ ${RC_COLDPLUG} = yes ]] |
37 |
then |
then |
38 |
/sbin/udevadm trigger |
udevadm trigger |
39 |
else |
else |
40 |
# do not run any init-scripts |
# do not run any init-scripts |
41 |
/sbin/udevadm control --env do_not_run_plug_service=1 |
udevadm control --property=do_not_run_plug_service=1 |
42 |
|
|
43 |
# only create device nodes |
udevadm trigger --type=subsystems --action=add |
44 |
/sbin/udevadm trigger --attr-match=dev |
udevadm trigger --type=devices --action=add |
|
|
|
|
# run persistent-net stuff |
|
|
/sbin/udevadm trigger --subsystem-match=net |
|
45 |
fi |
fi |
46 |
evaluate_retval |
evaluate_retval |
47 |
|
|
|
# loop until everything is finished |
|
|
rc_print " Letting udev process events ..." |
|
|
/sbin/udevadm settle --timeout=60 |
|
|
evaluate_retval |
|
|
|
|
48 |
# unset this variable |
# unset this variable |
49 |
/sbin/udevadm control --env do_not_run_plug_service= |
udevadm control --property=do_not_run_plug_service= |
50 |
|
|
|
rm -f /dev/.udev_populate |
|
51 |
return 0 |
return 0 |
52 |
} |
} |
53 |
|
|
56 |
# seed /dev with some things that we know we need |
# seed /dev with some things that we know we need |
57 |
rc_print " Seeding /dev with needed nodes ..." |
rc_print " Seeding /dev with needed nodes ..." |
58 |
( |
( |
59 |
[ ! -c /dev/console ] && mknod /dev/console c 5 1 |
[ ! -c /dev/console ] && mknod -m 600 /dev/console c 5 1 |
60 |
[ ! -c /dev/tty1 ] && mknod /dev/tty1 c 4 1 |
[ ! -c /dev/tty1 ] && mknod -m 620 /dev/tty1 c 4 1 |
61 |
[ ! -c /dev/null ] && mknod /dev/null c 1 3 |
[ ! -c /dev/tty ] && mknod -m 666 /dev/tty c 5 0 |
62 |
|
[ ! -c /dev/null ] && mknod -m 666 /dev/null c 1 3 |
63 |
|
|
64 |
# create kmsg too, so udev can add its start-message to dmesg |
# create kmsg too, so udev can add its start-message to dmesg |
65 |
[ -c /dev/kmsg ] || mknod -m 660 /dev/kmsg c 1 11 |
[ -c /dev/kmsg ] || mknod -m 660 /dev/kmsg c 1 11 |
66 |
|
|
|
# copy over any persistant things |
|
|
if [[ -d /lib/udev/devices ]] |
|
|
then |
|
|
cp -RPp /lib/udev/devices/* /dev 2>/dev/null |
|
|
fi |
|
|
|
|
|
# not provided by sysfs but needed |
|
|
ln -snf /proc/self/fd /dev/fd |
|
|
ln -snf fd/0 /dev/stdin |
|
|
ln -snf fd/1 /dev/stdout |
|
|
ln -snf fd/2 /dev/stderr |
|
|
[[ -e /proc/kcore ]] && ln -snf /proc/kcore /dev/core |
|
|
|
|
67 |
# create problematic directories |
# create problematic directories |
68 |
mkdir -p /dev/pts /dev/shm |
mkdir -p /dev/pts /dev/shm |
69 |
) |
) |
73 |
# main function |
# main function |
74 |
start_devicemanager() |
start_devicemanager() |
75 |
{ |
{ |
76 |
|
local udev_prefix="" |
77 |
|
local udev_daemon="" |
78 |
|
|
79 |
|
# get the right daemon and prefix for newer udev/systemd-udev installations |
80 |
|
if [ -x /sbin/udevd ] |
81 |
|
then |
82 |
|
udev_daemon="/sbin/udevd" |
83 |
|
udev_prefix="" |
84 |
|
elif [ -x /lib/udev/udevd ] |
85 |
|
then |
86 |
|
udev_daemon="/lib/udev/udevd" |
87 |
|
udev_prefix="" |
88 |
|
elif [ -x /usr/lib/systemd/systemd-udevd ] |
89 |
|
then |
90 |
|
udev_daemon="/usr/lib/systemd/systemd-udevd" |
91 |
|
udev_prefix="/usr" |
92 |
|
fi |
93 |
|
|
94 |
# check if /dev/console exists outside tmpfs |
# check if /dev/console exists outside tmpfs |
95 |
[ -c /dev/console ] ; need_redirect=$? |
[ -c /dev/console ] ; need_redirect=$? |
96 |
|
|
97 |
# create a ramdisk for populating udev |
# create a ramdisk for populating udev |
98 |
rc_print "Mounting udev at /dev ..." |
if [[ -z $(grep '[[:space:]]/dev[[:space:]]' /proc/self/mountinfo) ]] |
99 |
# many video drivers needed exec access |
then |
100 |
fstype=ramfs |
rc_print "Mounting udev at /dev ..." |
101 |
# tmpfs was suggested by Greg Kroah-Hartman |
# many video drivers needed exec access |
102 |
kernel_supports_fs tmpfs && fstype=tmpfs |
fstype=ramfs |
103 |
# mount devtmpfs if supported |
# tmpfs was suggested by Greg Kroah-Hartman |
104 |
kernel_supports_fs devtmpfs && fstype=devtmpfs |
kernel_supports_fs tmpfs && fstype=tmpfs |
105 |
mount -n -t ${fstype} udev /dev -o exec,nosuid,mode=0755,size=10M |
# mount devtmpfs if supported |
106 |
evaluate_retval |
kernel_supports_fs devtmpfs && fstype=devtmpfs |
107 |
|
mount -n -t ${fstype} dev /dev -o exec,nosuid,mode=0755,size=10M |
108 |
|
evaluate_retval |
109 |
|
fi |
110 |
|
|
111 |
# if a device tarball exists load it and if it is activated |
# if a device tarball exists load it but only if it is activated in the config |
112 |
rc_print "Configurating system to use udev ..." |
rc_print "Configurating system to use udev ..." |
113 |
if [[ ${RC_DEVICE_TARBALL} = yes ]] |
if [[ ${RC_DEVICE_TARBALL} = yes ]] |
114 |
then |
then |
115 |
rc_print " Populating /dev with saved device nodes ..." |
if [[ -f ${udev_prefix}/lib/udev/state/devices.tar.bz2 ]] |
116 |
tar -jxpf /lib/udev/state/devices.tar.bz2 -C /dev |
then |
117 |
evaluate_retval |
rc_print " Populating /dev with saved device nodes ..." |
118 |
|
tar -jxpf ${udev_prefix}/lib/udev/state/devices.tar.bz2 -C /dev |
119 |
|
evaluate_retval |
120 |
|
fi |
121 |
fi |
fi |
122 |
|
|
123 |
# other eeded device nodes with udev |
# other needed device nodes with udev |
124 |
seed_dev |
seed_dev |
125 |
|
|
126 |
if [ -e /proc/sys/kernel/hotplug ] |
if [ -e /proc/sys/kernel/hotplug ] |
143 |
if [ ${need_redirect} -eq 1 ] |
if [ ${need_redirect} -eq 1 ] |
144 |
then |
then |
145 |
# we need to open fds 0 1 2 |
# we need to open fds 0 1 2 |
146 |
start-stop-daemon --start --exec /sbin/udevd -- --daemon </dev/console >/dev/console 2>/dev/console |
start-stop-daemon --start --exec "${udev_daemon}" -- --daemon </dev/console >/dev/console 2>/dev/console |
147 |
else |
else |
148 |
start-stop-daemon --start --exec /sbin/udevd -- --daemon |
start-stop-daemon --start --exec "${udev_daemon}" -- --daemon |
149 |
fi |
fi |
150 |
evaluate_retval |
evaluate_retval |
151 |
|
|
152 |
# write root_link rule |
# write root_link rule |
153 |
/lib/udev/write_root_link_rule |
if [ -x ${udev_prefix}/lib/udev/write_root_link_rule ] |
154 |
|
then |
155 |
|
${udev_prefix}/lib/udev/write_root_link_rule |
156 |
|
fi |
157 |
|
|
158 |
# populate udev device nodes |
# populate udev device nodes |
159 |
populate_udev |
populate_udev |
160 |
|
|
171 |
|
|
172 |
stop_devicemanager() |
stop_devicemanager() |
173 |
{ |
{ |
174 |
|
local udev_daemon="" |
175 |
|
|
176 |
|
# get the right daemon and prefix for newer udev/systemd-udev installations |
177 |
|
if [ -x /sbin/udevd ] |
178 |
|
then |
179 |
|
udev_daemon="/sbin/udevd" |
180 |
|
elif [ -x /lib/udev/udevd ] |
181 |
|
then |
182 |
|
udev_daemon="/lib/udev/udevd" |
183 |
|
elif [ -x /usr/lib/systemd/systemd-udevd ] |
184 |
|
then |
185 |
|
udev_daemon="/usr/lib/systemd/systemd-udevd" |
186 |
|
fi |
187 |
|
|
188 |
rc_print "Stopping udevd daemon ..." |
rc_print "Stopping udevd daemon ..." |
189 |
start-stop-daemon --stop --exec /sbin/udevd |
start-stop-daemon --stop --exec "${udev_daemon}" |
190 |
evaluate_retval |
evaluate_retval |
191 |
} |
} |