summaryrefslogtreecommitdiffstats
path: root/meta/recipes-core/udev
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-core/udev')
-rw-r--r--meta/recipes-core/udev/eudev/0014-Revert-rules-remove-firmware-loading-rules.patch28
-rw-r--r--meta/recipes-core/udev/eudev/Revert-udev-remove-userspace-firmware-loading-suppor.patch364
-rw-r--r--meta/recipes-core/udev/eudev/devfs-udev.rules108
-rw-r--r--meta/recipes-core/udev/eudev/init37
-rw-r--r--meta/recipes-core/udev/eudev/links.conf21
-rw-r--r--meta/recipes-core/udev/eudev/netifnames.patch17
-rw-r--r--meta/recipes-core/udev/eudev/permissions.rules131
-rw-r--r--meta/recipes-core/udev/eudev/run.rules14
-rw-r--r--meta/recipes-core/udev/eudev/udev.rules116
-rw-r--r--meta/recipes-core/udev/eudev_3.2.10.bb97
-rw-r--r--meta/recipes-core/udev/eudev_3.2.14.bb90
-rw-r--r--meta/recipes-core/udev/udev-extraconf/mount.ignorelist (renamed from meta/recipes-core/udev/udev-extraconf/mount.blacklist)0
-rw-r--r--meta/recipes-core/udev/udev-extraconf/mount.sh107
-rw-r--r--meta/recipes-core/udev/udev-extraconf_1.1.bb46
14 files changed, 258 insertions, 918 deletions
diff --git a/meta/recipes-core/udev/eudev/0014-Revert-rules-remove-firmware-loading-rules.patch b/meta/recipes-core/udev/eudev/0014-Revert-rules-remove-firmware-loading-rules.patch
deleted file mode 100644
index fe2ba5328d..0000000000
--- a/meta/recipes-core/udev/eudev/0014-Revert-rules-remove-firmware-loading-rules.patch
+++ /dev/null
@@ -1,28 +0,0 @@
1From 4f0a722489154da99e7f6b3051afde984eed2f74 Mon Sep 17 00:00:00 2001
2From: Jonathan Liu <net147@gmail.com>
3Date: Thu, 19 Mar 2015 15:01:29 +1100
4Subject: [PATCH] Revert "rules: remove firmware loading rules"
5
6This reverts commit 70e7d754ddb356fb1a2942b262f8cee9650e2a19.
7Userspace firmware loading support is needed for Linux < 3.7.
8
9Upstream-Status: Inappropriate [OE specific]
10
11Signed-off-by: Jonathan Liu <net147@gmail.com>
12---
13 rules/50-firmware.rules | 3 +++
14 1 file changed, 3 insertions(+)
15 create mode 100644 rules/50-firmware.rules
16
17diff --git a/rules/50-firmware.rules b/rules/50-firmware.rules
18new file mode 100644
19index 0000000..f0ae684
20--- /dev/null
21+++ b/rules/50-firmware.rules
22@@ -0,0 +1,3 @@
23+# do not edit this file, it will be overwritten on update
24+
25+SUBSYSTEM=="firmware", ACTION=="add", RUN{builtin}="firmware"
26--
272.3.3
28
diff --git a/meta/recipes-core/udev/eudev/Revert-udev-remove-userspace-firmware-loading-suppor.patch b/meta/recipes-core/udev/eudev/Revert-udev-remove-userspace-firmware-loading-suppor.patch
deleted file mode 100644
index db333e9376..0000000000
--- a/meta/recipes-core/udev/eudev/Revert-udev-remove-userspace-firmware-loading-suppor.patch
+++ /dev/null
@@ -1,364 +0,0 @@
1From e415372cc7a2f52e70e1cfa8c6c1f633b411355d Mon Sep 17 00:00:00 2001
2From: Lauren Post <lauren.post@nxp.com>
3Date: Wed, 8 Jun 2016 06:51:56 -0500
4Subject: [PATCH] Revert "udev: remove userspace firmware loading support"
5
6This reverts commit 3b717594600fa717cdf9bcfd0c7c1b703b245482.
7
8Conflicts:
9 configure.ac
10 src/udev/udevd.c
11
12Upstream-Status: Inappropriate [OE specific]
13
14Signed-off-by: Lauren Post <lauren.post@nxp.com>
15---
16 configure.ac | 39 +++++++++-
17 rules/Makefile.am | 5 ++
18 src/udev/Makefile.am | 10 +++
19 src/udev/udev-builtin-firmware.c | 154 +++++++++++++++++++++++++++++++++++++++
20 src/udev/udev-builtin.c | 3 +
21 src/udev/udev.h | 6 ++
22 src/udev/udevd.c | 13 ++++
23 7 files changed, 227 insertions(+), 3 deletions(-)
24 create mode 100644 src/udev/udev-builtin-firmware.c
25
26diff --git a/configure.ac b/configure.ac
27index 8691891..65028c2 100644
28--- a/configure.ac
29+++ b/configure.ac
30@@ -238,9 +238,42 @@ AC_CHECK_DECL([unshare],
31 [#include <sched.h>])
32
33 # ------------------------------------------------------------------------------
34-AC_PATH_TOOL(GPERF, gperf)
35-if test -z "$GPERF" ; then
36- AC_MSG_ERROR([*** gperf not found])
37+AC_ARG_WITH(firmware-path,
38+ AS_HELP_STRING([--with-firmware-path=DIR[[[:DIR[...]]]]],
39+ [Firmware search path (default=ROOTPREFIX/lib/firmware/updates:ROOTPREFIX/lib/firmware)]),
40+ [], [with_firmware_path="$rootprefix/lib/firmware/updates:$rootprefix/lib/firmware"])
41+OLD_IFS=$IFS
42+IFS=:
43+for i in $with_firmware_path; do
44+ if test "x${FIRMWARE_PATH}" = "x"; then
45+ FIRMWARE_PATH="\\\"${i}/\\\""
46+ else
47+ FIRMWARE_PATH="${FIRMWARE_PATH}, \\\"${i}/\\\""
48+ fi
49+done
50+IFS=$OLD_IFS
51+AC_SUBST(FIRMWARE_PATH)
52+AS_IF([test "x${FIRMWARE_PATH}" != "x"], [ AC_DEFINE(HAVE_FIRMWARE, 1, [Define if FIRMWARE is available]) ])
53+AM_CONDITIONAL(ENABLE_FIRMWARE, [test "x${FIRMWARE_PATH}" != "x"])
54+
55+# ------------------------------------------------------------------------------
56+AC_ARG_ENABLE([gudev],
57+ AS_HELP_STRING([--disable-gudev], [disable Gobject libudev support @<:@default=enabled@:>@]),
58+ [], [enable_gudev=yes])
59+AS_IF([test "x$enable_gudev" = "xyes"], [ PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.22.0 gobject-2.0 >= 2.22.0]) ])
60+AM_CONDITIONAL([ENABLE_GUDEV], [test "x$enable_gudev" = "xyes"])
61+
62+# ------------------------------------------------------------------------------
63+AC_ARG_ENABLE([keymap],
64+ AS_HELP_STRING([--disable-keymap], [disable keymap fixup support @<:@default=enabled@:>@]),
65+ [], [enable_keymap=yes])
66+
67+if test "x$enable_keymap" = "xyes"; then
68+ AC_PATH_TOOL(GPERF, gperf)
69+ if test -z "$GPERF" ; then
70+ AC_MSG_ERROR([*** gperf not found])
71+ fi
72+ AC_DEFINE([ENABLE_KEYMAP], [1], [Define if we are enabling rule generator])
73 fi
74
75 # ------------------------------------------------------------------------------
76diff --git a/rules/Makefile.am b/rules/Makefile.am
77index 24c099c..d714ae3 100644
78--- a/rules/Makefile.am
79+++ b/rules/Makefile.am
80@@ -22,6 +22,11 @@ dist_udevrules_DATA += \
81 80-net-name-slot.rules
82 endif
83
84+if ENABLE_FIRMWARE
85+dist_udevrules_DATA += \
86+ 50-firmware.rules
87+endif
88+
89 if HAVE_BLKID
90 dist_udevrules_DATA += \
91 60-persistent-storage.rules
92diff --git a/src/udev/Makefile.am b/src/udev/Makefile.am
93index 401af01..742fbc8 100644
94--- a/src/udev/Makefile.am
95+++ b/src/udev/Makefile.am
96@@ -53,12 +53,18 @@ libudev_core_la_SOURCES = \
97 udev-ctrl.c \
98 udev-builtin.c \
99 udev-builtin-btrfs.c \
100+ udev-builtin-firmware.c \
101 udev-builtin-hwdb.c \
102 udev-builtin-input_id.c \
103 udev-builtin-net_id.c \
104 udev-builtin-path_id.c \
105 udev-builtin-usb_id.c
106
107+if ENABLE_FIRMWARE
108+libudev_core_la_SOURCES += \
109+ udev-builtin-firmware.c
110+endif
111+
112 include_HEADERS = \
113 udev.h
114
115@@ -86,6 +92,10 @@ libudev_core_la_LIBADD += \
116 $(KMOD_LIBS)
117 endif
118
119+libudev_core_la_CPPFLAGS = \
120+ $(AM_CPPFLAGS) \
121+ -DFIRMWARE_PATH="$(FIRMWARE_PATH)"
122+
123 #
124 # Extras
125 #
126diff --git a/src/udev/udev-builtin-firmware.c b/src/udev/udev-builtin-firmware.c
127new file mode 100644
128index 0000000..bd8c2fb
129--- /dev/null
130+++ b/src/udev/udev-builtin-firmware.c
131@@ -0,0 +1,154 @@
132+/*
133+ * firmware - Kernel firmware loader
134+ *
135+ * Copyright (C) 2009 Piter Punk <piterpunk@slackware.com>
136+ * Copyright (C) 2009-2011 Kay Sievers <kay@vrfy.org>
137+ *
138+ * This program is free software; you can redistribute it and/or
139+ * modify it under the terms of the GNU General Public License as
140+ * published by the Free Software Foundation; either version 2 of the
141+ * License, or (at your option) any later version.
142+ *
143+ * This program is distributed in the hope that it will be useful, but
144+ * WITHOUT ANY WARRANTY; without even the implied warranty of
145+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
146+ * General Public License for more details:*
147+ */
148+
149+#include <unistd.h>
150+#include <stdlib.h>
151+#include <string.h>
152+#include <stdio.h>
153+#include <getopt.h>
154+#include <errno.h>
155+#include <stdbool.h>
156+#include <sys/utsname.h>
157+#include <sys/stat.h>
158+
159+#include "udev.h"
160+
161+static bool set_loading(struct udev *udev, char *loadpath, const char *state) {
162+ FILE *ldfile;
163+
164+ ldfile = fopen(loadpath, "we");
165+ if (ldfile == NULL) {
166+ log_error("error: can not open '%s'", loadpath);
167+ return false;
168+ };
169+ fprintf(ldfile, "%s\n", state);
170+ fclose(ldfile);
171+ return true;
172+}
173+
174+static bool copy_firmware(struct udev *udev, const char *source, const char *target, size_t size) {
175+ char *buf;
176+ FILE *fsource = NULL, *ftarget = NULL;
177+ bool ret = false;
178+
179+ buf = malloc(size);
180+ if (buf == NULL) {
181+ log_error("No memory available to load firmware file");
182+ return false;
183+ }
184+
185+ log_debug("writing '%s' (%zi) to '%s'", source, size, target);
186+
187+ fsource = fopen(source, "re");
188+ if (fsource == NULL)
189+ goto exit;
190+ ftarget = fopen(target, "we");
191+ if (ftarget == NULL)
192+ goto exit;
193+ if (fread(buf, size, 1, fsource) != 1)
194+ goto exit;
195+ if (fwrite(buf, size, 1, ftarget) == 1)
196+ ret = true;
197+exit:
198+ if (ftarget != NULL)
199+ fclose(ftarget);
200+ if (fsource != NULL)
201+ fclose(fsource);
202+ free(buf);
203+ return ret;
204+}
205+
206+static int builtin_firmware(struct udev_device *dev, int argc, char *argv[], bool test) {
207+ struct udev *udev = udev_device_get_udev(dev);
208+ static const char *searchpath[] = { FIRMWARE_PATH };
209+ char loadpath[UTIL_PATH_SIZE];
210+ char datapath[UTIL_PATH_SIZE];
211+ char fwpath[UTIL_PATH_SIZE];
212+ const char *firmware;
213+ FILE *fwfile = NULL;
214+ struct utsname kernel;
215+ struct stat statbuf;
216+ unsigned int i;
217+ int rc = EXIT_SUCCESS;
218+
219+ firmware = udev_device_get_property_value(dev, "FIRMWARE");
220+ if (firmware == NULL) {
221+ log_error("firmware parameter missing");
222+ rc = EXIT_FAILURE;
223+ goto exit;
224+ }
225+
226+ /* lookup firmware file */
227+ uname(&kernel);
228+ for (i = 0; i < ELEMENTSOF(searchpath); i++) {
229+ strscpyl(fwpath, sizeof(fwpath), searchpath[i], kernel.release, "/", firmware, NULL);
230+ fwfile = fopen(fwpath, "re");
231+ if (fwfile != NULL)
232+ break;
233+
234+ strscpyl(fwpath, sizeof(fwpath), searchpath[i], firmware, NULL);
235+ fwfile = fopen(fwpath, "re");
236+ if (fwfile != NULL)
237+ break;
238+ }
239+
240+ strscpyl(loadpath, sizeof(loadpath), udev_device_get_syspath(dev), "/loading", NULL);
241+
242+ if (fwfile == NULL) {
243+ log_debug("did not find firmware file '%s'", firmware);
244+ rc = EXIT_FAILURE;
245+ /*
246+ * Do not cancel the request in the initrd, the real root might have
247+ * the firmware file and the 'coldplug' run in the real root will find
248+ * this pending request and fulfill or cancel it.
249+ * */
250+ if (!in_initrd())
251+ set_loading(udev, loadpath, "-1");
252+ goto exit;
253+ }
254+
255+ if (stat(fwpath, &statbuf) < 0 || statbuf.st_size == 0) {
256+ if (!in_initrd())
257+ set_loading(udev, loadpath, "-1");
258+ rc = EXIT_FAILURE;
259+ goto exit;
260+ }
261+
262+ if (!set_loading(udev, loadpath, "1"))
263+ goto exit;
264+
265+ strscpyl(datapath, sizeof(datapath), udev_device_get_syspath(dev), "/data", NULL);
266+ if (!copy_firmware(udev, fwpath, datapath, statbuf.st_size)) {
267+ log_error("error sending firmware '%s' to device", firmware);
268+ set_loading(udev, loadpath, "-1");
269+ rc = EXIT_FAILURE;
270+ goto exit;
271+ };
272+
273+ set_loading(udev, loadpath, "0");
274+exit:
275+ if (fwfile)
276+ fclose(fwfile);
277+ return rc;
278+}
279+
280+const struct udev_builtin udev_builtin_firmware = {
281+ .name = "firmware",
282+ .cmd = builtin_firmware,
283+ .help = "kernel firmware loader",
284+ .run_once = true,
285+};
286diff --git a/src/udev/udev-builtin.c b/src/udev/udev-builtin.c
287index 74b3bdc..3657106 100644
288--- a/src/udev/udev-builtin.c
289+++ b/src/udev/udev-builtin.c
290@@ -34,6 +34,9 @@ static const struct udev_builtin *builtins[] = {
291 [UDEV_BUILTIN_BLKID] = &udev_builtin_blkid,
292 #endif
293 [UDEV_BUILTIN_BTRFS] = &udev_builtin_btrfs,
294+#ifdef HAVE_FIRMWARE
295+ [UDEV_BUILTIN_FIRMWARE] = &udev_builtin_firmware,
296+#endif
297 [UDEV_BUILTIN_HWDB] = &udev_builtin_hwdb,
298 [UDEV_BUILTIN_INPUT_ID] = &udev_builtin_input_id,
299 [UDEV_BUILTIN_KEYBOARD] = &udev_builtin_keyboard,
300diff --git a/src/udev/udev.h b/src/udev/udev.h
301index 198cb2c..01a1e9c 100644
302--- a/src/udev/udev.h
303+++ b/src/udev/udev.h
304@@ -149,6 +149,9 @@ enum udev_builtin_cmd {
305 UDEV_BUILTIN_BLKID,
306 #endif
307 UDEV_BUILTIN_BTRFS,
308+#ifdef HAVE_FIRMWARE
309+ UDEV_BUILTIN_FIRMWARE,
310+#endif
311 UDEV_BUILTIN_HWDB,
312 UDEV_BUILTIN_INPUT_ID,
313 UDEV_BUILTIN_KEYBOARD,
314@@ -173,6 +176,9 @@ struct udev_builtin {
315 extern const struct udev_builtin udev_builtin_blkid;
316 #endif
317 extern const struct udev_builtin udev_builtin_btrfs;
318+#ifdef HAVE_FIRMWARE
319+extern const struct udev_builtin udev_builtin_firmware;
320+#endif
321 extern const struct udev_builtin udev_builtin_hwdb;
322 extern const struct udev_builtin udev_builtin_input_id;
323 extern const struct udev_builtin udev_builtin_keyboard;
324diff --git a/src/udev/udevd.c b/src/udev/udevd.c
325index b1de97a..35655d8 100644
326--- a/src/udev/udevd.c
327+++ b/src/udev/udevd.c
328@@ -101,6 +101,9 @@ struct event {
329 bool is_block;
330 usec_t start_usec;
331 bool warned;
332+#ifdef HAVE_FIRMWARE
333+ bool nodelay;
334+#endif
335 };
336
337 static inline struct event *node_to_event(struct udev_list_node *node) {
338@@ -491,6 +494,10 @@ static int event_queue_insert(struct udev_device *dev) {
339 event->devnum = udev_device_get_devnum(dev);
340 event->is_block = streq("block", udev_device_get_subsystem(dev));
341 event->ifindex = udev_device_get_ifindex(dev);
342+#ifdef HAVE_FIRMWARE
343+ if (streq(udev_device_get_subsystem(dev), "firmware"))
344+ event->nodelay = true;
345+#endif
346
347 log_debug("seq %llu queued, '%s' '%s'", udev_device_get_seqnum(dev),
348 udev_device_get_action(dev), udev_device_get_subsystem(dev));
349@@ -566,6 +573,12 @@ static bool is_devpath_busy(struct event *event) {
350 return true;
351 }
352
353+#ifdef HAVE_FIRMWARE
354+ /* allow to bypass the dependency tracking */
355+ if (event->nodelay)
356+ continue;
357+#endif
358+
359 /* parent device event found */
360 if (event->devpath[common] == '/') {
361 event->delaying_seqnum = loop_event->seqnum;
362--
3631.9.1
364
diff --git a/meta/recipes-core/udev/eudev/devfs-udev.rules b/meta/recipes-core/udev/eudev/devfs-udev.rules
deleted file mode 100644
index 0ba1ad4e7f..0000000000
--- a/meta/recipes-core/udev/eudev/devfs-udev.rules
+++ /dev/null
@@ -1,108 +0,0 @@
1# The use of these rules is not recommended or supported.
2# In a world where devices can come and go at any time, the devfs scheme
3# of simple device enumeration does not help _anything_. Just forget about
4# it. Use custom rules to name your device or look at the persistent device
5# naming scheme, which is implemented for disks and add your subsystem.
6
7# ide block devices
8BUS="ide", KERNEL="hd*", PROGRAM="/etc/udev/ide-devfs.sh %k %b %n", NAME="%k", SYMLINK="%c{1} %c{2}"
9
10# md block devices
11KERNEL="md[0-9]*", NAME="md/%n"
12
13# floppy devices
14KERNEL="fd[0-9]*", NAME="floppy/%n"
15
16# tty devices
17KERNEL="tty[0-9]*", NAME="vc/%n", SYMLINK="%k"
18KERNEL="ttyS[0-9]*", NAME="tts/%n", SYMLINK="%k"
19KERNEL="ttyUSB[0-9]*", NAME="tts/USB%n"
20
21# vc devices
22KERNEL="vcs", NAME="vcc/0"
23KERNEL="vcs[0-9]*", NAME="vcc/%n"
24KERNEL="vcsa", NAME="vcc/a0"
25KERNEL="vcsa[0-9]*", NAME="vcc/a%n"
26
27# v4l devices
28KERNEL="video[0-9]*", NAME="v4l/video%n"
29KERNEL="radio[0-9]*", NAME="v4l/radio%n"
30KERNEL="vbi[0-9]*", NAME="v4l/vbi%n"
31KERNEL="vtx[0-9]*", NAME="v4l/vtx%n"
32
33# dm devices (ignore them)
34KERNEL="dm-[0-9]*", NAME=""
35
36# i2c devices
37KERNEL="i2c-[0-9]*", NAME="i2c/%n", SYMLINK="%k"
38
39# loop devices
40KERNEL="loop[0-9]*", NAME="loop/%n", SYMLINK="%k"
41
42# ramdisks
43KERNEL="ram[0-9]*", NAME="rd/%n", SYMLINK="%k"
44
45# framebuffer devices
46KERNEL="fb[0-9]*", NAME="fb/%n", SYMLINK="%k"
47
48# misc
49KERNEL="rtc", NAME="misc/%k", SYMLINK="%k"
50KERNEL="psaux", NAME="misc/%k", SYMLINK="%k"
51KERNEL="agpgart", NAME="misc/%k", SYMLINK="%k"
52KERNEL="rtc", NAME="misc/%k", SYMLINK="%k"
53KERNEL="psaux", NAME="misc/%k", SYMLINK="%k"
54KERNEL="uinput", NAME="misc/%k", SYMLINK="%k"
55
56# alsa devices
57KERNEL="controlC[0-9]*", NAME="snd/%k"
58KERNEL="hw[CD0-9]*", NAME="snd/%k"
59KERNEL="pcm[CD0-9cp]*", NAME="snd/%k"
60KERNEL="midi[CD0-9]*", NAME="snd/%k"
61KERNEL="timer", NAME="snd/%k"
62KERNEL="seq", NAME="snd/%k"
63
64# oss devices
65KERNEL="audio*", NAME="sound/%k", SYMLINK="%k"
66KERNEL="dmmidi", NAME="sound/%k", SYMLINK="%k"
67KERNEL="dsp*", NAME="sound/%k", SYMLINK="%k"
68KERNEL="midi*", NAME="sound/%k", SYMLINK="%k"
69KERNEL="mixer*", NAME="sound/%k", SYMLINK="%k"
70KERNEL="sequencer*", NAME="sound/%k", SYMLINK="%k"
71
72# input devices
73KERNEL="mice", NAME="input/%k"
74KERNEL="mouse*", NAME="input/%k"
75KERNEL="event*", NAME="input/%k"
76KERNEL="js*", NAME="input/%k"
77KERNEL="ts*", NAME="input/%k"
78
79# USB devices
80KERNEL="hiddev*", NAME="usb/%k"
81KERNEL="auer*", NAME="usb/%k"
82KERNEL="legousbtower*", NAME="usb/%k"
83KERNEL="dabusb*", NAME="usb/%k"
84BUS="usb", KERNEL="lp[0-9]*", NAME="usb/%k"
85
86# netlink devices
87KERNEL="route", NAME="netlink/%k"
88KERNEL="skip", NAME="netlink/%k"
89KERNEL="usersock", NAME="netlink/%k"
90KERNEL="fwmonitor", NAME="netlink/%k"
91KERNEL="tcpdiag", NAME="netlink/%k"
92KERNEL="nflog", NAME="netlink/%k"
93KERNEL="xfrm", NAME="netlink/%k"
94KERNEL="arpd", NAME="netlink/%k"
95KERNEL="route6", NAME="netlink/%k"
96KERNEL="ip6_fw", NAME="netlink/%k"
97KERNEL="dnrtmsg", NAME="netlink/%k"
98KERNEL="tap*", NAME="netlink/%k"
99
100# CAPI devices
101KERNEL="capi", NAME="capi20", SYMLINK="isdn/capi20"
102KERNEL="capi*", NAME="capi/%n"
103
104# Network devices
105KERNEL="tun", NAME="net/%k"
106
107# raw devices
108KERNEL="raw[0-9]*", NAME="raw/%k"
diff --git a/meta/recipes-core/udev/eudev/init b/meta/recipes-core/udev/eudev/init
index c60dbbf6d5..477a525b21 100644
--- a/meta/recipes-core/udev/eudev/init
+++ b/meta/recipes-core/udev/eudev/init
@@ -23,6 +23,42 @@ kill_udevd () {
23 [ -n "$pid" ] && kill $pid 23 [ -n "$pid" ] && kill $pid
24} 24}
25 25
26make_static_nodes () {
27 [ -e /lib/modules/$(uname -r)/modules.devname ] || return 0
28 [ -x @KMOD@ ] || return 0
29
30 #output to /proc/self/fd/1 since /dev/stdout not created by udevd yet
31 @KMOD@ static-nodes --format=tmpfiles --output=/proc/self/fd/1 |
32 while read TTYPE TPATH TMODE TUSER TGROUP TAGE TARG; do
33 case "${TTYPE}" in
34 'd')
35 test -d "${TPATH}" || mkdir -p -m "${TMODE}" "${TPATH}"
36 ;;
37
38 'c!')
39 if [ ! -c "${TPATH}" ]; then
40 old_ifs="${IFS}"
41 IFS=:
42 set -- ${TARG}
43 IFS="${old_ifs}"
44 mknod -m "${TMODE}" "${TPATH}" c "$@"
45 fi
46 ;;
47
48 *)
49 echo "Unparseable line (${TTYPE} ${TPATH} ${TMODE} ${TUSER} ${TGROUP} ${TAGE} ${TARG})"
50 return 1
51 ;;
52 esac
53 if [ "${TUSER}" != "-" ]; then
54 chown "${TUSER}" "${TPATH}"
55 fi
56 if [ "${TGROUP}" != "-" ]; then
57 chgrp "${TGROUP}" "${TPATH}"
58 fi
59 done
60}
61
26case "$1" in 62case "$1" in
27 start) 63 start)
28 export ACTION=add 64 export ACTION=add
@@ -51,6 +87,7 @@ case "$1" in
51 # make_extra_nodes 87 # make_extra_nodes
52 kill_udevd > "/dev/null" 2>&1 88 kill_udevd > "/dev/null" 2>&1
53 89
90 make_static_nodes
54 # trigger the sorted events 91 # trigger the sorted events
55 [ -e /proc/sys/kernel/hotplug ] && printf '\0\n' >/proc/sys/kernel/hotplug 92 [ -e /proc/sys/kernel/hotplug ] && printf '\0\n' >/proc/sys/kernel/hotplug
56 @UDEVD@ -d 93 @UDEVD@ -d
diff --git a/meta/recipes-core/udev/eudev/links.conf b/meta/recipes-core/udev/eudev/links.conf
deleted file mode 100644
index 8fff922db6..0000000000
--- a/meta/recipes-core/udev/eudev/links.conf
+++ /dev/null
@@ -1,21 +0,0 @@
1# This file does not exist. Please do not ask the debian maintainer about it.
2# You may use it to do strange and wonderful things, at your risk.
3
4L fd /proc/self/fd
5L stdin /proc/self/fd/0
6L stdout /proc/self/fd/1
7L stderr /proc/self/fd/2
8L core /proc/kcore
9L sndstat /proc/asound/oss/sndstat
10L MAKEDEV /sbin/MAKEDEV
11
12D pts
13D shm
14
15# Hic sunt leones.
16M ppp c 108 0
17D loop
18M loop/0 b 7 0
19D net
20M net/tun c 10 200
21
diff --git a/meta/recipes-core/udev/eudev/netifnames.patch b/meta/recipes-core/udev/eudev/netifnames.patch
new file mode 100644
index 0000000000..4f8e54d12d
--- /dev/null
+++ b/meta/recipes-core/udev/eudev/netifnames.patch
@@ -0,0 +1,17 @@
1eudev: consider ID_NET_NAME_MAC as an interface name
2
3eudev might not create names based on slot or path.
4
5Upstream-Status: Backport [github.com/eudev-project/eudev/pull/274]
6
7Signed-off-by: Joe Slater <joe.slater@windriver.com>
8
9--- a/rules/80-net-name-slot.rules
10+++ b/rules/80-net-name-slot.rules
11@@ -10,5 +10,6 @@ ENV{net.ifnames}=="0", GOTO="net_name_sl
12 NAME=="", ENV{ID_NET_NAME_ONBOARD}!="", NAME="$env{ID_NET_NAME_ONBOARD}"
13 NAME=="", ENV{ID_NET_NAME_SLOT}!="", NAME="$env{ID_NET_NAME_SLOT}"
14 NAME=="", ENV{ID_NET_NAME_PATH}!="", NAME="$env{ID_NET_NAME_PATH}"
15+NAME=="", ENV{ID_NET_NAME_MAC}!="", NAME="$env{ID_NET_NAME_MAC}"
16
17 LABEL="net_name_slot_end"
diff --git a/meta/recipes-core/udev/eudev/permissions.rules b/meta/recipes-core/udev/eudev/permissions.rules
deleted file mode 100644
index 205b733292..0000000000
--- a/meta/recipes-core/udev/eudev/permissions.rules
+++ /dev/null
@@ -1,131 +0,0 @@
1ACTION!="add", GOTO="permissions_end"
2
3# workarounds needed to synchronize with sysfs
4# only needed for kernels < v2.6.18-rc1
5ENV{PHYSDEVPATH}!="?*", ENV{PHYSDEVBUS}=="?*", WAIT_FOR_SYSFS="bus"
6SUBSYSTEM=="scsi", KERNEL=="[0-9]*:[0-9]*", WAIT_FOR_SYSFS="ioerr_cnt"
7# only needed for kernels < 2.6.16
8SUBSYSTEM=="net", WAIT_FOR_SYSFS="address"
9# only needed for kernels < 2.6.17
10SUBSYSTEM=="net", ENV{DRIVER}=="?*", WAIT_FOR_SYSFS="device/driver"
11
12# devices needed to load the drivers providing them
13KERNEL=="tun", OPTIONS+="ignore_remove"
14KERNEL=="ppp", OPTIONS+="ignore_remove"
15KERNEL=="loop[0-9]*", OPTIONS+="ignore_remove"
16
17# default permissions for block devices
18SUBSYSTEM=="block", GROUP="disk"
19# the aacraid driver is broken and reports that disks removable (see #404927)
20SUBSYSTEM=="block", ATTRS{removable}=="1", \
21 DRIVERS!="aacraid", GROUP="floppy"
22# all block devices on these buses are "removable"
23SUBSYSTEM=="block", SUBSYSTEMS=="usb|ieee1394|mmc|pcmcia", GROUP="floppy"
24
25# IDE devices
26KERNEL=="hd[a-z]|pcd[0-9]*", DRIVERS=="ide-cdrom|pcd", \
27 IMPORT{program}="cdrom_id --export $tempnode"
28ENV{ID_CDROM}=="?*", GROUP="cdrom"
29KERNEL=="ht[0-9]*", GROUP="tape"
30KERNEL=="nht[0-9]*", GROUP="tape"
31
32# SCSI devices
33KERNEL=="sr[0-9]*", IMPORT{program}="cdrom_id --export $tempnode"
34SUBSYSTEMS=="scsi", ATTRS{type}=="1", GROUP="tape"
35SUBSYSTEMS=="scsi", ATTRS{type}=="3", ATTRS{vendor}=="HP", GROUP="scanner"
36SUBSYSTEMS=="scsi", ATTRS{type}=="3", ATTRS{vendor}=="Epson", GROUP="scanner"
37SUBSYSTEMS=="scsi", ATTRS{type}=="3", ATTRS{vendor}=="EPSON", GROUP="scanner"
38SUBSYSTEMS=="scsi", ATTRS{type}=="4", GROUP="cdrom"
39SUBSYSTEMS=="scsi", ATTRS{type}=="5", GROUP="cdrom"
40SUBSYSTEMS=="scsi", ATTRS{type}=="6", GROUP="scanner"
41SUBSYSTEMS=="scsi", ATTRS{type}=="8", GROUP="tape"
42
43# USB devices
44KERNEL=="legousbtower*", MODE="0666"
45KERNEL=="lp[0-9]*", SUBSYSTEMS=="usb", GROUP="lp"
46
47# usbfs-like devices
48SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", \
49 MODE="0664"
50
51# iRiver music players
52SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", GROUP="plugdev", \
53 ATTRS{idVendor}=="4102", ATTRS{idProduct}=="10[01][135789]"
54
55# serial devices
56SUBSYSTEM=="tty", GROUP="dialout"
57SUBSYSTEM=="capi", GROUP="dialout"
58SUBSYSTEM=="slamr", GROUP="dialout"
59SUBSYSTEM=="zaptel", GROUP="dialout"
60
61# vc devices (all members of the tty subsystem)
62KERNEL=="ptmx", MODE="0666", GROUP="root"
63KERNEL=="console", MODE="0600", GROUP="root"
64KERNEL=="tty", MODE="0666", GROUP="root"
65KERNEL=="tty[0-9]*", GROUP="root"
66KERNEL=="pty*", MODE="0666", GROUP="tty"
67
68# video devices
69SUBSYSTEM=="video4linux", GROUP="video"
70SUBSYSTEM=="drm", GROUP="video"
71SUBSYSTEM=="dvb", GROUP="video"
72SUBSYSTEM=="em8300", GROUP="video"
73SUBSYSTEM=="graphics", GROUP="video"
74SUBSYSTEM=="nvidia", GROUP="video"
75
76# misc devices
77KERNEL=="random", MODE="0666"
78KERNEL=="urandom", MODE="0666"
79KERNEL=="mem", MODE="0640", GROUP="kmem"
80KERNEL=="kmem", MODE="0640", GROUP="kmem"
81KERNEL=="port", MODE="0640", GROUP="kmem"
82KERNEL=="full", MODE="0666"
83KERNEL=="null", MODE="0666"
84KERNEL=="zero", MODE="0666"
85KERNEL=="inotify", MODE="0666"
86KERNEL=="sgi_fetchop", MODE="0666"
87KERNEL=="sonypi", MODE="0666"
88KERNEL=="agpgart", GROUP="video"
89KERNEL=="nvram", GROUP="nvram"
90KERNEL=="rtc|rtc[0-9]*", GROUP="audio"
91KERNEL=="tpm*", MODE="0600", OWNER="tss", GROUP="tss"
92KERNEL=="fuse", GROUP="fuse"
93KERNEL=="kqemu", MODE="0666"
94KERNEL=="kvm", GROUP="kvm"
95KERNEL=="tun", MODE="0666",
96
97KERNEL=="cdemu[0-9]*", GROUP="cdrom"
98KERNEL=="pktcdvd[0-9]*", GROUP="cdrom"
99KERNEL=="pktcdvd", MODE="0644"
100
101KERNEL=="uverbs*", GROUP="rdma"
102KERNEL=="ucm*", GROUP="rdma"
103KERNEL=="rdma_ucm", GROUP="rdma"
104
105# printers and parallel devices
106SUBSYSTEM=="printer", GROUP="lp"
107SUBSYSTEM=="ppdev", GROUP="lp"
108KERNEL=="irlpt*", GROUP="lp"
109KERNEL=="pt[0-9]*", GROUP="tape"
110KERNEL=="pht[0-9]*", GROUP="tape"
111
112# sound devices
113SUBSYSTEM=="sound", GROUP="audio"
114
115# ieee1394 devices
116KERNEL=="raw1394", GROUP="disk"
117KERNEL=="dv1394*", GROUP="video"
118KERNEL=="video1394*", GROUP="video"
119
120# input devices
121KERNEL=="event[0-9]*", ATTRS{name}=="*dvb*|*DVB*|* IR *" \
122 MODE="0664", GROUP="video"
123KERNEL=="js[0-9]*", MODE="0664"
124KERNEL=="lirc[0-9]*", GROUP="video"
125
126# AOE character devices
127SUBSYSTEM=="aoe", MODE="0220", GROUP="disk"
128SUBSYSTEM=="aoe", KERNEL=="err", MODE="0440"
129
130LABEL="permissions_end"
131
diff --git a/meta/recipes-core/udev/eudev/run.rules b/meta/recipes-core/udev/eudev/run.rules
deleted file mode 100644
index 75d71375bb..0000000000
--- a/meta/recipes-core/udev/eudev/run.rules
+++ /dev/null
@@ -1,14 +0,0 @@
1# debugging monitor
2RUN+="socket:/org/kernel/udev/monitor"
3
4# run a command on remove events
5ACTION=="remove", ENV{REMOVE_CMD}!="", RUN+="$env{REMOVE_CMD}"
6
7# ignore the events generated by virtual consoles
8KERNEL=="ptmx", OPTIONS+="last_rule"
9KERNEL=="console", OPTIONS+="last_rule"
10KERNEL=="tty" , OPTIONS+="last_rule"
11KERNEL=="tty[0-9]*", OPTIONS+="last_rule"
12KERNEL=="pty*", OPTIONS+="last_rule"
13SUBSYSTEM=="vc", OPTIONS+="last_rule"
14
diff --git a/meta/recipes-core/udev/eudev/udev.rules b/meta/recipes-core/udev/eudev/udev.rules
deleted file mode 100644
index a19d4a0bf6..0000000000
--- a/meta/recipes-core/udev/eudev/udev.rules
+++ /dev/null
@@ -1,116 +0,0 @@
1# There are a number of modifiers that are allowed to be used in some
2# of the different fields. They provide the following subsitutions:
3#
4# %n the "kernel number" of the device.
5# For example, 'sda3' has a "kernel number" of '3'
6# %e the smallest number for that name which does not matches an existing node
7# %k the kernel name for the device
8# %M the kernel major number for the device
9# %m the kernel minor number for the device
10# %b the bus id for the device
11# %c the string returned by the PROGRAM
12# %s{filename} the content of a sysfs attribute
13# %% the '%' char itself
14#
15
16# workaround for devices which do not report media changes
17SUBSYSTEMS=="ide", KERNEL=="hd[a-z]", ATTR{removable}=="1", \
18 ENV{ID_MODEL}=="IOMEGA_ZIP*", NAME="%k", OPTIONS+="all_partitions"
19SUBSYSTEMS=="ide", KERNEL=="hd[a-z]", ATTRS{media}=="floppy", \
20 OPTIONS+="all_partitions"
21
22# SCSI devices
23SUBSYSTEMS=="scsi", KERNEL=="sr[0-9]*", NAME="scd%n", SYMLINK+="sr%n"
24
25# USB devices
26SUBSYSTEMS=="usb", KERNEL=="auer[0-9]*", NAME="usb/%k"
27SUBSYSTEMS=="usb", KERNEL=="cpad[0-9]*", NAME="usb/%k"
28SUBSYSTEMS=="usb", KERNEL=="dabusb*", NAME="usb/%k"
29SUBSYSTEMS=="usb", KERNEL=="hiddev*", NAME="usb/%k"
30SUBSYSTEMS=="usb", KERNEL=="legousbtower*", NAME="usb/%k"
31SUBSYSTEMS=="usb", KERNEL=="lp[0-9]*", NAME="usb/%k"
32SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", \
33 ATTRS{product}=="Palm Handheld*|Handspring Visor|palmOne Handheld", \
34 SYMLINK+="pilot"
35
36# usbfs-like devices
37SUBSYSTEM=="usb_device", PROGRAM="/bin/sh -c 'K=%k; K=$${K#usbdev}; printf bus/usb/%%03i/%%03i $${K%%%%.*} $${K#*.}'", ACTION=="add", \
38 NAME="%c"
39SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", NAME="bus/usb/$env{BUSNUM}/$env{DEVNUM}"
40
41# serial devices
42KERNEL=="capi", NAME="capi20", SYMLINK+="isdn/capi20"
43KERNEL=="capi[0-9]*", NAME="capi/%n"
44
45# video devices
46KERNEL=="dvb*", PROGRAM="/bin/sh -c 'K=%k; K=$${K#dvb}; printf dvb/adapter%%i/%%s $${K%%%%.*} $${K#*.}", ACTION=="add", \
47 NAME="%c"
48KERNEL=="card[0-9]*", NAME="dri/%k"
49
50# misc devices
51KERNEL=="hw_random", NAME="hwrng"
52KERNEL=="tun", NAME="net/%k"
53KERNEL=="evtchn", NAME="xen/%k"
54
55KERNEL=="cdemu[0-9]*", NAME="cdemu/%n"
56KERNEL=="pktcdvd[0-9]*", NAME="pktcdvd/%n"
57KERNEL=="pktcdvd", NAME="pktcdvd/control"
58
59KERNEL=="cpu[0-9]*", NAME="cpu/%n/cpuid"
60KERNEL=="msr[0-9]*", NAME="cpu/%n/msr"
61KERNEL=="microcode", NAME="cpu/microcode"
62
63KERNEL=="umad*", NAME="infiniband/%k"
64KERNEL=="issm*", NAME="infiniband/%k"
65KERNEL=="uverbs*", NAME="infiniband/%k"
66KERNEL=="ucm*", NAME="infiniband/%k"
67KERNEL=="rdma_ucm", NAME="infiniband/%k"
68
69# ALSA devices
70KERNEL=="controlC[0-9]*", NAME="snd/%k"
71KERNEL=="hwC[D0-9]*", NAME="snd/%k"
72KERNEL=="pcmC[D0-9cp]*", NAME="snd/%k"
73KERNEL=="midiC[D0-9]*", NAME="snd/%k"
74KERNEL=="timer", NAME="snd/%k"
75KERNEL=="seq", NAME="snd/%k"
76
77# ieee1394 devices
78KERNEL=="dv1394*", NAME="dv1394/%n"
79KERNEL=="video1394*", NAME="video1394/%n"
80
81# input devices
82KERNEL=="mice", NAME="input/%k"
83KERNEL=="mouse[0-9]*", NAME="input/%k"
84KERNEL=="event[0-9]*", NAME="input/%k"
85KERNEL=="js[0-9]*", NAME="input/%k"
86KERNEL=="ts[0-9]*", NAME="input/%k"
87KERNEL=="uinput", NAME="input/%k"
88
89# Zaptel
90KERNEL=="zapctl", NAME="zap/ctl"
91KERNEL=="zaptimer", NAME="zap/timer"
92KERNEL=="zapchannel", NAME="zap/channel"
93KERNEL=="zappseudo", NAME="zap/pseudo"
94KERNEL=="zap[0-9]*", NAME="zap/%n"
95
96# AOE character devices
97SUBSYSTEM=="aoe", KERNEL=="discover", NAME="etherd/%k"
98SUBSYSTEM=="aoe", KERNEL=="err", NAME="etherd/%k"
99SUBSYSTEM=="aoe", KERNEL=="interfaces", NAME="etherd/%k"
100SUBSYSTEM=="aoe", KERNEL=="revalidate", NAME="etherd/%k"
101
102# device mapper creates its own device nodes, so ignore these
103KERNEL=="dm-[0-9]*", OPTIONS+="ignore_device"
104KERNEL=="device-mapper", NAME="mapper/control"
105
106KERNEL=="rfcomm[0-9]*", NAME="%k", GROUP="users", MODE="0660"
107
108# Firmware Helper
109ACTION=="add", SUBSYSTEM=="firmware", RUN+="/lib/udev/firmware.sh"
110
111# Samsung UARTS
112KERNEL=="s3c2410_serial[0-9]", NAME="ttySAC%n"
113
114# MXC UARTs
115KERNEL=="ttymxc[0-4]", NAME="ttymxc%n"
116
diff --git a/meta/recipes-core/udev/eudev_3.2.10.bb b/meta/recipes-core/udev/eudev_3.2.10.bb
deleted file mode 100644
index a5d2115f80..0000000000
--- a/meta/recipes-core/udev/eudev_3.2.10.bb
+++ /dev/null
@@ -1,97 +0,0 @@
1SUMMARY = "eudev is a fork of systemd's udev"
2HOMEPAGE = "https://wiki.gentoo.org/wiki/Eudev"
3DESCRIPTION = "eudev is Gentoo's fork of udev, systemd's device file manager for the Linux kernel. It manages device nodes in /dev and handles all user space actions when adding or removing devices."
4LICENSE = "GPLv2.0+ & LGPL-2.1+"
5LICENSE_libudev = "LGPL-2.1+"
6LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
7
8DEPENDS = "glib-2.0 glib-2.0-native gperf-native kmod libxslt-native util-linux"
9
10PROVIDES = "udev"
11
12SRC_URI = "https://dev.gentoo.org/~blueness/${BPN}/${BP}.tar.gz \
13 file://0014-Revert-rules-remove-firmware-loading-rules.patch \
14 file://Revert-udev-remove-userspace-firmware-loading-suppor.patch \
15 file://devfs-udev.rules \
16 file://init \
17 file://links.conf \
18 file://local.rules \
19 file://permissions.rules \
20 file://run.rules \
21 file://udev.rules \
22"
23
24SRC_URI[md5sum] = "60b135a189523f333cea5f71a3345c8d"
25SRC_URI[sha256sum] = "87bb028d470fd1b85169349b44c55d5b733733dc2d50ddf1196e026725ead034"
26
27inherit autotools update-rc.d qemu pkgconfig features_check
28
29CONFLICT_DISTRO_FEATURES = "systemd"
30
31EXTRA_OECONF = " \
32 --sbindir=${base_sbindir} \
33 --with-rootlibdir=${base_libdir} \
34 --with-rootlibexecdir=${nonarch_base_libdir}/udev \
35 --with-rootprefix= \
36"
37
38PACKAGECONFIG ??= "hwdb"
39PACKAGECONFIG[hwdb] = "--enable-hwdb,--disable-hwdb"
40
41do_install_append() {
42 install -d ${D}${sysconfdir}/init.d
43 install -m 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/udev
44 sed -i s%@UDEVD@%${base_sbindir}/udevd% ${D}${sysconfdir}/init.d/udev
45
46 install -d ${D}${sysconfdir}/udev/rules.d
47 install -m 0644 ${WORKDIR}/local.rules ${D}${sysconfdir}/udev/rules.d/local.rules
48
49 # Use classic network interface naming scheme
50 touch ${D}${sysconfdir}/udev/rules.d/80-net-name-slot.rules
51
52 # hid2hci has moved to bluez4. removed in udev as of version 169
53 rm -f ${D}${base_libdir}/udev/hid2hci
54
55 # duplicate udevadm for postinst script
56 install -d ${D}${libexecdir}
57 ln ${D}${bindir}/udevadm ${D}${libexecdir}/${MLPREFIX}udevadm
58}
59
60do_install_prepend_class-target () {
61 # Remove references to buildmachine
62 sed -i -e 's:${RECIPE_SYSROOT_NATIVE}::g' \
63 ${B}/src/udev/keyboard-keys-from-name.h
64}
65
66INITSCRIPT_NAME = "udev"
67INITSCRIPT_PARAMS = "start 04 S ."
68
69PACKAGES =+ "libudev"
70PACKAGES =+ "eudev-hwdb"
71
72
73FILES_${PN} += "${libexecdir} ${nonarch_base_libdir}/udev ${bindir}/udevadm"
74FILES_${PN}-dev = "${datadir}/pkgconfig/udev.pc \
75 ${includedir}/libudev.h ${libdir}/libudev.so \
76 ${includedir}/udev.h ${libdir}/libudev.la \
77 ${libdir}/libudev.a ${libdir}/pkgconfig/libudev.pc"
78FILES_libudev = "${base_libdir}/libudev.so.*"
79FILES_eudev-hwdb = "${sysconfdir}/udev/hwdb.d"
80
81RDEPENDS_eudev-hwdb += "eudev"
82
83RPROVIDES_${PN} = "hotplug udev"
84RPROVIDES_eudev-hwdb += "udev-hwdb"
85
86PACKAGE_WRITE_DEPS += "qemu-native"
87pkg_postinst_eudev-hwdb () {
88 if test -n "$D"; then
89 $INTERCEPT_DIR/postinst_intercept update_udev_hwdb ${PKG} mlprefix=${MLPREFIX} binprefix=${MLPREFIX}
90 else
91 udevadm hwdb --update
92 fi
93}
94
95pkg_prerm_eudev-hwdb () {
96 rm -f $D${sysconfdir}/udev/hwdb.bin
97}
diff --git a/meta/recipes-core/udev/eudev_3.2.14.bb b/meta/recipes-core/udev/eudev_3.2.14.bb
new file mode 100644
index 0000000000..0e5610f77c
--- /dev/null
+++ b/meta/recipes-core/udev/eudev_3.2.14.bb
@@ -0,0 +1,90 @@
1SUMMARY = "eudev is a fork of systemd's udev"
2HOMEPAGE = "https://github.com/eudev-project/eudev"
3DESCRIPTION = "eudev is Gentoo's fork of udev, systemd's device file manager for the Linux kernel. It manages device nodes in /dev and handles all user space actions when adding or removing devices."
4LICENSE = "GPL-2.0-or-later & LGPL-2.1-or-later"
5LICENSE:libudev = "LGPL-2.1-or-later"
6LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
7
8DEPENDS = "gperf-native"
9
10PROVIDES = "udev"
11
12SRC_URI = "${GITHUB_BASE_URI}/download/v${PV}/${BP}.tar.gz \
13 file://netifnames.patch \
14 file://init \
15 file://local.rules \
16 "
17
18SRC_URI[sha256sum] = "8da4319102f24abbf7fff5ce9c416af848df163b29590e666d334cc1927f006f"
19
20GITHUB_BASE_URI = "https://github.com/eudev-project/eudev/releases"
21
22inherit autotools update-rc.d qemu pkgconfig features_check manpages github-releases
23
24CONFLICT_DISTRO_FEATURES = "systemd"
25
26EXTRA_OECONF = " \
27 --sbindir=${base_sbindir} \
28 --with-rootlibdir=${base_libdir} \
29 --with-rootlibexecdir=${nonarch_base_libdir}/udev \
30 --with-rootprefix= \
31"
32
33PACKAGECONFIG ?= "blkid hwdb kmod \
34 ${@bb.utils.filter('DISTRO_FEATURES', 'selinux', d)} \
35"
36PACKAGECONFIG[blkid] = "--enable-blkid,--disable-blkid,util-linux"
37PACKAGECONFIG[hwdb] = "--enable-hwdb,--disable-hwdb"
38PACKAGECONFIG[kmod] = "--enable-kmod,--disable-kmod,kmod"
39PACKAGECONFIG[manpages] = "--enable-manpages,--disable-manpages"
40PACKAGECONFIG[rule-generator] = "--enable-rule-generator,--disable-rule-generator"
41PACKAGECONFIG[selinux] = "--enable-selinux,--disable-selinux,libselinux"
42
43do_install:append() {
44 install -d ${D}${sysconfdir}/init.d
45 install -m 0755 ${UNPACKDIR}/init ${D}${sysconfdir}/init.d/udev
46 sed -i s%@UDEVD@%${base_sbindir}/udevd% ${D}${sysconfdir}/init.d/udev
47 sed -i s%@KMOD@%${base_bindir}/kmod% ${D}${sysconfdir}/init.d/udev
48
49 install -d ${D}${sysconfdir}/udev/rules.d
50 install -m 0644 ${UNPACKDIR}/local.rules ${D}${sysconfdir}/udev/rules.d/local.rules
51
52 # Use classic network interface naming scheme if no 'pni-names' distro feature
53 if ${@bb.utils.contains('DISTRO_FEATURES', 'pni-names', 'false', 'true', d)}; then
54 touch ${D}${sysconfdir}/udev/rules.d/80-net-name-slot.rules
55 fi
56}
57
58do_install:prepend:class-target () {
59 # Remove references to buildmachine
60 sed -i -e 's:${RECIPE_SYSROOT_NATIVE}::g' \
61 ${B}/src/udev/keyboard-keys-from-name.h
62}
63
64INITSCRIPT_NAME = "udev"
65INITSCRIPT_PARAMS = "start 04 S ."
66
67PACKAGE_BEFORE_PN = "libudev ${PN}-hwdb"
68
69FILES:${PN} += "${nonarch_base_libdir}/udev"
70FILES:libudev = "${base_libdir}/libudev.so.*"
71FILES:${PN}-hwdb = "${sysconfdir}/udev/hwdb.d"
72
73RDEPENDS:${PN}-hwdb += "eudev"
74RDEPENDS:${PN} += "kmod"
75
76RPROVIDES:${PN} = "hotplug udev"
77RPROVIDES:${PN}-hwdb += "udev-hwdb"
78
79PACKAGE_WRITE_DEPS += "qemu-native"
80pkg_postinst:${PN}-hwdb () {
81 if test -n "$D"; then
82 $INTERCEPT_DIR/postinst_intercept update_udev_hwdb ${PKG} mlprefix=${MLPREFIX} binprefix=${MLPREFIX}
83 else
84 udevadm hwdb --update
85 fi
86}
87
88pkg_prerm:${PN}-hwdb () {
89 rm -f $D${sysconfdir}/udev/hwdb.bin
90}
diff --git a/meta/recipes-core/udev/udev-extraconf/mount.blacklist b/meta/recipes-core/udev/udev-extraconf/mount.ignorelist
index e49349428b..e49349428b 100644
--- a/meta/recipes-core/udev/udev-extraconf/mount.blacklist
+++ b/meta/recipes-core/udev/udev-extraconf/mount.ignorelist
diff --git a/meta/recipes-core/udev/udev-extraconf/mount.sh b/meta/recipes-core/udev/udev-extraconf/mount.sh
index b23731870e..c19e2aa68a 100644
--- a/meta/recipes-core/udev/udev-extraconf/mount.sh
+++ b/meta/recipes-core/udev/udev-extraconf/mount.sh
@@ -6,6 +6,7 @@
6 6
7BASE_INIT="`readlink -f "@base_sbindir@/init"`" 7BASE_INIT="`readlink -f "@base_sbindir@/init"`"
8INIT_SYSTEMD="@systemd_unitdir@/systemd" 8INIT_SYSTEMD="@systemd_unitdir@/systemd"
9MOUNT_BASE="@MOUNT_BASE@"
9 10
10if [ "x$BASE_INIT" = "x$INIT_SYSTEMD" ];then 11if [ "x$BASE_INIT" = "x$INIT_SYSTEMD" ];then
11 # systemd as init uses systemd-mount to mount block devices 12 # systemd as init uses systemd-mount to mount block devices
@@ -26,24 +27,44 @@ fi
26 27
27PMOUNT="/usr/bin/pmount" 28PMOUNT="/usr/bin/pmount"
28 29
29for line in `grep -h -v ^# /etc/udev/mount.blacklist /etc/udev/mount.blacklist.d/*` 30for line in `grep -h -v ^# /etc/udev/mount.ignorelist /etc/udev/mount.ignorelist.d/*`
30do 31do
31 if [ ` expr match "$DEVNAME" "$line" ` -gt 0 ]; 32 if [ ` expr match "$DEVNAME" "$line" ` -gt 0 ];
32 then 33 then
33 logger "udev/mount.sh" "[$DEVNAME] is blacklisted, ignoring" 34 logger "udev/mount.sh" "[$DEVNAME] is marked to ignore"
34 exit 0 35 exit 0
35 fi 36 fi
36done 37done
37 38
39is_filesystem_supported() {
40 while read -r fs; do
41 if [ "${fs#nodev}" = "$1" ];
42 then
43 return 0
44 fi
45 done < "/proc/filesystems"
46 return 1
47}
48
38automount_systemd() { 49automount_systemd() {
39 name="`basename "$DEVNAME"`" 50 name="`basename "$DEVNAME"`"
40 51
41 # Skip already mounted partitions 52 # Skip already mounted partitions
42 if [ -f /run/systemd/transient/run-media-$name.mount ]; then 53 if [ -f /run/systemd/transient/$(echo $MOUNT_BASE | cut -d '/' -f 2- | sed 's#/#-#g')-*$name.mount ]; then
43 logger "mount.sh/automount" "/run/media/$name already mounted" 54 logger "mount.sh/automount" "$MOUNT_BASE/$name already mounted"
44 return 55 return
45 fi 56 fi
46 57
58 # Get the unique name for mount point
59 get_label_name "${DEVNAME}"
60
61 # Only go for auto-mounting when the device has been cleaned up in remove
62 # or has not been identified yet
63 if [ -e "/tmp/.automount-$name" ]; then
64 logger "mount.sh/automount" "[$MOUNT_BASE/$name] is already cached"
65 return
66 fi
67
47 # Skip the partition which are already in /etc/fstab 68 # Skip the partition which are already in /etc/fstab
48 grep "^[[:space:]]*$DEVNAME" /etc/fstab && return 69 grep "^[[:space:]]*$DEVNAME" /etc/fstab && return
49 for n in LABEL PARTLABEL UUID PARTUUID; do 70 for n in LABEL PARTLABEL UUID PARTUUID; do
@@ -53,7 +74,12 @@ automount_systemd() {
53 grep "^[[:space:]]*$tmp" /etc/fstab && return 74 grep "^[[:space:]]*$tmp" /etc/fstab && return
54 done 75 done
55 76
56 [ -d "/run/media/$name" ] || mkdir -p "/run/media/$name" 77 if ! is_filesystem_supported $ID_FS_TYPE; then
78 logger "mount.sh/automount" "Filesystem '$ID_FS_TYPE' on '${DEVNAME}' is unsupported"
79 return
80 fi
81
82 [ -d "$MOUNT_BASE/$name" ] || mkdir -p "$MOUNT_BASE/$name"
57 83
58 MOUNT="$MOUNT -o silent" 84 MOUNT="$MOUNT -o silent"
59 85
@@ -65,18 +91,20 @@ automount_systemd() {
65 ;; 91 ;;
66 swap) 92 swap)
67 return ;; 93 return ;;
94 lvm*|LVM*)
95 return ;;
68 # TODO 96 # TODO
69 *) 97 *)
70 ;; 98 ;;
71 esac 99 esac
72 100
73 if ! $MOUNT --no-block -t auto $DEVNAME "/run/media/$name" 101 if ! $MOUNT --no-block -t auto $DEVNAME "$MOUNT_BASE/$name"
74 then 102 then
75 #logger "mount.sh/automount" "$MOUNT -t auto $DEVNAME \"/run/media/$name\" failed!" 103 #logger "mount.sh/automount" "$MOUNT -t auto $DEVNAME \"$MOUNT_BASE/$name\" failed!"
76 rm_dir "/run/media/$name" 104 rm_dir "$MOUNT_BASE/$name"
77 else 105 else
78 logger "mount.sh/automount" "Auto-mount of [/run/media/$name] successful" 106 logger "mount.sh/automount" "Auto-mount of [$MOUNT_BASE/$name] successful"
79 touch "/tmp/.automount-$name" 107 echo "$name" > "/tmp/.automount-$name"
80 fi 108 fi
81} 109}
82 110
@@ -93,7 +121,17 @@ automount() {
93 # configured in fstab 121 # configured in fstab
94 grep -q "^$DEVNAME " /proc/mounts && return 122 grep -q "^$DEVNAME " /proc/mounts && return
95 123
96 ! test -d "/run/media/$name" && mkdir -p "/run/media/$name" 124 # Get the unique name for mount point
125 get_label_name "${DEVNAME}"
126
127 # Only go for auto-mounting when the device has been cleaned up in remove
128 # or has not been identified yet
129 if [ -e "/tmp/.automount-$name" ]; then
130 logger "mount.sh/automount" "[$MOUNT_BASE/$name] is already cached"
131 return
132 fi
133
134 ! test -d "$MOUNT_BASE/$name" && mkdir -p "$MOUNT_BASE/$name"
97 # Silent util-linux's version of mounting auto 135 # Silent util-linux's version of mounting auto
98 if [ "x`readlink $MOUNT`" = "x/bin/mount.util-linux" ] ; 136 if [ "x`readlink $MOUNT`" = "x/bin/mount.util-linux" ] ;
99 then 137 then
@@ -108,18 +146,23 @@ automount() {
108 ;; 146 ;;
109 swap) 147 swap)
110 return ;; 148 return ;;
149 lvm*|LVM*)
150 return ;;
111 # TODO 151 # TODO
112 *) 152 *)
113 ;; 153 ;;
114 esac 154 esac
115 155
116 if ! $MOUNT -t auto $DEVNAME "/run/media/$name" 156 if ! $MOUNT -t auto $DEVNAME "$MOUNT_BASE/$name"
117 then 157 then
118 #logger "mount.sh/automount" "$MOUNT -t auto $DEVNAME \"/run/media/$name\" failed!" 158 #logger "mount.sh/automount" "$MOUNT -t auto $DEVNAME \"$MOUNT_BASE/$name\" failed!"
119 rm_dir "/run/media/$name" 159 rm_dir "$MOUNT_BASE/$name"
120 else 160 else
121 logger "mount.sh/automount" "Auto-mount of [/run/media/$name] successful" 161 logger "mount.sh/automount" "Auto-mount of [$MOUNT_BASE/$name] successful"
122 touch "/tmp/.automount-$name" 162 # The actual device might not be present in the remove event so blkid cannot
163 # be used to calculate what name was generated here. Simply save the mount
164 # name in our tmp file.
165 echo "$name" > "/tmp/.automount-$name"
123 fi 166 fi
124} 167}
125 168
@@ -133,6 +176,18 @@ rm_dir() {
133 fi 176 fi
134} 177}
135 178
179get_label_name() {
180 # Get the LABEL or PARTLABEL
181 LABEL=`/sbin/blkid | grep "$1:" | grep -o 'LABEL=".*"' | cut -d '"' -f2`
182 # If the $DEVNAME has a LABEL or a PARTLABEL
183 if [ -n "$LABEL" ]; then
184 # Set the mount location dir name to LABEL appended
185 # with $name e.g. label-sda. That would avoid overlapping
186 # mounts in case two devices have same LABEL
187 name="${LABEL}-${name}"
188 fi
189}
190
136# No ID_FS_TYPE for cdrom device, yet it should be mounted 191# No ID_FS_TYPE for cdrom device, yet it should be mounted
137name="`basename "$DEVNAME"`" 192name="`basename "$DEVNAME"`"
138[ -e /sys/block/$name/device/media ] && media_type=`cat /sys/block/$name/device/media` 193[ -e /sys/block/$name/device/media ] && media_type=`cat /sys/block/$name/device/media`
@@ -150,12 +205,18 @@ if [ "$ACTION" = "add" ] && [ -n "$DEVNAME" ] && [ -n "$ID_FS_TYPE" -o "$media_t
150fi 205fi
151 206
152if [ "$ACTION" = "remove" ] || [ "$ACTION" = "change" ] && [ -x "$UMOUNT" ] && [ -n "$DEVNAME" ]; then 207if [ "$ACTION" = "remove" ] || [ "$ACTION" = "change" ] && [ -x "$UMOUNT" ] && [ -n "$DEVNAME" ]; then
153 for mnt in `cat /proc/mounts | grep "$DEVNAME" | cut -f 2 -d " " `
154 do
155 $UMOUNT $mnt
156 done
157
158 # Remove empty directories from auto-mounter
159 name="`basename "$DEVNAME"`" 208 name="`basename "$DEVNAME"`"
160 test -e "/tmp/.automount-$name" && rm_dir "/run/media/$name" 209 tmpfile=`find /tmp | grep "\.automount-.*${name}$"`
210 if [ ! -e "/sys/$DEVPATH" -a -e "$tmpfile" ]; then
211 logger "mount.sh/remove" "cleaning up $DEVNAME, was mounted by the auto-mounter"
212 for mnt in `cat /proc/mounts | grep "$DEVNAME" | cut -f 2 -d " " `
213 do
214 $UMOUNT "`printf $mnt`"
215 done
216 # Remove mount directory created by the auto-mounter
217 # and clean up our tmp cache file
218 mntdir=`cat "$tmpfile"`
219 rm_dir "$MOUNT_BASE/$mntdir"
220 rm "$tmpfile"
221 fi
161fi 222fi
diff --git a/meta/recipes-core/udev/udev-extraconf_1.1.bb b/meta/recipes-core/udev/udev-extraconf_1.1.bb
index 90f933d981..0e2abcd424 100644
--- a/meta/recipes-core/udev/udev-extraconf_1.1.bb
+++ b/meta/recipes-core/udev/udev-extraconf_1.1.bb
@@ -1,45 +1,59 @@
1SUMMARY = "Extra machine specific configuration files" 1SUMMARY = "Extra machine specific configuration files"
2HOMEPAGE = "https://wiki.gentoo.org/wiki/Eudev" 2HOMEPAGE = "https://wiki.gentoo.org/wiki/Eudev"
3DESCRIPTION = "Extra machine specific configuration files for udev, specifically blacklist information." 3DESCRIPTION = "Extra machine specific configuration files for udev, specifically information on devices to ignore."
4LICENSE = "MIT" 4LICENSE = "MIT"
5LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420" 5LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
6 6
7SRC_URI = " \ 7SRC_URI = " \
8 file://automount.rules \ 8 file://automount.rules \
9 file://mount.sh \ 9 file://mount.sh \
10 file://mount.blacklist \ 10 file://mount.ignorelist \
11 file://autonet.rules \ 11 file://autonet.rules \
12 file://network.sh \ 12 file://network.sh \
13 file://localextra.rules \ 13 file://localextra.rules \
14" 14"
15 15
16S = "${WORKDIR}" 16S = "${WORKDIR}/sources"
17UNPACKDIR = "${S}"
17 18
19MOUNT_BASE = "/run/media"
18 20
19do_install() { 21do_install() {
20 install -d ${D}${sysconfdir}/udev/rules.d 22 install -d ${D}${sysconfdir}/udev/rules.d
21 23
22 install -m 0644 ${WORKDIR}/automount.rules ${D}${sysconfdir}/udev/rules.d/automount.rules 24 install -m 0644 ${S}/automount.rules ${D}${sysconfdir}/udev/rules.d/automount.rules
23 install -m 0644 ${WORKDIR}/autonet.rules ${D}${sysconfdir}/udev/rules.d/autonet.rules 25 install -m 0644 ${S}/autonet.rules ${D}${sysconfdir}/udev/rules.d/autonet.rules
24 install -m 0644 ${WORKDIR}/localextra.rules ${D}${sysconfdir}/udev/rules.d/localextra.rules 26 install -m 0644 ${S}/localextra.rules ${D}${sysconfdir}/udev/rules.d/localextra.rules
25 27
26 install -d ${D}${sysconfdir}/udev/mount.blacklist.d 28 install -d ${D}${sysconfdir}/udev/mount.ignorelist.d
27 install -m 0644 ${WORKDIR}/mount.blacklist ${D}${sysconfdir}/udev/ 29 install -m 0644 ${S}/mount.ignorelist ${D}${sysconfdir}/udev/
28 30
29 install -d ${D}${sysconfdir}/udev/scripts/ 31 install -d ${D}${sysconfdir}/udev/scripts/
30 32
31 install -m 0755 ${WORKDIR}/mount.sh ${D}${sysconfdir}/udev/scripts/mount.sh 33 install -m 0755 ${S}/mount.sh ${D}${sysconfdir}/udev/scripts/mount.sh
32 sed -i 's|@systemd_unitdir@|${systemd_unitdir}|g' ${D}${sysconfdir}/udev/scripts/mount.sh 34 sed -i 's|@systemd_unitdir@|${systemd_unitdir}|g' ${D}${sysconfdir}/udev/scripts/mount.sh
33 sed -i 's|@base_sbindir@|${base_sbindir}|g' ${D}${sysconfdir}/udev/scripts/mount.sh 35 sed -i 's|@base_sbindir@|${base_sbindir}|g' ${D}${sysconfdir}/udev/scripts/mount.sh
36 sed -i 's|@MOUNT_BASE@|${MOUNT_BASE}|g' ${D}${sysconfdir}/udev/scripts/mount.sh
34 37
35 install -m 0755 ${WORKDIR}/network.sh ${D}${sysconfdir}/udev/scripts 38 install -m 0755 ${S}/network.sh ${D}${sysconfdir}/udev/scripts
36} 39}
37 40
38FILES_${PN} = "${sysconfdir}/udev" 41pkg_postinst:${PN} () {
39RDEPENDS_${PN} = "udev" 42 if [ -e $D${systemd_unitdir}/system/systemd-udevd.service ]; then
40CONFFILES_${PN} = "${sysconfdir}/udev/mount.blacklist" 43 sed -i "/\[Service\]/aMountFlags=shared" $D${systemd_unitdir}/system/systemd-udevd.service
44 fi
45}
46
47pkg_postrm:${PN} () {
48 if [ -e $D${systemd_unitdir}/system/systemd-udevd.service ]; then
49 sed -i "/MountFlags=shared/d" $D${systemd_unitdir}/system/systemd-udevd.service
50 fi
51}
52
53RDEPENDS:${PN} = "udev util-linux-blkid ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'util-linux-lsblk', '', d)}"
54CONFFILES:${PN} = "${sysconfdir}/udev/mount.ignorelist"
41 55
42# to replace udev-extra-rules from meta-oe 56# to replace udev-extra-rules from meta-oe
43RPROVIDES_${PN} = "udev-extra-rules" 57RPROVIDES:${PN} = "udev-extra-rules"
44RREPLACES_${PN} = "udev-extra-rules" 58RREPLACES:${PN} = "udev-extra-rules"
45RCONFLICTS_${PN} = "udev-extra-rules" 59RCONFLICTS:${PN} = "udev-extra-rules"