Message ID | 20220519085658.3796309-1-changqing.li@windriver.com |
---|---|
State | Accepted, archived |
Commit | 10940ee60864500f037a73d8bde8d74f9917959c |
Headers | show |
Series | eudev: create static-nodes in init script | expand |
On Thu, May 19, 2022 at 9:57 AM <changqing.li@windriver.com> wrote: > > From: Changqing Li <changqing.li@windriver.com> > > 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> > --- > 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? Also if we're substituting for the full kmod path with @KMOD@ we should do the same here. > + 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? > + ;; > + 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 >
On Fri, May 20, 2022 at 6:32 AM Li, Changqing <Changqing.Li@windriver.com> wrote: > > > > ________________________________ > From: Alex Kiernan <alex.kiernan@gmail.com> > Sent: Thursday, May 19, 2022 10:14 PM > To: Li, Changqing <Changqing.Li@windriver.com> > Cc: Patches and discussions about the oe-core layer <openembedded-core@lists.openembedded.org>; Richard Purdie <richard.purdie@linuxfoundation.org> > 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@windriver.com> wrote: > > > > From: Changqing Li <changqing.li@windriver.com> > > > > 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> > > --- > > 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. > Oh, that's interesting - I suspect it's worth capturing as a comment so the next person looking at it doesn't have the same question as me! > 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
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 | + 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 + ;; + 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"