[Buildroot] [PATCH 4/4] package/busybox: add service to load kernel modules at boot
Angelo Compagnucci
angelo at amarulasolutions.com
Tue Jun 28 07:56:33 UTC 2022
On Sat, Jun 25, 2022 at 7:02 AM Andreas Ziegler <br015 at umbiko.net> wrote:
> Hi Angelo,
>
> On 2022-06-21 13:31, Angelo Compagnucci <angelo at amarulasolutions.com>
> wrote:
>
> >>
> >>
> >> On 20/06/2022 23:40, Angelo Compagnucci wrote:
> >> > In cases where no hotplug is available (by choice or by the lack of a
> >> > proper hotplug method for a device), this service can be used to load
> >> > kernel module drivers by reading the /etc/modules file.
> >>
> >> Do you have a concrete example of something that needs this? It's
> >> kind
> >> of a
> >> hack for e.g. a device connected to a serial port that isn't described
> >> in
> >> DT
> >> (e.g. on an x86 platform), right?
> >>
> >
> > Wifi card connected on SDIO with an out of tree kernel module.
> >
> >
> >> I'm not altogether sure if it is worth making an init script for
> >> that.
> >>
> >
> > Most distros out there have the /etc/modules loaded at boot time.
> >
> >
> >> Also, this would belong to the initscripts package because it would
> >> also
> >> be
> >> needed if busybox isn't used at all (it would of course require kmod).
> >>
> >
> > Right, I'll fix it
> >
> >
> >>
> >>
> >> >
> >> > Signed-off-by: Angelo Compagnucci <angelo at amarulasolutions.com>
> >> > ---
> >> > package/busybox/S02modules | 56
> ++++++++++++++++++++++++++++++++++++++
> >> > package/busybox/busybox.mk | 2 ++
> >> > 2 files changed, 58 insertions(+)
> >> > create mode 100644 package/busybox/S02modules
> >> >
> >> > diff --git a/package/busybox/S02modules b/package/busybox/S02modules
>
> S02 is a bit early, [mu]dev use S10.
>
Can you point me to these [mu]dev scripts?
> >> > new file mode 100644
> >> > index 0000000000..f25712e1ca
> >> > --- /dev/null
> >> > +++ b/package/busybox/S02modules
> >> > @@ -0,0 +1,56 @@
> >> > +#!/bin/sh
> >> > +
> >> > +MODULES="modules"
> >> > +
> >> > +load_unload() {
> >> > + [ ! -f /etc/${MODULES} ] && echo ' OK' && exit 0
> >> > +
> >> > + while read module args; do
> >> > +
> >> > + case "$module" in
> >> > + ""|"#"*) continue ;;
> >> > + esac
> >> > +
> >> > + if [ "$1" = "load" ]; then
> >> > + modprobe -q ${module} ${args} >/dev/null && \
> >> > + printf ' %s success,' "$module" ||
> >> > + printf ' %s failed,' "$module"
> >> > + else
> >> > + rmmod ${module} >/dev/null
> >> > + fi
> >> > +
> >> > + done < /etc/${MODULES}
> >> > +}
> >> > +
> >> > +start() {
> >> > + printf 'Starting %s:' "$MODULES"
> >> > +
> >> > + load_unload load
> >> > +
> >> > + echo ' OK'
> >> > +}
> >> > +
> >> > +stop() {
> >> > + printf 'Stopping %s: ' "$MODULES"
> >> > +
> >> > + load_unload unload
> >> > +
> >> > + echo 'OK'
> >> > +}
> >> > +
> >> > +restart() {
> >> > + stop
> >> > + sleep 1
> >> > + start
> >> > +}
> >> > +
> >> > +case "$1" in
> >> > + start|stop|restart)
> >> > + "$1";;
> >> > + reload)
> >> > + # Restart, since there is no true "reload" feature.
> >> > + restart;;
> >> > + *)
> >> > + echo "Usage: $0 {start|stop|restart|reload}"
> >> > + exit 1
> >> > +esac
> >> > diff --git a/package/busybox/busybox.mk b/package/busybox/busybox.mk
> >> > index 3e49de0a84..40490e866a 100644
> >> > --- a/package/busybox/busybox.mk
> >> > +++ b/package/busybox/busybox.mk
> >> > @@ -382,6 +382,8 @@ define BUSYBOX_INSTALL_TARGET_CMDS
> >> > $(BUSYBOX_INSTALL_UDHCPC_SCRIPT)
> >> > $(BUSYBOX_INSTALL_ZCIP_SCRIPT)
> >> > $(BUSYBOX_INSTALL_MDEV_CONF)
> >> > + $(INSTALL) -m 0755 -D package/busybox/S02modules \
> >> > + $(TARGET_DIR)/etc/init.d/S02modules;
>
> Since this is intended for systems without dynamic device handling, you
> might use an optional script, similar to BUSYBOX_INSTALL_*_SCRIPT:
>
> # Copy S22modules to /etc/init.d if no dynamic device handling is used
> ifeq ($(BR2_ROOTFS_DEVICE_CREATION_STATIC),y)
> define BUSYBOX_INSTALL_MODULES_SCRIPT
> $(INSTALL) -m 0755 -D package/busybox/S22modules \
> $(TARGET_DIR)/etc/init.d/S22modules;
> endef # BUSYBOX_INSTALL_MODULES_SCRIPT
>
> Probably a default /etc/modules could also be installed.
>
Yes, but it is not the only usecase here. A usecase could be a userspace
software that needs a special kernel module to be loaded on boot or a
hardware which cannot be hotplugged.
My usecase was for a wifi card connected via sdio running only with an out
of tree kernel module. The wifi card is soldered and doesn't have a CS to
trigger an hotplug event and the only sensible way I found to load the
module at boot was to have a proper way to load modules at boot.
I'm not aware normal distros does so much tinkering about loading a kernel
module at boot: /etc/modules or the newly /etc/modules-load.d/ for systemd
are widely adopted and are usually working out of the box.
>
> Kind regards,
> Andreas
>
> >>
> >> This is a sysvinit script, so it should be installed in
> >> BUSYBOX_INSTALL_INIT_SYSV.
> >>
> >>
> >>
> >> Regards,
> >> Arnout
> >>
> >> > endef
> >> >
> >> > # Install the sysvinit scripts, for the moment, but not those that
> >> already
> >>
> >
> >
> > --
> >
> > Angelo Compagnucci
> >
> > Software Engineer
> >
> > angelo at amarulasolutions.com
> > __________________________________
> > Amarula Solutions SRL
> >
> > Via le Canevare 30, 31100 Treviso, Veneto, IT
> >
> > T. +39 (0)42 243 5310
> > info at amarulasolutions.com
> >
> > www.amarulasolutions.com
> > [`as] https://www.amarulasolutions.com|
>
--
Angelo Compagnucci
Software Engineer
angelo at amarulasolutions.com
__________________________________
Amarula Solutions SRL
Via le Canevare 30, 31100 Treviso, Veneto, IT
T. +39 (0)42 243 5310
info at amarulasolutions.com
www.amarulasolutions.com
[`as] https://www.amarulasolutions.com|
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.buildroot.org/pipermail/buildroot/attachments/20220628/81b534e4/attachment-0001.html>
More information about the buildroot
mailing list