unofficial mirror of bug-guix@gnu.org 
 help / color / mirror / code / Atom feed
From: Vagrant Cascadian <vagrant@debian.org>
To: 48266@debbugs.gnu.org
Subject: bug#48266: support dynamic loading of modules from initrd
Date: Thu, 06 May 2021 13:56:41 -0700	[thread overview]
Message-ID: <87pmy3shrq.fsf@yucca> (raw)

[-- Attachment #1: Type: text/plain, Size: 4528 bytes --]

There should be an option to support dynamic loading of modules from the
initrd.

I recently pushed some changes to use the "linux-libre" kernel with
pinebook pro:

  https://git.savannah.gnu.org/cgit/guix.git/commit/?id=d330d63a29f35ebcbebce19b13d49c69d38a5815

But in order to even boot, I need to add a lot of modules to
initrd-modules:

  (initrd-modules 
    (append
      (list
       "rtc-rk808"
       "dw_mmc"
       "dw_mmc-pltfm"
       "dw_mmc-rockchip"
       "joydev"
       "bluetooth"
       "jitterentropy_rng"
       "hid_generic"
       "videodev"
       "ghash_ce"
       "gf128mul"
       "ansi_cprng"
       "mc"
       "sha2_ce"
       "usbhid"
       "panfrost"
       "ecdh_generic"
       ;; "fusb302"
       "ofpart"
       ;; "tcpm"
       "hid"
       "ecc"
       "evdev"
       "leds_gpio"
       "io_domain"
       "dw_wdt"
       ;; "rockchip-thermal"
       "cw2015_battery"
       "pwm-rockchip"
       ;; "gpio_charger"
       "cpufreq_dt"
       "configfs"
       "xhci-plat-hcd"
       "xhci-hcd"
       "rk808-regulator"
       "clk-rk808"
       "udc-core"
       "ulpi"
       "fan53555"
       "rk808"
       "pwm-regulator"
       "fixed"
       "gpio_keys"
       "cec"
       ;; "phy-rockchip-typec"
       "phy-rockchip-emmc"
       "phy-rockchip-inno-usb2"
       ;; "analogix-dp"
       "sdhci-of-arasan"
       "sdhci-pltfm"
       "cqhci"
       "drm_kms_helper"
       "ohci-platform"
       "ohci-hcd"
       "ehci-platform"
       "panel-simple"
       "ehci-hcd"
       "sdhci"
       "drm"
       "i2c-rk3x"
       "usbcore"
       "pl330"
       "pwm_bl"
       "dwc3"
       )
  %base-initrd-modules))

Initially, I tried adding just the obviously mmc related modules, but
this gave me guile prompt from the initramfs as it failed to find the
rootfs. Notably, even with the above list, I still need to explore
additional modules to load in order to get the display and keyboard to
work from the initramfs, in case I wanted to use this with encrypted
rootfs...

The above list of modules could almost certainly be trimmed, but even
getting a bootable system for pinebook pro took about 20 tries, and the
process of defining the modules is further complicated by several
factors...

* The filesystem names of the modules (e.g. dw_mmc-pltfm) do not
  necessarily match the runtime name from lsmod (e.g. dw_mmc_pltfm).
  This becomes a good deal of trial and error to figure out which
  modules to add.

* One needs to manually resolve the soft and hard dependencies of the
  modules, and ensure they are loaded, and include them in the list.

* If upstream changes the module name (which does happen from time to
  time), you have to update the system config.scm to the new module
  names.

* If some functionality changes from a module to a built-in, or
  vice-versa, the system config.scm needs manual updating.

* Switching system between two different arm boards potentially requires
  entirely different lists of modules.


Rather than handling modules one at a time, I would propose to at least
add an option that can add whole directory trees of modules to the
initrd (e.g.  kernel/drivers/usb/)... and then use modprobe (or udev?)
to handle the dependencies. Maybe opt-in at first, but longer-term,
explore making it default?


In Debian, adding modules to the intird is done in initramfs-tools:

  https://salsa.debian.org/kernel-team/initramfs-tools/-/blob/f350f122a244c60f91a3e3e5f8b58f9cb75308b6/hook-functions#L599

As for which modules to load at runtime, initramfs-tools uses udev;
maybe that could be integrated into the guix initramfs as an option?

Obviously, adding more modules than a strict bare minimum to the initrd
will increase boot times a bit, and adding further dependencies
(modprobe, udev) to the initrd will add to that even more, but the
current hard-coded list of modules to load, that you can extend with
another hard-coded list, is a bit painful when trying to get a new
system working...


Maybe the Guix way to do this is to write some guile code that can
generate the list of modules to include in the initrd at build time? But
that still doesn't resolve the dynamic loading of modules at runtime,
and it would be impractical to load *all* the modules at runtime... and
maybe impractical to re-implement modprobe and/or udev in guile?


Well, thanks for considering!


live well,
  vagrant

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 227 bytes --]

             reply	other threads:[~2021-05-06 20:57 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-06 20:56 Vagrant Cascadian [this message]
2021-05-11 21:08 ` bug#48266: support dynamic loading of modules from initrd Ludovic Courtès
2021-05-11 22:35   ` Vagrant Cascadian

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://guix.gnu.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87pmy3shrq.fsf@yucca \
    --to=vagrant@debian.org \
    --cc=48266@debbugs.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).