From: Changqing Li <[email protected]>

dev in modules.devname should be populated in /dev on boot.  remove
create static mode from udevd will make these devices cannot be
populated. Since commit [1], when use sysVinit, devices like
/dev/net/tun will not be created.

more info:
udevd in systemd also remove create static mode in udevd, but using
service kmod-static-nodes.service and systemd-tmpfiles-setup-dev.service
in systemd to create these node, so systemd works well.

For sysV, parse kmod static-nodes and generate the device nodes in init

[1] 
https://gitweb.gentoo.org/proj/eudev.git/commit/?id=2b7abd5ec9cc47a8b895df6db77fb1537c6f1a39

Signed-off-by: Changqing Li <[email protected]>
---
 meta/recipes-core/udev/eudev/init      | 37 ++++++++++++++++++++++++++
 meta/recipes-core/udev/eudev_3.2.11.bb |  2 ++
 2 files changed, 39 insertions(+)

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 () {
     [ -n "$pid" ] && kill $pid
 }
 
+make_static_nodes () {
+    [ -e /lib/modules/$(uname -r)/modules.devname ] || return 0
+    [ -x @KMOD@ ] || return 0
+
+    #output to /proc/self/fd/1 since /dev/stdout not created by udevd yet
+    @KMOD@ static-nodes --format=tmpfiles --output=/proc/self/fd/1 |
+    while read TTYPE TPATH TMODE TUSER TGROUP TAGE TARG; do
+    case "${TTYPE}" in
+    'd')
+            test -d "${TPATH}" || mkdir -p -m "${TMODE}" "${TPATH}"
+            ;;
+
+    'c!')
+            if [ ! -c "${TPATH}" ]; then
+                    old_ifs="${IFS}"
+                    IFS=:
+                    set -- ${TARG}
+                    IFS="${old_ifs}"
+                    mknod -m "${TMODE}" "${TPATH}" c "$@"
+            fi
+            ;;
+
+    *)
+            echo "Unparseable line (${TTYPE} ${TPATH} ${TMODE} ${TUSER} 
${TGROUP} ${TAGE} ${TARG})"
+            return 1
+            ;;
+    esac
+    if [ "${TUSER}" != "-" ]; then
+            chown "${TUSER}" "${TPATH}"
+    fi
+    if [ "${TGROUP}" != "-" ]; then
+            chgrp "${TGROUP}" "${TPATH}"
+    fi
+    done
+}
+
 case "$1" in
   start)
     export ACTION=add
@@ -51,6 +87,7 @@ case "$1" in
     # make_extra_nodes
     kill_udevd > "/dev/null" 2>&1
 
+    make_static_nodes
     # trigger the sorted events
     [ -e /proc/sys/kernel/hotplug ] && printf '\0\n' >/proc/sys/kernel/hotplug
     @UDEVD@ -d
diff --git a/meta/recipes-core/udev/eudev_3.2.11.bb 
b/meta/recipes-core/udev/eudev_3.2.11.bb
index 841039f6d7..a0a19e501d 100644
--- a/meta/recipes-core/udev/eudev_3.2.11.bb
+++ b/meta/recipes-core/udev/eudev_3.2.11.bb
@@ -41,6 +41,7 @@ do_install:append() {
        install -d ${D}${sysconfdir}/init.d
        install -m 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/udev
        sed -i s%@UDEVD@%${base_sbindir}/udevd% ${D}${sysconfdir}/init.d/udev
+       sed -i s%@KMOD@%${base_bindir}/kmod% ${D}${sysconfdir}/init.d/udev
 
        install -d ${D}${sysconfdir}/udev/rules.d
        install -m 0644 ${WORKDIR}/local.rules 
${D}${sysconfdir}/udev/rules.d/local.rules
@@ -73,6 +74,7 @@ FILES:libudev = "${base_libdir}/libudev.so.*"
 FILES:eudev-hwdb = "${sysconfdir}/udev/hwdb.d"
 
 RDEPENDS:eudev-hwdb += "eudev"
+RDEPENDS:eudev += "kmod"
 
 RPROVIDES:${PN} = "hotplug udev"
 RPROVIDES:eudev-hwdb += "udev-hwdb"
-- 
2.25.1

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#165925): 
https://lists.openembedded.org/g/openembedded-core/message/165925
Mute This Topic: https://lists.openembedded.org/mt/91228362/21656
Group Owner: [email protected]
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to