summaryrefslogtreecommitdiffstats
path: root/nixos/modules/system
diff options
context:
space:
mode:
authorwedens <kirill.wedens@gmail.com>2020-01-25 12:52:01 +0700
committerwedens <wedens@eldis.ru>2020-02-05 11:12:55 +0700
commit7b5550a3fc72cc3c41c4143732502a0787cb17a0 (patch)
treea3302e10db1ef6b5caaa6664dc85dddb71c6139c /nixos/modules/system
parentf56ca2599d9f7ea9b7cae2a97f6cce41d96b664e (diff)
nixos/grub: make memtest work with EFI
Memtest86+ doesn't support EFI, so unfree Memtest86 is used when EFI support is enabled (systemd-boot currently also uses Memtest86 when memtest is enabled).
Diffstat (limited to 'nixos/modules/system')
-rw-r--r--nixos/modules/system/boot/loader/grub/memtest.nix57
1 files changed, 40 insertions, 17 deletions
diff --git a/nixos/modules/system/boot/loader/grub/memtest.nix b/nixos/modules/system/boot/loader/grub/memtest.nix
index 94e5a14174b0..71e50dd0577e 100644
--- a/nixos/modules/system/boot/loader/grub/memtest.nix
+++ b/nixos/modules/system/boot/loader/grub/memtest.nix
@@ -1,4 +1,4 @@
-# This module adds Memtest86+ to the GRUB boot menu.
+# This module adds Memtest86+/Memtest86 to the GRUB boot menu.
{ config, lib, pkgs, ... }:
@@ -6,6 +6,7 @@ with lib;
let
memtest86 = pkgs.memtest86plus;
+ efiSupport = config.boot.loader.grub.efiSupport;
cfg = config.boot.loader.grub.memtest86;
in
@@ -18,8 +19,11 @@ in
default = false;
type = types.bool;
description = ''
- Make Memtest86+, a memory testing program, available from the
- GRUB boot menu.
+ Make Memtest86+ (or MemTest86 if EFI support is enabled),
+ a memory testing program, available from the
+ GRUB boot menu. MemTest86 is an unfree program, so
+ this requires <literal>allowUnfree</literal> to be set to
+ <literal>true</literal>.
'';
};
@@ -75,19 +79,38 @@ in
};
};
- config = mkIf cfg.enable {
-
- boot.loader.grub.extraEntries =
- if config.boot.loader.grub.version == 2 then
- ''
- menuentry "Memtest86+" {
- linux16 @bootRoot@/memtest.bin ${toString cfg.params}
- }
- ''
- else
- throw "Memtest86+ is not supported with GRUB 1.";
-
- boot.loader.grub.extraFiles."memtest.bin" = "${memtest86}/memtest.bin";
+ config = mkMerge [
+ (mkIf (cfg.enable && efiSupport) {
+ assertions = [
+ {
+ assertion = cfg.params == [];
+ message = "Parameters are not available for MemTest86";
+ }
+ ];
+
+ boot.loader.grub.extraFiles = {
+ "memtest86.efi" = "${pkgs.memtest86-efi}/BOOTX64.efi";
+ };
- };
+ boot.loader.grub.extraEntries = ''
+ menuentry "Memtest86" {
+ chainloader /memtest86.efi
+ }
+ '';
+ })
+
+ (mkIf (cfg.enable && !efiSupport) {
+ boot.loader.grub.extraEntries =
+ if config.boot.loader.grub.version == 2 then
+ ''
+ menuentry "Memtest86+" {
+ linux16 @bootRoot@/memtest.bin ${toString cfg.params}
+ }
+ ''
+ else
+ throw "Memtest86+ is not supported with GRUB 1.";
+
+ boot.loader.grub.extraFiles."memtest.bin" = "${memtest86}/memtest.bin";
+ })
+ ];
}