diff options
author | Changqing Li <changqing.li@windriver.com> | 2022-05-20 19:05:09 +0800 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2022-05-21 08:37:23 +0100 |
commit | 10940ee60864500f037a73d8bde8d74f9917959c (patch) | |
tree | 3e1bba3c8edd421aa6a6ad3d14f9756cab3e3581 /meta/recipes-core | |
parent | 601294b35c83faa134e26844c65db59b42d5052f (diff) | |
download | openembedded-core-contrib-10940ee60864500f037a73d8bde8d74f9917959c.tar.gz |
eudev: create static-nodes in init script
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 <changqing.li@windriver.com>
Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/recipes-core')
-rw-r--r-- | meta/recipes-core/udev/eudev/init | 37 | ||||
-rw-r--r-- | meta/recipes-core/udev/eudev_3.2.11.bb | 2 |
2 files changed, 39 insertions, 0 deletions
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" |