mirror of
https://github.com/nix-community/raspberry-pi-nix.git
synced 2025-11-08 19:46:03 +01:00
organize kernels and firmware
This commit is contained in:
parent
28498601bb
commit
9cac87a79c
8 changed files with 212 additions and 127 deletions
|
|
@ -1,36 +1,26 @@
|
||||||
final: prev:
|
final: prev:
|
||||||
let
|
let
|
||||||
rpi-kernel = { kernel, version, fw, extraConfig ? null }:
|
rpi-kernel = { kernel, version, fw, wireless-fw, argsOverride ? null }:
|
||||||
let
|
let
|
||||||
new-kernel = prev.linux_rpi4.override {
|
new-kernel = prev.linux_rpi4.override {
|
||||||
argsOverride = {
|
argsOverride = {
|
||||||
src = kernel;
|
src = kernel;
|
||||||
inherit version;
|
inherit version;
|
||||||
modDirVersion = version;
|
modDirVersion = version;
|
||||||
} // (if builtins.isNull extraConfig then
|
} // (if builtins.isNull argsOverride then { } else argsOverride);
|
||||||
{ }
|
|
||||||
else {
|
|
||||||
inherit extraConfig;
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
new-fw = prev.raspberrypifw.overrideAttrs (oldfw: { src = fw; });
|
new-fw = prev.raspberrypifw.overrideAttrs (oldfw: { src = fw; });
|
||||||
|
new-wireless-fw = final.callPackage wireless-fw { };
|
||||||
version-slug = builtins.replaceStrings [ "." ] [ "_" ] version;
|
version-slug = builtins.replaceStrings [ "." ] [ "_" ] version;
|
||||||
in {
|
in {
|
||||||
"linux_rpi-${version-slug}" = new-kernel;
|
"v${version-slug}" = {
|
||||||
"raspberrypifw-${version-slug}" = new-fw;
|
kernel = new-kernel;
|
||||||
|
firmware = new-fw;
|
||||||
|
wireless-firmware = new-wireless-fw;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
rpi-kernels = builtins.foldl' (b: a: b // rpi-kernel a) { };
|
rpi-kernels = builtins.foldl' (b: a: b // rpi-kernel a) { };
|
||||||
in {
|
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-apps = final.callPackage ./libcamera-apps.nix { };
|
libcamera-apps = final.callPackage ./libcamera-apps.nix { };
|
||||||
|
|
||||||
|
|
@ -46,111 +36,62 @@ in {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
raspberrypiWirelessFirmware = prev.raspberrypiWirelessFirmware.overrideAttrs
|
# raspberrypiWirelessFirmware = prev.raspberrypiWirelessFirmware.overrideAttrs
|
||||||
(old: {
|
# (old: {
|
||||||
version = "2023-01-19";
|
# version = "2023-01-19";
|
||||||
srcs = [
|
# srcs = [
|
||||||
(prev.fetchFromGitHub {
|
# (prev.fetchFromGitHub {
|
||||||
name = "bluez-firmware";
|
# name = "bluez-firmware";
|
||||||
owner = "RPi-Distro";
|
# owner = "RPi-Distro";
|
||||||
repo = "bluez-firmware";
|
# repo = "bluez-firmware";
|
||||||
rev = "9556b08ace2a1735127894642cc8ea6529c04c90";
|
# rev = "9556b08ace2a1735127894642cc8ea6529c04c90";
|
||||||
sha256 = "gKGK0XzNrws5REkKg/JP6SZx3KsJduu53SfH3Dichkc=";
|
# sha256 = "gKGK0XzNrws5REkKg/JP6SZx3KsJduu53SfH3Dichkc=";
|
||||||
})
|
# })
|
||||||
(prev.fetchFromGitHub {
|
# (prev.fetchFromGitHub {
|
||||||
name = "firmware-nonfree";
|
# name = "firmware-nonfree";
|
||||||
owner = "RPi-Distro";
|
# owner = "RPi-Distro";
|
||||||
repo = "firmware-nonfree";
|
# repo = "firmware-nonfree";
|
||||||
rev = "8e349de20c8cb5d895b3568777ec53cbb333398f";
|
# rev = "8e349de20c8cb5d895b3568777ec53cbb333398f";
|
||||||
sha256 = "45/FnaaZTEG6jLmbaXohpNpS6BEZu3DBDHqquq8ukXc=";
|
# sha256 = "45/FnaaZTEG6jLmbaXohpNpS6BEZu3DBDHqquq8ukXc=";
|
||||||
})
|
# })
|
||||||
];
|
# ];
|
||||||
});
|
# });
|
||||||
|
|
||||||
} // (rpi-kernels [
|
} // {
|
||||||
{
|
rpi-kernels = rpi-kernels [
|
||||||
version = "5.10.110";
|
{
|
||||||
kernel = prev.fetchFromGitHub {
|
version = "5.15.36";
|
||||||
owner = "raspberrypi";
|
kernel = prev.fetchFromGitHub {
|
||||||
repo = "linux";
|
owner = "raspberrypi";
|
||||||
rev = "8e1110a580887f4b82303b9354c25d7e2ff5860e";
|
repo = "linux";
|
||||||
sha256 = "G0XLIpiuszbHKetBQPSBxnyPggFDxUJ4B8F5poS9Tfg=";
|
rev = "9af1cc301e4dffb830025207a54d0bc63bec16c7";
|
||||||
fetchSubmodules = true;
|
sha256 = "fsMTUdz1XZhPaSXpU1uBV4V4VxoZKi6cwP0QJcrCy1o=";
|
||||||
};
|
fetchSubmodules = true;
|
||||||
extraConfig = ''
|
};
|
||||||
DRM_AST n
|
fw = prev.fetchFromGitHub {
|
||||||
DRM_AMDGPU n
|
owner = "raspberrypi";
|
||||||
DRM_TIDSS n
|
repo = "firmware";
|
||||||
'';
|
rev = "2cf8a179b3f2e6e5e5ceba4e8e544def10a49020";
|
||||||
fw = prev.fetchFromGitHub {
|
sha256 = "YG1bryflbV3W62MhZ/XMSgUJXMhCl/fe86x+CT7XZ4U=";
|
||||||
owner = "raspberrypi";
|
};
|
||||||
repo = "firmware";
|
wireless-fw = import ./raspberrypi-wireless-firmware/5.10.36.nix;
|
||||||
rev = "e1e3dc004ec45c0a6ab3f32eb02c1e0c8846796c";
|
}
|
||||||
sha256 = "Smn3wQ81zzmj+Wpt2Xwby+0Zt7YGhmhlaEscbaZaMmI=";
|
{
|
||||||
};
|
version = "5.15.87";
|
||||||
}
|
kernel = prev.fetchFromGitHub {
|
||||||
{
|
owner = "raspberrypi";
|
||||||
version = "5.15.36";
|
repo = "linux";
|
||||||
kernel = prev.fetchFromGitHub {
|
rev = "da4c8e0ffe7a868b989211045657d600be3046a1";
|
||||||
owner = "raspberrypi";
|
sha256 = "hNLVfhalmRhhRfvu2mR/qDmmGl//Ic1eqR7N1HFj2CY=";
|
||||||
repo = "linux";
|
fetchSubmodules = true;
|
||||||
rev = "9af1cc301e4dffb830025207a54d0bc63bec16c7";
|
};
|
||||||
sha256 = "fsMTUdz1XZhPaSXpU1uBV4V4VxoZKi6cwP0QJcrCy1o=";
|
fw = prev.fetchFromGitHub {
|
||||||
fetchSubmodules = true;
|
owner = "raspberrypi";
|
||||||
};
|
repo = "firmware";
|
||||||
fw = prev.fetchFromGitHub {
|
rev = "2e7137e0840f76f056589aba7f82d5b7236d8f1c";
|
||||||
owner = "raspberrypi";
|
sha256 = "jIKhQxp9D83OAZ8X2Vra9THHBE0j5Z2gRMDSVqIhopY=";
|
||||||
repo = "firmware";
|
};
|
||||||
rev = "2cf8a179b3f2e6e5e5ceba4e8e544def10a49020";
|
wireless-fw = import ./raspberrypi-wireless-firmware/5.10.87.nix;
|
||||||
sha256 = "YG1bryflbV3W62MhZ/XMSgUJXMhCl/fe86x+CT7XZ4U=";
|
}
|
||||||
};
|
];
|
||||||
}
|
}
|
||||||
{
|
|
||||||
version = "5.15.56";
|
|
||||||
kernel = prev.fetchFromGitHub {
|
|
||||||
owner = "raspberrypi";
|
|
||||||
repo = "linux";
|
|
||||||
rev = "912b039b7c55d40ae930f2602e45c66055c375a8";
|
|
||||||
sha256 = "igtTOPbDw9FJAzZe7u4trCkHLOIQX0RZdUwtWpBX1Ag=";
|
|
||||||
fetchSubmodules = true;
|
|
||||||
};
|
|
||||||
fw = prev.fetchFromGitHub {
|
|
||||||
owner = "raspberrypi";
|
|
||||||
repo = "firmware";
|
|
||||||
rev = "e1e3dc004ec45c0a6ab3f32eb02c1e0c8846796c";
|
|
||||||
sha256 = "Smn3wQ81zzmj+Wpt2Xwby+0Zt7YGhmhlaEscbaZaMmI=";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
{
|
|
||||||
version = "5.15.61";
|
|
||||||
kernel = prev.fetchFromGitHub {
|
|
||||||
owner = "raspberrypi";
|
|
||||||
repo = "linux";
|
|
||||||
rev = "004a1de4f5d866c7a62e6f96ac10bdd908c2d28c";
|
|
||||||
sha256 = "K4yjgova6COikjUgQpX13N5ygpGXDH9Uy54FAg+NKpc=";
|
|
||||||
fetchSubmodules = true;
|
|
||||||
};
|
|
||||||
fw = prev.fetchFromGitHub {
|
|
||||||
owner = "raspberrypi";
|
|
||||||
repo = "firmware";
|
|
||||||
rev = "8ca25048d08420eac28a97b00ab134ee3535e105";
|
|
||||||
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=";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
])
|
|
||||||
|
|
|
||||||
56
overlay/raspberrypi-wireless-firmware/5.10.36.nix
Normal file
56
overlay/raspberrypi-wireless-firmware/5.10.36.nix
Normal file
|
|
@ -0,0 +1,56 @@
|
||||||
|
{ lib, stdenv, fetchFromGitHub }:
|
||||||
|
|
||||||
|
stdenv.mkDerivation {
|
||||||
|
pname = "raspberrypi-wireless-firmware";
|
||||||
|
version = "2021-06-28";
|
||||||
|
|
||||||
|
srcs = [
|
||||||
|
(fetchFromGitHub {
|
||||||
|
name = "bluez-firmware";
|
||||||
|
owner = "RPi-Distro";
|
||||||
|
repo = "bluez-firmware";
|
||||||
|
rev = "e7fd166981ab4bb9a36c2d1500205a078a35714d";
|
||||||
|
sha256 = "1dkg8mzn7n4afi50ibrda2s33nw2qj52jjjdv9w560q601gms47b";
|
||||||
|
})
|
||||||
|
(fetchFromGitHub {
|
||||||
|
name = "firmware-nonfree";
|
||||||
|
owner = "RPi-Distro";
|
||||||
|
repo = "firmware-nonfree";
|
||||||
|
rev = "00de3194a96397c913786945ac0af1fd6fbec45b";
|
||||||
|
sha256 = "1xnr364dkiq6gmr21lcrj23hwc0g9y5qad8dm2maij647bgzp07r";
|
||||||
|
})
|
||||||
|
];
|
||||||
|
|
||||||
|
sourceRoot = ".";
|
||||||
|
|
||||||
|
dontBuild = true;
|
||||||
|
# Firmware blobs do not need fixing and should not be modified
|
||||||
|
dontFixup = true;
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
runHook preInstall
|
||||||
|
mkdir -p "$out/lib/firmware/brcm"
|
||||||
|
|
||||||
|
# Wifi firmware
|
||||||
|
for filename in firmware-nonfree/brcm/brcmfmac434??-sdio.*; do
|
||||||
|
cp "$filename" "$out/lib/firmware/brcm"
|
||||||
|
done
|
||||||
|
|
||||||
|
# Bluetooth firmware
|
||||||
|
cp bluez-firmware/broadcom/*.hcd "$out/lib/firmware/brcm"
|
||||||
|
runHook postInstall
|
||||||
|
'';
|
||||||
|
|
||||||
|
outputHashMode = "recursive";
|
||||||
|
outputHashAlgo = "sha256";
|
||||||
|
outputHash = "0a54gyrq6jfxxvimaa4yjfiyfwf7wv58v0a32l74yrzyarr3ldby";
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
description =
|
||||||
|
"Firmware for builtin Wifi/Bluetooth devices in the Raspberry Pi 3+ and Zero W";
|
||||||
|
homepage = "https://github.com/RPi-Distro/firmware-nonfree";
|
||||||
|
license = licenses.unfreeRedistributableFirmware;
|
||||||
|
platforms = platforms.linux;
|
||||||
|
maintainers = with maintainers; [ lopsided98 ];
|
||||||
|
};
|
||||||
|
}
|
||||||
56
overlay/raspberrypi-wireless-firmware/5.10.87.nix
Normal file
56
overlay/raspberrypi-wireless-firmware/5.10.87.nix
Normal file
|
|
@ -0,0 +1,56 @@
|
||||||
|
{ lib, stdenvNoCC, fetchFromGitHub }:
|
||||||
|
|
||||||
|
stdenvNoCC.mkDerivation {
|
||||||
|
pname = "raspberrypi-wireless-firmware";
|
||||||
|
version = "2023-01-19";
|
||||||
|
|
||||||
|
srcs = [
|
||||||
|
(fetchFromGitHub {
|
||||||
|
name = "bluez-firmware";
|
||||||
|
owner = "RPi-Distro";
|
||||||
|
repo = "bluez-firmware";
|
||||||
|
rev = "9556b08ace2a1735127894642cc8ea6529c04c90";
|
||||||
|
sha256 = "gKGK0XzNrws5REkKg/JP6SZx3KsJduu53SfH3Dichkc=";
|
||||||
|
})
|
||||||
|
(fetchFromGitHub {
|
||||||
|
name = "firmware-nonfree";
|
||||||
|
owner = "RPi-Distro";
|
||||||
|
repo = "firmware-nonfree";
|
||||||
|
rev = "8e349de20c8cb5d895b3568777ec53cbb333398f";
|
||||||
|
sha256 = "45/FnaaZTEG6jLmbaXohpNpS6BEZu3DBDHqquq8ukXc=";
|
||||||
|
})
|
||||||
|
];
|
||||||
|
|
||||||
|
sourceRoot = ".";
|
||||||
|
|
||||||
|
dontBuild = true;
|
||||||
|
# Firmware blobs do not need fixing and should not be modified
|
||||||
|
dontFixup = true;
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
runHook preInstall
|
||||||
|
mkdir -p "$out/lib/firmware/brcm"
|
||||||
|
|
||||||
|
# Wifi firmware
|
||||||
|
cp -rv "$NIX_BUILD_TOP/firmware-nonfree/debian/config/brcm80211/." "$out/lib/firmware/"
|
||||||
|
|
||||||
|
# Bluetooth firmware
|
||||||
|
cp -rv "$NIX_BUILD_TOP/bluez-firmware/broadcom/." "$out/lib/firmware/brcm"
|
||||||
|
|
||||||
|
# CM4 symlink must be added since it's missing from upstream
|
||||||
|
pushd $out/lib/firmware/brcm &>/dev/null
|
||||||
|
ln -s "./brcmfmac43455-sdio.txt" "$out/lib/firmware/brcm/brcmfmac43455-sdio.raspberrypi,4-compute-module.txt"
|
||||||
|
popd &>/dev/null
|
||||||
|
|
||||||
|
runHook postInstall
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
description =
|
||||||
|
"Firmware for builtin Wifi/Bluetooth devices in the Raspberry Pi 3+ and Zero W";
|
||||||
|
homepage = "https://github.com/RPi-Distro/firmware-nonfree";
|
||||||
|
license = licenses.unfreeRedistributableFirmware;
|
||||||
|
platforms = platforms.linux;
|
||||||
|
maintainers = with maintainers; [ lopsided98 ];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
@ -3,6 +3,17 @@ rpi:
|
||||||
|
|
||||||
{
|
{
|
||||||
imports = [ rpi ];
|
imports = [ rpi ];
|
||||||
|
nixpkgs = {
|
||||||
|
overlays = [
|
||||||
|
(final: prev: {
|
||||||
|
raspberrypiWirelessFirmware =
|
||||||
|
final.rpi-kernels.v5_15_87.wireless-firmware;
|
||||||
|
raspberrypifw = final.rpi-kernels.v5_15_87.firmware;
|
||||||
|
})
|
||||||
|
];
|
||||||
|
};
|
||||||
|
boot.kernelPackages =
|
||||||
|
pkgs.linuxPackagesFor (pkgs.rpi-kernels.v5_15_87.kernel);
|
||||||
hardware.raspberry-pi.deviceTree = {
|
hardware.raspberry-pi.deviceTree = {
|
||||||
base-dtb = "bcm2710-rpi-3-b-plus.dtb";
|
base-dtb = "bcm2710-rpi-3-b-plus.dtb";
|
||||||
# u-boot expects bcm2837-rpi-3-b-plus.dtb for the 3b+ (as of
|
# u-boot expects bcm2837-rpi-3-b-plus.dtb for the 3b+ (as of
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,18 @@ rpi:
|
||||||
{ lib, pkgs, config, ... }:
|
{ lib, pkgs, config, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
|
nixpkgs = {
|
||||||
|
overlays = [
|
||||||
|
(final: prev: {
|
||||||
|
raspberrypiWirelessFirmware =
|
||||||
|
final.rpi-kernels.v5_15_87.wireless-firmware;
|
||||||
|
raspberrypifw = final.rpi-kernels.v5_15_87.firmware;
|
||||||
|
})
|
||||||
|
];
|
||||||
|
};
|
||||||
imports = [ rpi ];
|
imports = [ rpi ];
|
||||||
hardware.raspberry-pi.deviceTree.base-dtb = "bcm2711-rpi-4-b.dtb";
|
hardware.raspberry-pi.deviceTree.base-dtb = "bcm2711-rpi-4-b.dtb";
|
||||||
|
boot.kernelPackages =
|
||||||
|
pkgs.linuxPackagesFor (pkgs.rpi-kernels.v5_15_87.kernel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,15 @@ rpi:
|
||||||
|
|
||||||
{
|
{
|
||||||
imports = [ rpi ];
|
imports = [ rpi ];
|
||||||
|
nixpkgs = {
|
||||||
|
overlays = [
|
||||||
|
(final: prev: {
|
||||||
|
raspberrypiWirelessFirmware =
|
||||||
|
final.rpi-kernels.v5_15_36.wireless-firmware;
|
||||||
|
raspberrypifw = final.rpi-kernels.v5_15_36.firmware;
|
||||||
|
})
|
||||||
|
];
|
||||||
|
};
|
||||||
hardware.raspberry-pi.deviceTree.base-dtb = "bcm2710-rpi-zero-2.dtb";
|
hardware.raspberry-pi.deviceTree.base-dtb = "bcm2710-rpi-zero-2.dtb";
|
||||||
# u-boot expects bcm2837-rpi-zero-2.dtb for the zero 2 w (as of
|
# u-boot expects bcm2837-rpi-zero-2.dtb for the zero 2 w (as of
|
||||||
# 2020.04), although the kernel has 2710. We rename it to satisfy
|
# 2020.04), although the kernel has 2710. We rename it to satisfy
|
||||||
|
|
@ -10,4 +19,6 @@ rpi:
|
||||||
hardware.raspberry-pi.deviceTree.postInstall = ''
|
hardware.raspberry-pi.deviceTree.postInstall = ''
|
||||||
mv $out/broadcom/bcm2710-rpi-zero-2.dtb $out/broadcom/bcm2837-rpi-zero-2.dtb
|
mv $out/broadcom/bcm2710-rpi-zero-2.dtb $out/broadcom/bcm2837-rpi-zero-2.dtb
|
||||||
'';
|
'';
|
||||||
|
boot.kernelPackages =
|
||||||
|
pkgs.linuxPackagesFor (pkgs.rpi-kernels.v5_15_36.kernel);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,6 @@
|
||||||
|
|
||||||
nixpkgs = { overlays = [ overlay ]; };
|
nixpkgs = { overlays = [ overlay ]; };
|
||||||
boot = {
|
boot = {
|
||||||
kernelPackages = pkgs.linuxPackagesFor (pkgs.linux_rpi-5_15_87);
|
|
||||||
initrd.availableKernelModules = [ "usbhid" "usb_storage" "vc4" ];
|
initrd.availableKernelModules = [ "usbhid" "usb_storage" "vc4" ];
|
||||||
|
|
||||||
loader = {
|
loader = {
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@
|
||||||
|
|
||||||
sdImage = {
|
sdImage = {
|
||||||
populateFirmwareCommands = let
|
populateFirmwareCommands = let
|
||||||
raspberrypifw = pkgs.raspberrypifw-5_15_87;
|
inherit (pkgs) raspberrypifw;
|
||||||
configTxt = pkgs.writeText "config.txt" ''
|
configTxt = pkgs.writeText "config.txt" ''
|
||||||
[pi02]
|
[pi02]
|
||||||
kernel=u-boot-rpi_arm64.bin
|
kernel=u-boot-rpi_arm64.bin
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue