[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