Subject: Check for initrd-modules fails to detect when loaded module and on-disk module filename differ

From: Vagrant Cascadian <[email-masked]>
Date: Fri, 25 May 2018 14:14:15 -0700

The check for initrd-modules does not appear to handle when loaded
modules use underscores (e.g. "sdhci_of_arasan") but the on-disk modules
use dashes (e.g. "sdhci-of-arasan"). Some modules even use a mix of
underscores and dashes, just to keep it interesting.

The workaround is to use --skip-checks, but this may skip other
important checks.

Putting the "sdhci_of_arasan" in my system config, it fails because it
cannot find the kernel module on-disk by that name.

Ideally, it would find some way of mapping the loaded module names to
the on-disk module filenames, and detect appropriately, ideally
allowing either the on-disk filename or the loaded module name in the
config.

In my config:

  (initrd-modules (append (list ... "sdhci-of-arasan" ... ) %base-initrd-modules))

When I run:

  $ sudo -E guix system reconfigure /etc/config.scm

  <unknown location>: error: you may need these modules in the initrd for /dev/mmcblk1p1: sdhci_of_arasan
  hint: Try adding them to the `initrd-modules' field of your `operating-system' declaration, along these
  lines:

        (operating-system
          ;; ...
          (initrd-modules (append (list "sdhci_of_arasan")
                                  %base-initrd-modules)))

Since the on-disk module name uses "-" instead of underscores:

  $ find /gnu/store/*linux-libre* -name '*'arasan.ko
  /gnu/store/nilzipm6fpicvlzfv1w8yj1j8mm1xlan-linux-libre-4.16.11/lib/modules/4.16.11-gnu/kernel/drivers/mmc/host/sdhci-of-arasan.ko

But the loaded module uses "_" in the name:

  $ lsmod | grep arasan
  sdhci_of_arasan        20480  1
  cqhci                  24576  1 sdhci_of_arasan
  sdhci_pltfm            16384  1 sdhci_of_arasan
  sdhci                  61440  2 sdhci_pltfm,sdhci_of_arasan

live well,
  vagrant