diff options
author | Ludovic Courtès <ludo@gnu.org> | 2014-11-28 00:01:29 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2014-11-28 00:10:28 +0100 |
commit | 600c285b6345d8b0cc04f9e92e47ad5bcd437948 (patch) | |
tree | 2c60e27f11c3aea4270aeb929cb7c788e86620e8 /gnu/system | |
parent | fcaa5f44a197ab24f288d319dbdd27e2745bb052 (diff) |
linux-initrd: Copy modules and their dependencies to the initrd.
* gnu/system/linux-initrd.scm (flat-linux-module-directory)[build-exp]:
Add 'lookup' procedure. Use 'recursive-module-dependencies' to
compute the list of modules to copy.
Adjust #:modules parameter.
Diffstat (limited to 'gnu/system')
-rw-r--r-- | gnu/system/linux-initrd.scm | 40 |
1 files changed, 28 insertions, 12 deletions
diff --git a/gnu/system/linux-initrd.scm b/gnu/system/linux-initrd.scm index 3279172da7..71aba1e233 100644 --- a/gnu/system/linux-initrd.scm +++ b/gnu/system/linux-initrd.scm @@ -92,7 +92,9 @@ MODULES and taken from LINUX." (define build-exp #~(begin (use-modules (ice-9 match) (ice-9 regex) - (guix build utils)) + (srfi srfi-1) + (guix build utils) + (gnu build linux-modules)) (define (string->regexp str) ;; Return a regexp that matches STR exactly. @@ -101,21 +103,35 @@ MODULES and taken from LINUX." (define module-dir (string-append #$linux "/lib/modules")) + (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))))) + + (define modules + (let ((modules (map lookup '#$modules))) + (append modules + (recursive-module-dependencies modules + #:lookup-module lookup)))) + (mkdir #$output) (for-each (lambda (module) - (match (find-files module-dir (string->regexp module)) - ((file) - (format #t "copying '~a'...~%" file) - (copy-file file (string-append #$output "/" module))) - (() - (error "module not found" module module-dir)) - ((_ ...) - (error "several modules by that name" - module module-dir)))) - '#$modules))) + (format #t "copying '~a'...~%" module) + (copy-file module + (string-append #$output "/" + (basename module)))) + (delete-duplicates modules)))) (gexp->derivation "linux-modules" build-exp - #:modules '((guix build utils)))) + #:modules '((guix build utils) + (guix elf) + (gnu build linux-modules)))) (define (file-system->spec fs) "Return a list corresponding to file-system FS that can be passed to the |