[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
04/10: linux-modules: Add "modules.devname" writer.
From: |
guix-commits |
Subject: |
04/10: linux-modules: Add "modules.devname" writer. |
Date: |
Fri, 16 Aug 2019 17:00:40 -0400 (EDT) |
civodul pushed a commit to branch master
in repository guix.
commit 2a693b69ca35ee942395e1adf458a666846881fc
Author: Ludovic Courtès <address@hidden>
Date: Mon Mar 12 10:43:15 2018 +0100
linux-modules: Add "modules.devname" writer.
* gnu/build/linux-modules.scm (aliases->device-tuple)
(write-module-device-database): New procedures.
(%not-dash): New variable.
Co-authored-by: Danny Milosavljevic <address@hidden>.
---
gnu/build/linux-modules.scm | 52 ++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 51 insertions(+), 1 deletion(-)
diff --git a/gnu/build/linux-modules.scm b/gnu/build/linux-modules.scm
index 9b9fc0d..a73ccaf 100644
--- a/gnu/build/linux-modules.scm
+++ b/gnu/build/linux-modules.scm
@@ -51,7 +51,8 @@
matching-modules
missing-modules
- write-module-alias-database))
+ write-module-alias-database
+ write-module-device-database))
;;; Commentary:
;;;
@@ -507,4 +508,53 @@ are required to access DEVICE."
aliases)))
aliases))))
+(define (aliases->device-tuple aliases)
+ "Traverse ALIASES, a list of module aliases, and search for
+\"char-major-M-N\", \"block-major-M-N\", or \"devname:\" aliases. When they
+are found, return a tuple (DEVNAME TYPE MAJOR MINOR), otherwise return #f."
+ (define (char/block-major? alias)
+ (or (string-prefix? "char-major-" alias)
+ (string-prefix? "block-major-" alias)))
+
+ (define (char/block-major->tuple alias)
+ (match (string-tokenize alias %not-dash)
+ ((type "major" (= string->number major) (= string->number minor))
+ (list (match type
+ ("char" "c")
+ ("block" "b"))
+ major minor))))
+
+ (let* ((devname (any (lambda (alias)
+ (and (string-prefix? "devname:" alias)
+ (string-drop alias 8)))
+ aliases))
+ (major/minor (match (find char/block-major? aliases)
+ (#f #f)
+ (str (char/block-major->tuple str)))))
+ (and devname major/minor
+ (cons devname major/minor))))
+
+(define %not-dash
+ (char-set-complement (char-set #\-)))
+
+(define (write-module-device-database directory)
+ "Traverse the '.ko' files in DIRECTORY and create the corresponding
+'modules.devname' file. This file contains information about modules that can
+be loaded on-demand, such as file system modules."
+ (define aliases
+ (filter-map (lambda (file)
+ (match (aliases->device-tuple (module-aliases file))
+ (#f #f)
+ (tuple (cons (file-name->module-name file) tuple))))
+ (find-files directory "\\.ko$")))
+
+ (call-with-output-file (string-append directory "/modules.devname")
+ (lambda (port)
+ (display "# Device nodes to trigger on-demand module loading.\n" port)
+ (for-each (match-lambda
+ ((module devname type major minor)
+ (format port "~a ~a ~a~a:~a~%"
+ module devname type major minor)))
+ aliases))))
+
;;; linux-modules.scm ends here
- branch master updated (b65bd33 -> a830d14), guix-commits, 2019/08/16
- 02/10: derivations: Delete duplicate inputs when computing derivation hash., guix-commits, 2019/08/16
- 03/10: linux-modules: Add "modules.alias" writer., guix-commits, 2019/08/16
- 10/10: gnu: Add libgit2-glib., guix-commits, 2019/08/16
- 01/10: channels: Add 'profile-channels'., guix-commits, 2019/08/16
- 04/10: linux-modules: Add "modules.devname" writer.,
guix-commits <=
- 08/10: gnu: txr: Update to 223., guix-commits, 2019/08/16
- 06/10: linux-modules: Define and use a module name database., guix-commits, 2019/08/16
- 05/10: linux-modules: Add 'load-linux-modules-from-directory'., guix-commits, 2019/08/16
- 09/10: gnu: gramps: Update to 5.0.2., guix-commits, 2019/08/16
- 07/10: gnu: wpa-supplicant: install documentation., guix-commits, 2019/08/16