diff --git a/doc/guix.texi b/doc/guix.texi index 46aceae068..167a0a84d6 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -26985,7 +26985,7 @@ The type of an entry in the bootloader menu. @item @code{label} The label to show in the menu---e.g., @code{"GNU"}. -@item @code{linux} +@item @code{linux} (default: @code{#f}) The Linux kernel image to boot, for example: @lisp @@ -27007,9 +27007,10 @@ field is ignored entirely. The list of extra Linux kernel command-line arguments---e.g., @code{("console=ttyS0")}. -@item @code{initrd} +@item @code{initrd} (default: @code{#f}) A G-Expression or string denoting the file name of the initial RAM disk to use (@pxref{G-Expressions}). + @item @code{device} (default: @code{#f}) The device where the kernel and initrd are to be found---i.e., for GRUB, @dfn{root} for this menu entry (@pxref{root,,, grub, GNU GRUB manual}). @@ -27020,6 +27021,28 @@ the bootloader will search the device containing the file specified by the @code{linux} field (@pxref{search,,, grub, GNU GRUB manual}). It must @emph{not} be an OS device name such as @file{/dev/sda1}. +@item @code{multiboot-kernel} (default: @code{#f}) +The kernel to boot in Multiboot-mode (@pxref{multiboot,,, grub, GNU GRUB +manual}). When this field is set, a Multiboot menu-entry is generated. +For example: + +@lisp +(file-append mach "/boot/gnumach") +@end lisp + +@item @code{multiboot-arguments} (default: @code{()}) +The list of extra command-line arguments for the multiboot-kernel. + +@item @code{multiboot-modules} (default: @code{()}) +The list of commands for loading Multiboot modules. For example: + +@lisp +(list (list (file-append hurd "/hurd/ext2fs.static") "ext2fs" + @dots{}) + (list (file-append libc "/lib/ld.so.1") "exec" + @dots{})) +@end lisp + @end table @end deftp diff --git a/gnu/bootloader.scm b/gnu/bootloader.scm index 668caa7fc3..2eebb8e9d9 100644 --- a/gnu/bootloader.scm +++ b/gnu/bootloader.scm @@ -3,6 +3,7 @@ ;;; Copyright © 2017, 2020 Mathieu Othacehe ;;; Copyright © 2017 Leo Famulari ;;; Copyright © 2019 Ludovic Courtès +;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen ;;; ;;; This file is part of GNU Guix. ;;; @@ -33,6 +34,9 @@ (define-module (gnu bootloader) menu-entry-linux-arguments menu-entry-initrd menu-entry-device-mount-point + menu-entry-multiboot-kernel + menu-entry-multiboot-arguments + menu-entry-multiboot-modules menu-entry->sexp sexp->menu-entry @@ -77,22 +81,41 @@ (define-record-type* (default #f)) (device-mount-point menu-entry-device-mount-point (default #f)) - (linux menu-entry-linux) + (linux menu-entry-linux + (default #f)) (linux-arguments menu-entry-linux-arguments (default '())) ; list of string-valued gexps - (initrd menu-entry-initrd)) ; file name of the initrd as a gexp + (initrd menu-entry-initrd ; file name of the initrd as a gexp + (default #f)) + (multiboot-kernel menu-entry-multiboot-kernel + (default #f)) + (multiboot-arguments menu-entry-multiboot-arguments + (default '())) ; list of string-valued gexps + (multiboot-modules menu-entry-multiboot-modules + (default '()))) ; list of multiboot commands, where + ; a command is a list of (define (menu-entry->sexp entry) "Return ENTRY serialized as an sexp." (match entry - (($ label device mount-point linux linux-arguments initrd) + (($ label device mount-point linux linux-arguments initrd #f + ()) `(menu-entry (version 0) (label ,label) (device ,device) (device-mount-point ,mount-point) (linux ,linux) (linux-arguments ,linux-arguments) - (initrd ,initrd))))) + (initrd ,initrd))) + (($ label device mount-point #f () #f + multiboot-kernel multiboot-arguments multiboot-modules) + `(menu-entry (version 0) + (label ,label) + (device ,device) + (device-mount-point ,mount-point) + (multiboot-kernel ,multiboot-kernel) + (multiboot-arguments ,multiboot-arguments) + (multiboot-modules ,multiboot-modules))))) (define (sexp->menu-entry sexp) "Turn SEXP, an sexp as returned by 'menu-entry->sexp', into a @@ -109,7 +132,20 @@ (define (sexp->menu-entry sexp) (device-mount-point mount-point) (linux linux) (linux-arguments linux-arguments) - (initrd initrd))))) + (initrd initrd))) + (('menu-entry ('version 0) + ('label label) ('device device) + ('device-mount-point mount-point) + ('multiboot-kernel multiboot-kernel) + ('multiboot-arguments multiboot-arguments) + ('multiboot-modules multiboot-modules) _ ...) + (menu-entry + (label label) + (device device) + (device-mount-point mount-point) + (multiboot-kernel multiboot-kernel) + (multiboot-arguments multiboot-arguments) + (multiboot-modules multiboot-modules))))) ;;;