Re: [PATCH] eudev: create static-nodes in init script
Changqing Li
From: Alex Kiernan <alex.kiernan@...>
Sent: Thursday, May 19, 2022 10:14 PM To: Li, Changqing <Changqing.Li@...> Cc: Patches and discussions about the oe-core layer <openembedded-core@...>; Richard Purdie <richard.purdie@...> Subject: Re: [PATCH] eudev: create static-nodes in init script [Please note: This e-mail is from an EXTERNAL e-mail address]
On Thu, May 19, 2022 at 9:57 AM <changqing.li@...> wrote: > > From: Changqing Li <changqing.li@...> > > 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@...> > --- > meta/recipes-core/udev/eudev/init | 36 ++++++++++++++++++++++++++ > meta/recipes-core/udev/eudev_3.2.11.bb | 2 ++ > 2 files changed, 38 insertions(+) > > diff --git a/meta/recipes-core/udev/eudev/init b/meta/recipes-core/udev/eudev/init > index c60dbbf6d5..5c2fb4a9fb 100644 > --- a/meta/recipes-core/udev/eudev/init > +++ b/meta/recipes-core/udev/eudev/init > @@ -23,6 +23,41 @@ kill_udevd () { > [ -n "$pid" ] && kill $pid > } > > +make_static_nodes () { > + [ -e /lib/modules/$(uname -r)/modules.devname ] || return 0 > + [ -x @KMOD@ ] || return 0 > + > + kmod static-nodes --format=tmpfiles --output=/proc/self/fd/1 | Is that --output=... really needed? add output since kmod output to /dev/stdout by default,but we run make_static_nodes
before udevd,
/dev/stdout is created
by udevd.
Also if we're substituting for the full kmod path with @KMOD@ we should do the same here.
OK.
> + 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 ERROR > + exit 1 I don't know what the right answer is if you end up here - blundering on regardless I guess is more typical behaviour for sysvinit, so just use a better error message and don't exit? Get this.
> + ;; > + 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 +86,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..e4f78c2b0c 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_sbindir}/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 > -- Alex Kiernan |
|