aboutsummaryrefslogtreecommitdiff
path: root/nixpkgs/nixos/modules/installer/cd-dvd/sd-image-raspberrypi.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/nixos/modules/installer/cd-dvd/sd-image-raspberrypi.nix')
-rw-r--r--nixpkgs/nixos/modules/installer/cd-dvd/sd-image-raspberrypi.nix52
1 files changed, 52 insertions, 0 deletions
diff --git a/nixpkgs/nixos/modules/installer/cd-dvd/sd-image-raspberrypi.nix b/nixpkgs/nixos/modules/installer/cd-dvd/sd-image-raspberrypi.nix
new file mode 100644
index 00000000000..2a131d9ce98
--- /dev/null
+++ b/nixpkgs/nixos/modules/installer/cd-dvd/sd-image-raspberrypi.nix
@@ -0,0 +1,52 @@
+# To build, use:
+# nix-build nixos -I nixos-config=nixos/modules/installer/cd-dvd/sd-image-raspberrypi.nix -A config.system.build.sdImage
+{ config, lib, pkgs, ... }:
+
+let
+ extlinux-conf-builder =
+ import ../../system/boot/loader/generic-extlinux-compatible/extlinux-conf-builder.nix {
+ pkgs = pkgs.buildPackages;
+ };
+in
+{
+ imports = [
+ ../../profiles/base.nix
+ ../../profiles/installation-device.nix
+ ./sd-image.nix
+ ];
+
+ boot.loader.grub.enable = false;
+ boot.loader.generic-extlinux-compatible.enable = true;
+
+ boot.consoleLogLevel = lib.mkDefault 7;
+ boot.kernelPackages = pkgs.linuxPackages_rpi;
+
+ sdImage = {
+ populateFirmwareCommands = let
+ configTxt = pkgs.writeText "config.txt" ''
+ # Prevent the firmware from smashing the framebuffer setup done by the mainline kernel
+ # when attempting to show low-voltage or overtemperature warnings.
+ avoid_warnings=1
+
+ [pi0]
+ kernel=u-boot-rpi0.bin
+
+ [pi1]
+ kernel=u-boot-rpi1.bin
+ '';
+ in ''
+ (cd ${pkgs.raspberrypifw}/share/raspberrypi/boot && cp bootcode.bin fixup*.dat start*.elf $NIX_BUILD_TOP/firmware/)
+ cp ${pkgs.ubootRaspberryPiZero}/u-boot.bin firmware/u-boot-rpi0.bin
+ cp ${pkgs.ubootRaspberryPi}/u-boot.bin firmware/u-boot-rpi1.bin
+ cp ${configTxt} firmware/config.txt
+ '';
+ populateRootCommands = ''
+ mkdir -p ./files/boot
+ ${extlinux-conf-builder} -t 3 -c ${config.system.build.toplevel} -d ./files/boot
+ '';
+ };
+
+ # the installation media is also the installation target,
+ # so we don't want to provide the installation configuration.nix.
+ installer.cloneConfig = false;
+}