From 28498601bb6038245e64d397f99c45fc69b4a938 Mon Sep 17 00:00:00 2001 From: Travis Staton Date: Tue, 30 Aug 2022 09:26:21 -0400 Subject: [PATCH] update dependencies, more flexible kernel config --- overlay/default.nix | 84 +++++++++++++++++++++++++++++++++----- overlay/libcamera-apps.nix | 6 +-- rpi/default.nix | 2 +- rpi/device-tree.nix | 17 +++++--- sd-image/default.nix | 2 +- 5 files changed, 89 insertions(+), 22 deletions(-) diff --git a/overlay/default.nix b/overlay/default.nix index c2e7310..cc91487 100644 --- a/overlay/default.nix +++ b/overlay/default.nix @@ -1,13 +1,17 @@ final: prev: let - rpi-kernel = { kernel, version, fw }: + rpi-kernel = { kernel, version, fw, extraConfig ? null }: let new-kernel = prev.linux_rpi4.override { argsOverride = { src = kernel; inherit version; modDirVersion = version; - }; + } // (if builtins.isNull extraConfig then + { } + else { + inherit extraConfig; + }); }; new-fw = prev.raspberrypifw.overrideAttrs (oldfw: { src = fw; }); version-slug = builtins.replaceStrings [ "." ] [ "_" ] version; @@ -18,15 +22,15 @@ let rpi-kernels = builtins.foldl' (b: a: b // rpi-kernel a) { }; in { # newer version of libcamera - libcamera = prev.libcamera.overrideAttrs (old: { - src = prev.fetchgit { - url = "https://git.libcamera.org/libcamera/libcamera.git"; - rev = "44d59841e1ce59042b8069b8078bc9f7b1bfa73b"; - sha256 = "1nzkvy2y772ak9gax456ws2fmjc9ncams0m1w27h1rzpxn5yphqr"; - }; - mesonFlags = [ "-Dv4l2=true" "-Dqcam=disabled" "-Dlc-compliance=disabled" ]; - patches = (old.patches or [ ]) ++ [ ./libcamera.patch ]; - }); + # libcamera = prev.libcamera.overrideAttrs (old: { + # src = prev.fetchgit { + # url = "https://git.libcamera.org/libcamera/libcamera.git"; + # rev = "44d59841e1ce59042b8069b8078bc9f7b1bfa73b"; + # sha256 = "1nzkvy2y772ak9gax456ws2fmjc9ncams0m1w27h1rzpxn5yphqr"; + # }; + # mesonFlags = [ "-Dv4l2=true" "-Dqcam=disabled" "-Dlc-compliance=disabled" ]; + # patches = (old.patches or [ ]) ++ [ ./libcamera.patch ]; + # }); libcamera-apps = final.callPackage ./libcamera-apps.nix { }; @@ -42,7 +46,49 @@ in { }; }; + raspberrypiWirelessFirmware = prev.raspberrypiWirelessFirmware.overrideAttrs + (old: { + version = "2023-01-19"; + srcs = [ + (prev.fetchFromGitHub { + name = "bluez-firmware"; + owner = "RPi-Distro"; + repo = "bluez-firmware"; + rev = "9556b08ace2a1735127894642cc8ea6529c04c90"; + sha256 = "gKGK0XzNrws5REkKg/JP6SZx3KsJduu53SfH3Dichkc="; + }) + (prev.fetchFromGitHub { + name = "firmware-nonfree"; + owner = "RPi-Distro"; + repo = "firmware-nonfree"; + rev = "8e349de20c8cb5d895b3568777ec53cbb333398f"; + sha256 = "45/FnaaZTEG6jLmbaXohpNpS6BEZu3DBDHqquq8ukXc="; + }) + ]; + }); + } // (rpi-kernels [ + { + version = "5.10.110"; + kernel = prev.fetchFromGitHub { + owner = "raspberrypi"; + repo = "linux"; + rev = "8e1110a580887f4b82303b9354c25d7e2ff5860e"; + sha256 = "G0XLIpiuszbHKetBQPSBxnyPggFDxUJ4B8F5poS9Tfg="; + fetchSubmodules = true; + }; + extraConfig = '' + DRM_AST n + DRM_AMDGPU n + DRM_TIDSS n + ''; + fw = prev.fetchFromGitHub { + owner = "raspberrypi"; + repo = "firmware"; + rev = "e1e3dc004ec45c0a6ab3f32eb02c1e0c8846796c"; + sha256 = "Smn3wQ81zzmj+Wpt2Xwby+0Zt7YGhmhlaEscbaZaMmI="; + }; + } { version = "5.15.36"; kernel = prev.fetchFromGitHub { @@ -91,4 +137,20 @@ in { sha256 = "9nM0GbKZHiGOM5C5g9WFnFC0ONQ+g+pbPBl5djOCiLE="; }; } + { + version = "5.15.87"; + kernel = prev.fetchFromGitHub { + owner = "raspberrypi"; + repo = "linux"; + rev = "da4c8e0ffe7a868b989211045657d600be3046a1"; + sha256 = "hNLVfhalmRhhRfvu2mR/qDmmGl//Ic1eqR7N1HFj2CY="; + fetchSubmodules = true; + }; + fw = prev.fetchFromGitHub { + owner = "raspberrypi"; + repo = "firmware"; + rev = "2e7137e0840f76f056589aba7f82d5b7236d8f1c"; + sha256 = "jIKhQxp9D83OAZ8X2Vra9THHBE0j5Z2gRMDSVqIhopY="; + }; + } ]) diff --git a/overlay/libcamera-apps.nix b/overlay/libcamera-apps.nix index 82e04f9..2271d6b 100644 --- a/overlay/libcamera-apps.nix +++ b/overlay/libcamera-apps.nix @@ -3,13 +3,13 @@ stdenv.mkDerivation rec { pname = "libcamera-apps"; - version = "unstable-2022-05-12"; + version = "v1.1.0"; src = fetchFromGitHub { owner = "raspberrypi"; repo = "libcamera-apps"; - rev = "f5a2f1d86b440ebc064d4369421348d858ef31f3"; - sha256 = "Et8enICYct/AvWstY/id6BD/NB9+La9pNrtAsdwv+Tg="; + rev = "4fea2eed68300dcc88e89aa30da6079d10dce822"; + sha256 = "T6BpC1lEZD00TBZ7SXChKh/m+vKYnVzSTLxBHIEJYn8="; fetchSubmodules = true; }; diff --git a/rpi/default.nix b/rpi/default.nix index 9ac8a44..05c5d71 100644 --- a/rpi/default.nix +++ b/rpi/default.nix @@ -13,7 +13,7 @@ nixpkgs = { overlays = [ overlay ]; }; boot = { - kernelPackages = pkgs.linuxPackagesFor (pkgs.linux_rpi-5_15_61); + kernelPackages = pkgs.linuxPackagesFor (pkgs.linux_rpi-5_15_87); initrd.availableKernelModules = [ "usbhid" "usb_storage" "vc4" ]; loader = { diff --git a/rpi/device-tree.nix b/rpi/device-tree.nix index bcf313f..fc79365 100644 --- a/rpi/device-tree.nix +++ b/rpi/device-tree.nix @@ -18,7 +18,7 @@ in { type = with lib.types; listOf (submodule { options = { - overlay = lib.mkOption { type = str; }; + overlay = lib.mkOption { type = oneOf [ str path ]; }; args = lib.mkOption { type = listOf str; default = [ ]; @@ -61,6 +61,15 @@ in { make dtbs_install INSTALL_DTBS_PATH=$out/dtbs ARCH="${pkgs.stdenv.hostPlatform.linuxArch}" ''; }; + compiled-overlays = map (x: + let + overlay-file = if builtins.isPath x.overlay then + pkgs.runCommand "overlay.dtbo" { + buildInputs = with pkgs; [ dtc ]; + } "dtc -I dts -O dtb -o $out ${x.overlay}" + else + "${config.boot.kernelPackages.kernel}/dtbs/overlays/${x.overlay}.dtbo"; + in x // { overlay = overlay-file; }) cfg.dt-overlays; in lib.mkForce (pkgs.runCommand "device-tree-overlays" { buildInputs = with pkgs; [ findutils libraspberrypi ]; } '' @@ -82,11 +91,7 @@ in { builtins.concatStringsSep " " x.args } mv $out/$dtb{-merged,} - '') (map (x: - x // { - overlay = - "${config.boot.kernelPackages.kernel}/dtbs/overlays/${x.overlay}.dtbo"; - }) cfg.dt-overlays) + '') compiled-overlays } done ${cfg.postInstall} diff --git a/sd-image/default.nix b/sd-image/default.nix index f334cf4..66a811f 100644 --- a/sd-image/default.nix +++ b/sd-image/default.nix @@ -13,7 +13,7 @@ sdImage = { populateFirmwareCommands = let - raspberrypifw = pkgs.raspberrypifw-5_15_61; + raspberrypifw = pkgs.raspberrypifw-5_15_87; configTxt = pkgs.writeText "config.txt" '' [pi02] kernel=u-boot-rpi_arm64.bin