| Message ID | 20260602104810.1068959-3-m-shah@ti.com |
|---|---|
| State | Changes Requested |
| Delegated to: | Ryan Eatmon |
| Headers | show |
| Series | Fix NFS boot on K3 platforms with bsp-next kernel | expand |
On Tue, Jun 02, 2026 at 04:18:10PM +0530, Moteen Shah via lists.yoctoproject.org wrote: > Add 83-netsetup, an initramfs-framework module that configures the > network interface via DHCP before the NFS root mount. Needed when the > Ethernet driver is a loadable module and the deferred probe chain > requires time to settle after udev loads the modules. Also add dhcpcd > to packagegroup-ti-core-initramfs to support DHCP configuration. > > Signed-off-by: Moteen Shah <m-shah@ti.com> > --- > .../initramfs-framework/83-netsetup | 54 +++++++++++++++++++ > .../initramfs-framework_%.bbappend | 15 ++++++ > .../packagegroup-ti-core-initramfs.bb | 2 + > 3 files changed, 71 insertions(+) > create mode 100644 meta-ti-bsp/recipes-core/initramfs-scripts/initramfs-framework/83-netsetup > create mode 100644 meta-ti-bsp/recipes-core/initramfs-scripts/initramfs-framework_%.bbappend > > diff --git a/meta-ti-bsp/recipes-core/initramfs-scripts/initramfs-framework/83-netsetup b/meta-ti-bsp/recipes-core/initramfs-scripts/initramfs-framework/83-netsetup > new file mode 100644 > index 00000000..b71bc3b3 > --- /dev/null > +++ b/meta-ti-bsp/recipes-core/initramfs-scripts/initramfs-framework/83-netsetup > @@ -0,0 +1,54 @@ > +#!/bin/sh > +# Configure network via DHCP before NFS root mount. Polls for an Ethernet > +# interface with sleep 1 per iteration to allow the Ethernet driver deferred > +# probe chain to settle after udev loads the modules. > + > +netsetup_enabled() { > + [ "${bootparam_root}" = "/dev/nfs" ] || return 1 > + return 0 > +} > + > +netsetup_run() { > + local iface timeout devtype > + > + # Extract interface from ip= kernel param (format: client:server:gw:mask:host:device:autoconf) > + iface="" > + case "${bootparam_ip}" in > + dhcp|on|any|"") > + ;; > + *) > + iface=$(echo "${bootparam_ip}" | cut -d: -f6) > + ;; > + esac > + > + udevadm trigger --action=add --subsystem-match=net > + udevadm settle --timeout=10 > + > + # Poll up to 60 seconds for an Ethernet interface (ARPHRD_ETHER = type 1). > + msg "netsetup: waiting for ethernet interface..." > + timeout=60 > + while [ "${timeout}" -gt 0 ]; do > + if [ -n "${iface}" ] && [ -d "/sys/class/net/${iface}" ]; then > + break > + fi > + for dev in /sys/class/net/*; do > + [ -f "${dev}/type" ] || continue > + devtype=$(cat "${dev}/type") > + [ "${devtype}" = "1" ] || continue > + iface=$(basename "${dev}") > + break > + done > + [ -n "${iface}" ] && [ -d "/sys/class/net/${iface}" ] && break > + sleep 1 > + timeout=$((timeout - 1)) > + done > + > + if [ -z "${iface}" ] || [ ! -d "/sys/class/net/${iface}" ]; then > + msg "netsetup: no ethernet interface found after 60s, skipping DHCP" > + return > + fi > + > + msg "netsetup: configuring ${iface} via DHCP" > + > + dhcpcd --waitip "${iface}" > +} > diff --git a/meta-ti-bsp/recipes-core/initramfs-scripts/initramfs-framework_%.bbappend b/meta-ti-bsp/recipes-core/initramfs-scripts/initramfs-framework_%.bbappend > new file mode 100644 > index 00000000..c8955689 > --- /dev/null > +++ b/meta-ti-bsp/recipes-core/initramfs-scripts/initramfs-framework_%.bbappend > @@ -0,0 +1,15 @@ > +FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:" > + > +SUMMARY:initramfs-module-netsetup = "initramfs support for DHCP network setup before NFS root mount" This should probably be a standalone initramfs-module* recipe, instead of a bbappend. > +SRC_URI:append = " file://83-netsetup" > + > +PACKAGES =+ "initramfs-module-netsetup" > + > +RDEPENDS:initramfs-module-netsetup = "${PN}-base" > + > +FILES:initramfs-module-netsetup = "/init.d/83-netsetup" > + > +do_install:append() { > + install -m 0755 ${UNPACKDIR}/83-netsetup ${D}/init.d/83-netsetup > +} > diff --git a/meta-ti-bsp/recipes-ti/initramfs/packagegroup-ti-core-initramfs.bb b/meta-ti-bsp/recipes-ti/initramfs/packagegroup-ti-core-initramfs.bb > index a9eff847..ede0639d 100644 > --- a/meta-ti-bsp/recipes-ti/initramfs/packagegroup-ti-core-initramfs.bb > +++ b/meta-ti-bsp/recipes-ti/initramfs/packagegroup-ti-core-initramfs.bb > @@ -18,6 +18,8 @@ RDEPENDS:${PN} += "\ > netbase \ > base-files \ > base-passwd \ > + dhcpcd \ > + initramfs-module-netsetup \ > initramfs-framework-base \ > initramfs-module-udev \ > initramfs-module-nfsrootfs \ > -- > 2.34.1
On 6/2/2026 8:47 AM, Denys Dmytriyenko wrote: > On Tue, Jun 02, 2026 at 04:18:10PM +0530, Moteen Shah via lists.yoctoproject.org wrote: >> Add 83-netsetup, an initramfs-framework module that configures the >> network interface via DHCP before the NFS root mount. Needed when the >> Ethernet driver is a loadable module and the deferred probe chain >> requires time to settle after udev loads the modules. Also add dhcpcd >> to packagegroup-ti-core-initramfs to support DHCP configuration. >> >> Signed-off-by: Moteen Shah <m-shah@ti.com> >> --- >> .../initramfs-framework/83-netsetup | 54 +++++++++++++++++++ >> .../initramfs-framework_%.bbappend | 15 ++++++ >> .../packagegroup-ti-core-initramfs.bb | 2 + >> 3 files changed, 71 insertions(+) >> create mode 100644 meta-ti-bsp/recipes-core/initramfs-scripts/initramfs-framework/83-netsetup >> create mode 100644 meta-ti-bsp/recipes-core/initramfs-scripts/initramfs-framework_%.bbappend >> >> diff --git a/meta-ti-bsp/recipes-core/initramfs-scripts/initramfs-framework/83-netsetup b/meta-ti-bsp/recipes-core/initramfs-scripts/initramfs-framework/83-netsetup >> new file mode 100644 >> index 00000000..b71bc3b3 >> --- /dev/null >> +++ b/meta-ti-bsp/recipes-core/initramfs-scripts/initramfs-framework/83-netsetup >> @@ -0,0 +1,54 @@ >> +#!/bin/sh >> +# Configure network via DHCP before NFS root mount. Polls for an Ethernet >> +# interface with sleep 1 per iteration to allow the Ethernet driver deferred >> +# probe chain to settle after udev loads the modules. >> + >> +netsetup_enabled() { >> + [ "${bootparam_root}" = "/dev/nfs" ] || return 1 >> + return 0 >> +} >> + >> +netsetup_run() { >> + local iface timeout devtype >> + >> + # Extract interface from ip= kernel param (format: client:server:gw:mask:host:device:autoconf) >> + iface="" >> + case "${bootparam_ip}" in >> + dhcp|on|any|"") >> + ;; >> + *) >> + iface=$(echo "${bootparam_ip}" | cut -d: -f6) >> + ;; >> + esac >> + >> + udevadm trigger --action=add --subsystem-match=net >> + udevadm settle --timeout=10 >> + >> + # Poll up to 60 seconds for an Ethernet interface (ARPHRD_ETHER = type 1). >> + msg "netsetup: waiting for ethernet interface..." >> + timeout=60 >> + while [ "${timeout}" -gt 0 ]; do >> + if [ -n "${iface}" ] && [ -d "/sys/class/net/${iface}" ]; then >> + break >> + fi >> + for dev in /sys/class/net/*; do >> + [ -f "${dev}/type" ] || continue >> + devtype=$(cat "${dev}/type") >> + [ "${devtype}" = "1" ] || continue >> + iface=$(basename "${dev}") >> + break >> + done >> + [ -n "${iface}" ] && [ -d "/sys/class/net/${iface}" ] && break >> + sleep 1 >> + timeout=$((timeout - 1)) >> + done >> + >> + if [ -z "${iface}" ] || [ ! -d "/sys/class/net/${iface}" ]; then >> + msg "netsetup: no ethernet interface found after 60s, skipping DHCP" >> + return >> + fi >> + >> + msg "netsetup: configuring ${iface} via DHCP" >> + >> + dhcpcd --waitip "${iface}" >> +} >> diff --git a/meta-ti-bsp/recipes-core/initramfs-scripts/initramfs-framework_%.bbappend b/meta-ti-bsp/recipes-core/initramfs-scripts/initramfs-framework_%.bbappend >> new file mode 100644 >> index 00000000..c8955689 >> --- /dev/null >> +++ b/meta-ti-bsp/recipes-core/initramfs-scripts/initramfs-framework_%.bbappend >> @@ -0,0 +1,15 @@ >> +FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:" >> + >> +SUMMARY:initramfs-module-netsetup = "initramfs support for DHCP network setup before NFS root mount" > > This should probably be a standalone initramfs-module* recipe, instead of a > bbappend. Agreed. It's a little confusing to add a subpackage like that. We should create a new recipe and depend on that name to pull in this one file. The name you chose was fine, just move it out of the bbappend. > >> +SRC_URI:append = " file://83-netsetup" >> + >> +PACKAGES =+ "initramfs-module-netsetup" >> + >> +RDEPENDS:initramfs-module-netsetup = "${PN}-base" >> + >> +FILES:initramfs-module-netsetup = "/init.d/83-netsetup" >> + >> +do_install:append() { >> + install -m 0755 ${UNPACKDIR}/83-netsetup ${D}/init.d/83-netsetup >> +} >> diff --git a/meta-ti-bsp/recipes-ti/initramfs/packagegroup-ti-core-initramfs.bb b/meta-ti-bsp/recipes-ti/initramfs/packagegroup-ti-core-initramfs.bb >> index a9eff847..ede0639d 100644 >> --- a/meta-ti-bsp/recipes-ti/initramfs/packagegroup-ti-core-initramfs.bb >> +++ b/meta-ti-bsp/recipes-ti/initramfs/packagegroup-ti-core-initramfs.bb >> @@ -18,6 +18,8 @@ RDEPENDS:${PN} += "\ >> netbase \ >> base-files \ >> base-passwd \ >> + dhcpcd \ >> + initramfs-module-netsetup \ >> initramfs-framework-base \ >> initramfs-module-udev \ >> initramfs-module-nfsrootfs \ >> -- >> 2.34.1
On Tue, Jun 02, 2026 at 09:59:15AM -0500, Ryan Eatmon wrote: > > > On 6/2/2026 8:47 AM, Denys Dmytriyenko wrote: > >On Tue, Jun 02, 2026 at 04:18:10PM +0530, Moteen Shah via lists.yoctoproject.org wrote: > >>Add 83-netsetup, an initramfs-framework module that configures the > >>network interface via DHCP before the NFS root mount. Needed when the > >>Ethernet driver is a loadable module and the deferred probe chain > >>requires time to settle after udev loads the modules. Also add dhcpcd > >>to packagegroup-ti-core-initramfs to support DHCP configuration. > >> > >>Signed-off-by: Moteen Shah <m-shah@ti.com> > >>--- > >> .../initramfs-framework/83-netsetup | 54 +++++++++++++++++++ > >> .../initramfs-framework_%.bbappend | 15 ++++++ > >> .../packagegroup-ti-core-initramfs.bb | 2 + > >> 3 files changed, 71 insertions(+) > >> create mode 100644 meta-ti-bsp/recipes-core/initramfs-scripts/initramfs-framework/83-netsetup > >> create mode 100644 meta-ti-bsp/recipes-core/initramfs-scripts/initramfs-framework_%.bbappend > >> > >>diff --git a/meta-ti-bsp/recipes-core/initramfs-scripts/initramfs-framework/83-netsetup b/meta-ti-bsp/recipes-core/initramfs-scripts/initramfs-framework/83-netsetup > >>new file mode 100644 > >>index 00000000..b71bc3b3 > >>--- /dev/null > >>+++ b/meta-ti-bsp/recipes-core/initramfs-scripts/initramfs-framework/83-netsetup > >>@@ -0,0 +1,54 @@ > >>+#!/bin/sh > >>+# Configure network via DHCP before NFS root mount. Polls for an Ethernet > >>+# interface with sleep 1 per iteration to allow the Ethernet driver deferred > >>+# probe chain to settle after udev loads the modules. > >>+ > >>+netsetup_enabled() { > >>+ [ "${bootparam_root}" = "/dev/nfs" ] || return 1 > >>+ return 0 > >>+} > >>+ > >>+netsetup_run() { > >>+ local iface timeout devtype > >>+ > >>+ # Extract interface from ip= kernel param (format: client:server:gw:mask:host:device:autoconf) > >>+ iface="" > >>+ case "${bootparam_ip}" in > >>+ dhcp|on|any|"") > >>+ ;; > >>+ *) > >>+ iface=$(echo "${bootparam_ip}" | cut -d: -f6) > >>+ ;; > >>+ esac > >>+ > >>+ udevadm trigger --action=add --subsystem-match=net > >>+ udevadm settle --timeout=10 > >>+ > >>+ # Poll up to 60 seconds for an Ethernet interface (ARPHRD_ETHER = type 1). > >>+ msg "netsetup: waiting for ethernet interface..." > >>+ timeout=60 > >>+ while [ "${timeout}" -gt 0 ]; do > >>+ if [ -n "${iface}" ] && [ -d "/sys/class/net/${iface}" ]; then > >>+ break > >>+ fi > >>+ for dev in /sys/class/net/*; do > >>+ [ -f "${dev}/type" ] || continue > >>+ devtype=$(cat "${dev}/type") > >>+ [ "${devtype}" = "1" ] || continue > >>+ iface=$(basename "${dev}") > >>+ break > >>+ done > >>+ [ -n "${iface}" ] && [ -d "/sys/class/net/${iface}" ] && break > >>+ sleep 1 > >>+ timeout=$((timeout - 1)) > >>+ done > >>+ > >>+ if [ -z "${iface}" ] || [ ! -d "/sys/class/net/${iface}" ]; then > >>+ msg "netsetup: no ethernet interface found after 60s, skipping DHCP" > >>+ return > >>+ fi > >>+ > >>+ msg "netsetup: configuring ${iface} via DHCP" > >>+ > >>+ dhcpcd --waitip "${iface}" > >>+} > >>diff --git a/meta-ti-bsp/recipes-core/initramfs-scripts/initramfs-framework_%.bbappend b/meta-ti-bsp/recipes-core/initramfs-scripts/initramfs-framework_%.bbappend > >>new file mode 100644 > >>index 00000000..c8955689 > >>--- /dev/null > >>+++ b/meta-ti-bsp/recipes-core/initramfs-scripts/initramfs-framework_%.bbappend > >>@@ -0,0 +1,15 @@ > >>+FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:" > >>+ > >>+SUMMARY:initramfs-module-netsetup = "initramfs support for DHCP network setup before NFS root mount" > > > >This should probably be a standalone initramfs-module* recipe, instead of a > >bbappend. > > Agreed. It's a little confusing to add a subpackage like that. We > should create a new recipe and depend on that name to pull in this > one file. The name you chose was fine, just move it out of the > bbappend. There are numerous examples of existing initramfs-module-* recipes that extend initramfs-framework functionality, e.g.: https://git.openembedded.org/openembedded-core/tree/meta/recipes-core/initrdscripts/initramfs-module-install-efi_1.0.bb https://git.openembedded.org/openembedded-core/tree/meta/recipes-core/initrdscripts/initramfs-module-install_1.0.bb https://git.openembedded.org/openembedded-core/tree/meta/recipes-core/initrdscripts/initramfs-module-setup-live_1.0.bb And don't forget about our own such recipe for LUKS with fTPM: https://git.yoctoproject.org/meta-ti/tree/meta-ti-bsp/dynamic-layers/tpm-layer/recipes-ti/initramfs/initramfs-module-luks-ftpm_1.0.bb > >>+SRC_URI:append = " file://83-netsetup" > >>+ > >>+PACKAGES =+ "initramfs-module-netsetup" > >>+ > >>+RDEPENDS:initramfs-module-netsetup = "${PN}-base" > >>+ > >>+FILES:initramfs-module-netsetup = "/init.d/83-netsetup" > >>+ > >>+do_install:append() { > >>+ install -m 0755 ${UNPACKDIR}/83-netsetup ${D}/init.d/83-netsetup > >>+} > >>diff --git a/meta-ti-bsp/recipes-ti/initramfs/packagegroup-ti-core-initramfs.bb b/meta-ti-bsp/recipes-ti/initramfs/packagegroup-ti-core-initramfs.bb > >>index a9eff847..ede0639d 100644 > >>--- a/meta-ti-bsp/recipes-ti/initramfs/packagegroup-ti-core-initramfs.bb > >>+++ b/meta-ti-bsp/recipes-ti/initramfs/packagegroup-ti-core-initramfs.bb > >>@@ -18,6 +18,8 @@ RDEPENDS:${PN} += "\ > >> netbase \ > >> base-files \ > >> base-passwd \ > >>+ dhcpcd \ > >>+ initramfs-module-netsetup \ > >> initramfs-framework-base \ > >> initramfs-module-udev \ > >> initramfs-module-nfsrootfs \ > >>-- > >>2.34.1
diff --git a/meta-ti-bsp/recipes-core/initramfs-scripts/initramfs-framework/83-netsetup b/meta-ti-bsp/recipes-core/initramfs-scripts/initramfs-framework/83-netsetup new file mode 100644 index 00000000..b71bc3b3 --- /dev/null +++ b/meta-ti-bsp/recipes-core/initramfs-scripts/initramfs-framework/83-netsetup @@ -0,0 +1,54 @@ +#!/bin/sh +# Configure network via DHCP before NFS root mount. Polls for an Ethernet +# interface with sleep 1 per iteration to allow the Ethernet driver deferred +# probe chain to settle after udev loads the modules. + +netsetup_enabled() { + [ "${bootparam_root}" = "/dev/nfs" ] || return 1 + return 0 +} + +netsetup_run() { + local iface timeout devtype + + # Extract interface from ip= kernel param (format: client:server:gw:mask:host:device:autoconf) + iface="" + case "${bootparam_ip}" in + dhcp|on|any|"") + ;; + *) + iface=$(echo "${bootparam_ip}" | cut -d: -f6) + ;; + esac + + udevadm trigger --action=add --subsystem-match=net + udevadm settle --timeout=10 + + # Poll up to 60 seconds for an Ethernet interface (ARPHRD_ETHER = type 1). + msg "netsetup: waiting for ethernet interface..." + timeout=60 + while [ "${timeout}" -gt 0 ]; do + if [ -n "${iface}" ] && [ -d "/sys/class/net/${iface}" ]; then + break + fi + for dev in /sys/class/net/*; do + [ -f "${dev}/type" ] || continue + devtype=$(cat "${dev}/type") + [ "${devtype}" = "1" ] || continue + iface=$(basename "${dev}") + break + done + [ -n "${iface}" ] && [ -d "/sys/class/net/${iface}" ] && break + sleep 1 + timeout=$((timeout - 1)) + done + + if [ -z "${iface}" ] || [ ! -d "/sys/class/net/${iface}" ]; then + msg "netsetup: no ethernet interface found after 60s, skipping DHCP" + return + fi + + msg "netsetup: configuring ${iface} via DHCP" + + dhcpcd --waitip "${iface}" +} diff --git a/meta-ti-bsp/recipes-core/initramfs-scripts/initramfs-framework_%.bbappend b/meta-ti-bsp/recipes-core/initramfs-scripts/initramfs-framework_%.bbappend new file mode 100644 index 00000000..c8955689 --- /dev/null +++ b/meta-ti-bsp/recipes-core/initramfs-scripts/initramfs-framework_%.bbappend @@ -0,0 +1,15 @@ +FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:" + +SUMMARY:initramfs-module-netsetup = "initramfs support for DHCP network setup before NFS root mount" + +SRC_URI:append = " file://83-netsetup" + +PACKAGES =+ "initramfs-module-netsetup" + +RDEPENDS:initramfs-module-netsetup = "${PN}-base" + +FILES:initramfs-module-netsetup = "/init.d/83-netsetup" + +do_install:append() { + install -m 0755 ${UNPACKDIR}/83-netsetup ${D}/init.d/83-netsetup +} diff --git a/meta-ti-bsp/recipes-ti/initramfs/packagegroup-ti-core-initramfs.bb b/meta-ti-bsp/recipes-ti/initramfs/packagegroup-ti-core-initramfs.bb index a9eff847..ede0639d 100644 --- a/meta-ti-bsp/recipes-ti/initramfs/packagegroup-ti-core-initramfs.bb +++ b/meta-ti-bsp/recipes-ti/initramfs/packagegroup-ti-core-initramfs.bb @@ -18,6 +18,8 @@ RDEPENDS:${PN} += "\ netbase \ base-files \ base-passwd \ + dhcpcd \ + initramfs-module-netsetup \ initramfs-framework-base \ initramfs-module-udev \ initramfs-module-nfsrootfs \
Add 83-netsetup, an initramfs-framework module that configures the network interface via DHCP before the NFS root mount. Needed when the Ethernet driver is a loadable module and the deferred probe chain requires time to settle after udev loads the modules. Also add dhcpcd to packagegroup-ti-core-initramfs to support DHCP configuration. Signed-off-by: Moteen Shah <m-shah@ti.com> --- .../initramfs-framework/83-netsetup | 54 +++++++++++++++++++ .../initramfs-framework_%.bbappend | 15 ++++++ .../packagegroup-ti-core-initramfs.bb | 2 + 3 files changed, 71 insertions(+) create mode 100644 meta-ti-bsp/recipes-core/initramfs-scripts/initramfs-framework/83-netsetup create mode 100644 meta-ti-bsp/recipes-core/initramfs-scripts/initramfs-framework_%.bbappend