Raspberry Pi 2 changes to make it boot.

It boots, but some things still don't work:
1) Installation of DTBs
2) Boot of initrd

Booting still needs a proper config.txt in /boot, which could probably be
managed by NixOS.

Changed files
+28 -7
nixos
modules
system
boot
loader
pkgs
os-specific
linux
firmware
raspberrypi
+12 -5
nixos/modules/system/boot/loader/raspberrypi/builder.sh
···
fi
local kernel=$(readlink -f $path/kernel)
-
# local initrd=$(readlink -f $path/initrd)
+
local initrd=$(readlink -f $path/initrd)
if test -n "@copyKernels@"; then
copyToKernelsDir $kernel; kernel=$result
-
# copyToKernelsDir $initrd; initrd=$result
+
copyToKernelsDir $initrd; initrd=$result
fi
echo $(readlink -f $path) > $outdir/$generation-system
echo $(readlink -f $path/init) > $outdir/$generation-init
cp $path/kernel-params $outdir/$generation-cmdline.txt
-
# echo $initrd > $outdir/$generation-initrd
+
echo $initrd > $outdir/$generation-initrd
echo $kernel > $outdir/$generation-kernel
if test $(readlink -f "$path") = "$default"; then
-
copyForced $kernel /boot/kernel.img
-
# copyForced $initrd /boot/initrd
+
if [ @version@ -eq 1 ]; then
+
copyForced $kernel /boot/kernel.img
+
else
+
copyForced $kernel /boot/kernel7.img
+
fi
+
copyForced $initrd /boot/initrd
cp "$(readlink -f "$path/init")" /boot/nixos-init
echo "`cat $path/kernel-params` init=$path/init" >/boot/cmdline.txt
···
copyForced $fwdir/bootcode.bin /boot/bootcode.bin
copyForced $fwdir/fixup.dat /boot/fixup.dat
copyForced $fwdir/fixup_cd.dat /boot/fixup_cd.dat
+
copyForced $fwdir/fixup_db.dat /boot/fixup_db.dat
copyForced $fwdir/start.elf /boot/start.elf
copyForced $fwdir/start_cd.elf /boot/start_cd.elf
+
copyForced $fwdir/start_db.elf /boot/start_db.elf
+
copyForced $fwdir/start_x.elf /boot/start_x.elf
# Remove obsolete files from /boot/old.
for fn in /boot/old/*linux* /boot/old/*initrd*; do
+14
nixos/modules/system/boot/loader/raspberrypi/raspberrypi.nix
···
with lib;
let
+
cfg = config.boot.loader.raspberryPi;
builder = pkgs.substituteAll {
src = ./builder.sh;
···
inherit (pkgs) bash;
path = [pkgs.coreutils pkgs.gnused pkgs.gnugrep];
firmware = pkgs.raspberrypifw;
+
version = cfg.version;
};
platform = pkgs.stdenv.platform;
···
'';
};
+
boot.loader.raspberryPi.version = mkOption {
+
default = 2;
+
type = types.int;
+
description = ''
+
'';
+
};
+
};
config = mkIf config.boot.loader.raspberryPi.enable {
system.build.installBootLoader = builder;
system.boot.loader.id = "raspberrypi";
system.boot.loader.kernelFile = platform.kernelTarget;
+
assertions = [
+
{ assertion = (cfg.version == 1 || cfg.version == 2);
+
message = "loader.raspberryPi.version should be 1 or 2";
+
}
+
];
};
}
+2 -2
pkgs/os-specific/linux/firmware/raspberrypi/default.nix
···
let
-
rev = "3ab17ac25e";
+
rev = "b7bbd3d1683e9f3bb11ef86b952adee71e83862f";
in stdenv.mkDerivation {
name = "raspberrypi-firmware-${rev}";
src = fetchurl {
url = "https://github.com/raspberrypi/firmware/archive/${rev}.tar.gz";
-
sha256 = "080va4zz858bwwgxam8zy58gpwjpxfg7v5h1q5b4cpbzjihsxcx9";
+
sha256 = "16wpwa1y3imd3la477b3rfbfypssvlh0zjdag3hgkm33aysizijp";
};
installPhase = ''