[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[bug#30604] [PATCH v9 2/7] linux-modules: Add module-aliases->module-fil
From: |
Danny Milosavljevic |
Subject: |
[bug#30604] [PATCH v9 2/7] linux-modules: Add module-aliases->module-file-names. |
Date: |
Sun, 4 Mar 2018 02:09:09 +0100 |
* gnu/build/linux-modules.scm (module-aliases->module-file-names): New
procedure.
---
gnu/build/linux-modules.scm | 55 +++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 55 insertions(+)
diff --git a/gnu/build/linux-modules.scm b/gnu/build/linux-modules.scm
index 0aaf2ff6f..f6bb0512b 100644
--- a/gnu/build/linux-modules.scm
+++ b/gnu/build/linux-modules.scm
@@ -21,6 +21,7 @@
#:use-module (guix elf)
#:use-module (guix glob)
#:use-module (guix build syscalls)
+ #:use-module (guix build utils) ; find-files
#:use-module (rnrs io ports)
#:use-module (rnrs bytevectors)
#:use-module (srfi srfi-1)
@@ -28,9 +29,12 @@
#:use-module (ice-9 vlist)
#:use-module (ice-9 match)
#:use-module (ice-9 rdelim)
+ #:use-module (ice-9 regex)
+ #:use-module (ice-9 ftw)
#:export (dot-ko
ensure-dot-ko
module-aliases
+ module-aliases->module-file-names
module-dependencies
recursive-module-dependencies
modules-loaded
@@ -438,4 +442,55 @@ ALIAS is a string like \"scsi:t-0x00\" as returned by
(format port "~a ~a ~a~a:~a\n" module devname
"b" major minor)))))))) aliases))))
+(define (module-aliases->module-file-names linux aliases)
+ "Resolve ALIASES to module file names, including their dependencies (which
will appear
+first). Each alias will map to a list of module file names.
+LINUX is the directory containing \"lib\"."
+ (define (string->regexp str)
+ ;; Return a regexp that matches STR exactly.
+ (string-append "^" (regexp-quote str) "$"))
+
+ (define module-dir
+ (string-append linux "/lib/modules"))
+
+ (define (find-only-entry directory)
+ (match (scandir directory)
+ (("." ".." basename)
+ (string-append directory "/" basename))))
+
+ (define linux-release-module-directory
+ (find-only-entry module-dir))
+
+ (define known-module-aliases*
+ (known-module-aliases
+ (string-append linux-release-module-directory
+ "/modules.alias")))
+ (define (resolve-alias alias)
+ "If possible, resolve ALIAS to a list of module names.
+Otherwise return just ALIAS as possible module names."
+ (match (delete-duplicates (matching-modules alias
+ known-module-aliases*))
+ (()
+ (list alias))
+ (items
+ items)))
+
+ (define (lookup module)
+ (let ((name (ensure-dot-ko module)))
+ (match (find-files module-dir (string->regexp name))
+ ((file)
+ file)
+ (()
+ (error "module not found" name module-dir))
+ ((_ ...)
+ (error "several modules by that name"
+ name module-dir)))))
+ (append-map (lambda (alias)
+ (let ((modules (map lookup (resolve-alias alias))))
+ (append (recursive-module-dependencies modules
+ #:lookup-module
+ lookup)
+ modules)))
+ aliases))
+
;;; linux-modules.scm ends here
- [bug#30604] [PATCH v10 1/6] linux-modules: Add "modules.alias" writer., (continued)
- [bug#30604] [PATCH v10 1/6] linux-modules: Add "modules.alias" writer., Ludovic Courtès, 2018/03/12
- [bug#30604] [PATCH v8 3/7] linux-boot: Load kernel modules only when the hardware is present., Danny Milosavljevic, 2018/03/09
- [bug#30604] [PATCH v9 0/7] Load Linux module only when supported hardware is present., Danny Milosavljevic, 2018/03/03
- [bug#30604] [PATCH v9 7/7] linux-initrd: Use module-aliases->module-file-names, too., Danny Milosavljevic, 2018/03/03
- [bug#30604] [PATCH v9 7/7] linux-initrd: Use module-aliases->module-file-names, too., Danny Milosavljevic, 2018/03/09
- [bug#30604] [PATCH v9 5/7] vm: Allow qemu-image builder to load Linux kernel modules., Danny Milosavljevic, 2018/03/03
- [bug#30604] [PATCH v9 3/7] linux-initrd: Provide pure-Guile modprobe., Danny Milosavljevic, 2018/03/03
- [bug#30604] [PATCH v9 3/7] linux-initrd: Provide pure-Guile modprobe., Danny Milosavljevic, 2018/03/11
- [bug#30604] [PATCH v9 3/7] linux-initrd: Provide pure-Guile modprobe., Ludovic Courtès, 2018/03/12
- [bug#30604] [PATCH v9 3/7] linux-initrd: Provide pure-Guile modprobe., Danny Milosavljevic, 2018/03/12
- [bug#30604] [PATCH v9 2/7] linux-modules: Add module-aliases->module-file-names.,
Danny Milosavljevic <=
- [bug#30604] [PATCH v9 1/7] linux-modules: Add "modules.devname" and "modules.alias" writer., Danny Milosavljevic, 2018/03/03
- [bug#30604] [PATCH v9 6/7] vm: Make the virtio-blk uniquely identifiable in /sys., Danny Milosavljevic, 2018/03/03
- [bug#30604] [PATCH v9 4/7] linux-boot: Load kernel modules only when the hardware is present., Danny Milosavljevic, 2018/03/03