about summary refs log tree commit diff
path: root/nixpkgs/pkgs/top-level/linux-kernels.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/top-level/linux-kernels.nix')
-rw-r--r--nixpkgs/pkgs/top-level/linux-kernels.nix550
1 files changed, 550 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/top-level/linux-kernels.nix b/nixpkgs/pkgs/top-level/linux-kernels.nix
new file mode 100644
index 000000000000..82ad3ed0ff0b
--- /dev/null
+++ b/nixpkgs/pkgs/top-level/linux-kernels.nix
@@ -0,0 +1,550 @@
+{ pkgs
+, linuxKernel
+, config
+, buildPackages
+, callPackage
+, makeOverridable
+, recurseIntoAttrs
+, dontRecurseIntoAttrs
+, stdenv
+, stdenvNoCC
+, newScope
+, lib
+}:
+
+# When adding a kernel:
+  # - Update packageAliases.linux_latest to the latest version
+  # - Update the rev in ../os-specific/linux/kernel/linux-libre.nix to the latest one.
+  # - Update linux_latest_hardened when the patches become available
+
+with linuxKernel;
+
+let
+  deblobKernel = kernel: callPackage ../os-specific/linux/kernel/linux-libre.nix {
+    linux = kernel;
+  };
+
+  # Hardened Linux
+  hardenedKernelFor = kernel': overrides:
+    let kernel = kernel'.override overrides;
+    in kernel.override {
+      structuredExtraConfig = import ../os-specific/linux/kernel/hardened/config.nix {
+        inherit lib;
+        inherit (kernel) version;
+      };
+      kernelPatches = kernel.kernelPatches ++ [
+        kernelPatches.hardened.${kernel.meta.branch}
+      ];
+      modDirVersionArg = kernel.modDirVersion + (kernelPatches.hardened.${kernel.meta.branch}).extra;
+      isHardened = true;
+  };
+in {
+  kernelPatches = callPackage ../os-specific/linux/kernel/patches.nix { };
+
+  kernels = recurseIntoAttrs (lib.makeExtensible (self: with self;
+    let callPackage = newScope self; in {
+
+    linux_mptcp_95 = callPackage ../os-specific/linux/kernel/linux-mptcp-95.nix {
+      kernelPatches = linux_4_19.kernelPatches;
+    };
+
+    linux_rpi1 = callPackage ../os-specific/linux/kernel/linux-rpi.nix {
+      kernelPatches = with kernelPatches; [
+        bridge_stp_helper
+        request_key_helper
+      ];
+      rpiVersion = 1;
+    };
+
+    linux_rpi2 = callPackage ../os-specific/linux/kernel/linux-rpi.nix {
+      kernelPatches = with kernelPatches; [
+        bridge_stp_helper
+        request_key_helper
+      ];
+      rpiVersion = 2;
+    };
+
+    linux_rpi3 = callPackage ../os-specific/linux/kernel/linux-rpi.nix {
+      kernelPatches = with kernelPatches; [
+        bridge_stp_helper
+        request_key_helper
+      ];
+      rpiVersion = 3;
+    };
+
+    linux_rpi4 = callPackage ../os-specific/linux/kernel/linux-rpi.nix {
+      kernelPatches = with kernelPatches; [
+        bridge_stp_helper
+        request_key_helper
+      ];
+      rpiVersion = 4;
+    };
+
+    linux_4_4 = callPackage ../os-specific/linux/kernel/linux-4.4.nix {
+      kernelPatches =
+        [ kernelPatches.bridge_stp_helper
+          kernelPatches.request_key_helper_updated
+          kernelPatches.cpu-cgroup-v2."4.4"
+          kernelPatches.modinst_arg_list_too_long
+        ];
+    };
+
+    linux_4_9 = callPackage ../os-specific/linux/kernel/linux-4.9.nix {
+      kernelPatches =
+        [ kernelPatches.bridge_stp_helper
+          kernelPatches.request_key_helper_updated
+          kernelPatches.cpu-cgroup-v2."4.9"
+          kernelPatches.modinst_arg_list_too_long
+        ];
+    };
+
+    linux_4_14 = callPackage ../os-specific/linux/kernel/linux-4.14.nix {
+      kernelPatches =
+        [ kernelPatches.bridge_stp_helper
+          kernelPatches.request_key_helper
+          # See pkgs/os-specific/linux/kernel/cpu-cgroup-v2-patches/README.md
+          # when adding a new linux version
+          kernelPatches.cpu-cgroup-v2."4.11"
+          kernelPatches.modinst_arg_list_too_long
+        ];
+    };
+
+    linux_4_19 = callPackage ../os-specific/linux/kernel/linux-4.19.nix {
+      kernelPatches =
+        [ kernelPatches.bridge_stp_helper
+          kernelPatches.request_key_helper
+          kernelPatches.modinst_arg_list_too_long
+        ];
+    };
+
+    linux_5_4 = callPackage ../os-specific/linux/kernel/linux-5.4.nix {
+      kernelPatches = [
+        kernelPatches.bridge_stp_helper
+        kernelPatches.request_key_helper
+        kernelPatches.rtl8761b_support
+      ];
+    };
+
+    linux_rt_5_4 = callPackage ../os-specific/linux/kernel/linux-rt-5.4.nix {
+      kernelPatches = [
+        kernelPatches.bridge_stp_helper
+        kernelPatches.request_key_helper
+      ];
+    };
+
+    linux_5_10 = callPackage ../os-specific/linux/kernel/linux-5.10.nix {
+      kernelPatches = [
+        kernelPatches.bridge_stp_helper
+        kernelPatches.request_key_helper
+      ];
+    };
+
+    linux_rt_5_10 = callPackage ../os-specific/linux/kernel/linux-rt-5.10.nix {
+      kernelPatches = [
+        kernelPatches.bridge_stp_helper
+        kernelPatches.request_key_helper
+        kernelPatches.export-rt-sched-migrate
+      ];
+    };
+
+    linux_rt_5_11 = callPackage ../os-specific/linux/kernel/linux-rt-5.11.nix {
+      kernelPatches = [
+        kernelPatches.bridge_stp_helper
+        kernelPatches.request_key_helper
+        kernelPatches.export-rt-sched-migrate
+      ];
+    };
+
+    linux_5_13 = callPackage ../os-specific/linux/kernel/linux-5.13.nix {
+      kernelPatches = [
+        kernelPatches.bridge_stp_helper
+        kernelPatches.request_key_helper
+      ];
+    };
+
+    linux_5_14 = callPackage ../os-specific/linux/kernel/linux-5.14.nix {
+      kernelPatches = [
+        kernelPatches.bridge_stp_helper
+        kernelPatches.request_key_helper
+      ];
+    };
+
+    linux_testing = callPackage ../os-specific/linux/kernel/linux-testing.nix {
+      kernelPatches = [
+        kernelPatches.bridge_stp_helper
+        kernelPatches.request_key_helper
+      ];
+    };
+
+    linux_testing_bcachefs = callPackage ../os-specific/linux/kernel/linux-testing-bcachefs.nix rec {
+      kernel = linux_5_13;
+      kernelPatches = kernel.kernelPatches;
+   };
+
+    linux_hardkernel_4_14 = callPackage ../os-specific/linux/kernel/linux-hardkernel-4.14.nix {
+      kernelPatches = [
+        kernelPatches.bridge_stp_helper
+        kernelPatches.request_key_helper
+        kernelPatches.modinst_arg_list_too_long
+      ];
+    };
+
+    linux_zen = callPackage ../os-specific/linux/kernel/linux-zen.nix {
+      kernelPatches = [
+        kernelPatches.bridge_stp_helper
+        kernelPatches.request_key_helper
+      ];
+    };
+
+    linux_lqx = callPackage ../os-specific/linux/kernel/linux-lqx.nix {
+      kernelPatches = [
+        kernelPatches.bridge_stp_helper
+        kernelPatches.request_key_helper
+      ];
+    };
+
+    linux_xanmod = callPackage ../os-specific/linux/kernel/linux-xanmod.nix {
+      kernelPatches = [
+        kernelPatches.bridge_stp_helper
+        kernelPatches.request_key_helper
+      ];
+    };
+
+    linux_libre = deblobKernel packageAliases.linux_default.kernel;
+
+    linux_latest_libre = deblobKernel packageAliases.linux_latest.kernel;
+
+    linux_hardened = hardenedKernelFor packageAliases.linux_default.kernel { };
+
+    linux_4_14_hardened = hardenedKernelFor kernels.linux_4_14 { };
+    linux_4_19_hardened = hardenedKernelFor kernels.linux_4_19 { };
+    linux_5_4_hardened = hardenedKernelFor kernels.linux_5_4 { };
+    linux_5_10_hardened = hardenedKernelFor kernels.linux_5_10 { };
+    linux_5_13_hardened = hardenedKernelFor kernels.linux_5_13 { };
+    linux_5_14_hardened = hardenedKernelFor kernels.linux_5_14 { };
+
+  }));
+  /*  Linux kernel modules are inherently tied to a specific kernel.  So
+    rather than provide specific instances of those packages for a
+    specific kernel, we have a function that builds those packages
+    for a specific kernel.  This function can then be called for
+    whatever kernel you're using. */
+
+  packagesFor = kernel_: lib.makeExtensible (self: with self;
+    let callPackage = newScope self; in {
+    inherit callPackage;
+    kernel = kernel_;
+    inherit (kernel) stdenv; # in particular, use the same compiler by default
+
+    # to help determine module compatibility
+    inherit (kernel) isZen isHardened isLibre;
+    inherit (kernel) kernelOlder kernelAtLeast;
+    # Obsolete aliases (these packages do not depend on the kernel).
+    inherit (pkgs) odp-dpdk pktgen; # added 2018-05
+
+    acpi_call = callPackage ../os-specific/linux/acpi-call {};
+
+    akvcam = callPackage ../os-specific/linux/akvcam { };
+
+    amdgpu-pro = callPackage ../os-specific/linux/amdgpu-pro { };
+
+    anbox = callPackage ../os-specific/linux/anbox/kmod.nix { };
+
+    apfs = callPackage ../os-specific/linux/apfs { };
+
+    batman_adv = callPackage ../os-specific/linux/batman-adv {};
+
+    bcc = callPackage ../os-specific/linux/bcc {
+      python = pkgs.python3;
+    };
+
+    bpftrace = callPackage ../os-specific/linux/bpftrace { };
+
+    bbswitch = callPackage ../os-specific/linux/bbswitch {};
+
+    chipsec = callPackage ../tools/security/chipsec {
+      inherit kernel;
+      withDriver = true;
+    };
+
+    cryptodev = callPackage ../os-specific/linux/cryptodev { };
+
+    cpupower = callPackage ../os-specific/linux/cpupower { };
+
+    ddcci-driver = callPackage ../os-specific/linux/ddcci { };
+
+    digimend = callPackage ../os-specific/linux/digimend { };
+
+    dpdk-kmods = callPackage ../os-specific/linux/dpdk-kmods { };
+
+    exfat-nofuse = callPackage ../os-specific/linux/exfat { };
+
+    evdi = callPackage ../os-specific/linux/evdi { };
+
+    fwts-efi-runtime = callPackage ../os-specific/linux/fwts/module.nix { };
+
+    gcadapter-oc-kmod = callPackage ../os-specific/linux/gcadapter-oc-kmod { };
+    hid-nintendo = callPackage ../os-specific/linux/hid-nintendo { };
+
+    hyperv-daemons = callPackage ../os-specific/linux/hyperv-daemons { };
+
+    e1000e = if lib.versionOlder kernel.version "4.10" then  callPackage ../os-specific/linux/e1000e {} else null;
+
+    intel-speed-select = if lib.versionAtLeast kernel.version "5.3" then callPackage ../os-specific/linux/intel-speed-select { } else null;
+
+    ixgbevf = callPackage ../os-specific/linux/ixgbevf {};
+
+    it87 = callPackage ../os-specific/linux/it87 {};
+
+    asus-wmi-sensors = callPackage ../os-specific/linux/asus-wmi-sensors {};
+
+    ena = callPackage ../os-specific/linux/ena {};
+
+    v4l2loopback = callPackage ../os-specific/linux/v4l2loopback { };
+
+    lttng-modules = callPackage ../os-specific/linux/lttng-modules { };
+
+    broadcom_sta = callPackage ../os-specific/linux/broadcom-sta { };
+
+    tbs = callPackage ../os-specific/linux/tbs { };
+
+    mbp2018-bridge-drv = callPackage ../os-specific/linux/mbp-modules/mbp2018-bridge-drv { };
+
+    nvidiabl = callPackage ../os-specific/linux/nvidiabl { };
+
+    nvidiaPackages = dontRecurseIntoAttrs (callPackage ../os-specific/linux/nvidia-x11 { });
+
+    nvidia_x11_legacy340   = nvidiaPackages.legacy_340;
+    nvidia_x11_legacy390   = nvidiaPackages.legacy_390;
+    nvidia_x11_beta        = nvidiaPackages.beta;
+    nvidia_x11_vulkan_beta = nvidiaPackages.vulkan_beta;
+    nvidia_x11             = nvidiaPackages.stable;
+
+    openrazer = callPackage ../os-specific/linux/openrazer/driver.nix { };
+
+    ply = callPackage ../os-specific/linux/ply { };
+
+    r8125 = callPackage ../os-specific/linux/r8125 { };
+
+    r8168 = callPackage ../os-specific/linux/r8168 { };
+
+    rtl8188eus-aircrack = callPackage ../os-specific/linux/rtl8188eus-aircrack { };
+
+    rtl8192eu = callPackage ../os-specific/linux/rtl8192eu { };
+
+    rtl8723bs = callPackage ../os-specific/linux/rtl8723bs { };
+
+    rtl8812au = callPackage ../os-specific/linux/rtl8812au { };
+
+    rtl8814au = callPackage ../os-specific/linux/rtl8814au { };
+
+    rtl88xxau-aircrack = callPackage ../os-specific/linux/rtl88xxau-aircrack {};
+
+    rtl8821au = callPackage ../os-specific/linux/rtl8821au { };
+
+    rtl8821ce = callPackage ../os-specific/linux/rtl8821ce { };
+
+    rtl88x2bu = callPackage ../os-specific/linux/rtl88x2bu { };
+
+    rtl8821cu = callPackage ../os-specific/linux/rtl8821cu { };
+
+    rtw88 = callPackage ../os-specific/linux/rtw88 { };
+    rtlwifi_new = rtw88;
+
+    rtw89 = callPackage ../os-specific/linux/rtw89 { };
+
+    openafs_1_8 = callPackage ../servers/openafs/1.8/module.nix { };
+    openafs_1_9 = callPackage ../servers/openafs/1.9/module.nix { };
+    # Current stable release; don't backport release updates!
+    openafs = openafs_1_8;
+
+    facetimehd = callPackage ../os-specific/linux/facetimehd { };
+
+    tuxedo-keyboard = if lib.versionAtLeast kernel.version "4.14" then callPackage ../os-specific/linux/tuxedo-keyboard { } else null;
+
+    jool = callPackage ../os-specific/linux/jool { };
+
+    kvmfr = callPackage ../os-specific/linux/kvmfr { };
+
+    mba6x_bl = callPackage ../os-specific/linux/mba6x_bl { };
+
+    mwprocapture = callPackage ../os-specific/linux/mwprocapture { };
+
+    mxu11x0 = callPackage ../os-specific/linux/mxu11x0 { };
+
+    # compiles but has to be integrated into the kernel somehow
+    # Let's have it uncommented and finish it..
+    ndiswrapper = callPackage ../os-specific/linux/ndiswrapper { };
+
+    netatop = callPackage ../os-specific/linux/netatop { };
+
+    oci-seccomp-bpf-hook = if lib.versionAtLeast kernel.version "5.4" then callPackage ../os-specific/linux/oci-seccomp-bpf-hook { } else null;
+
+    perf = if lib.versionAtLeast kernel.version "3.12" then callPackage ../os-specific/linux/kernel/perf.nix { } else null;
+
+    phc-intel = if lib.versionAtLeast kernel.version "4.10" then callPackage ../os-specific/linux/phc-intel { } else null;
+
+    # Disable for kernels 4.15 and above due to compatibility issues
+    prl-tools = if lib.versionOlder kernel.version "4.15" then callPackage ../os-specific/linux/prl-tools { } else null;
+
+    sch_cake = callPackage ../os-specific/linux/sch_cake { };
+
+    isgx = callPackage ../os-specific/linux/isgx { };
+
+    sysdig = callPackage ../os-specific/linux/sysdig {};
+
+    systemtap = callPackage ../development/tools/profiling/systemtap { };
+
+    system76 = callPackage ../os-specific/linux/system76 { };
+
+    system76-acpi = callPackage ../os-specific/linux/system76-acpi { };
+
+    system76-power = callPackage ../os-specific/linux/system76-power { };
+
+    system76-io = callPackage ../os-specific/linux/system76-io { };
+
+    tmon = callPackage ../os-specific/linux/tmon { };
+
+    tp_smapi = callPackage ../os-specific/linux/tp_smapi { };
+
+    turbostat = callPackage ../os-specific/linux/turbostat { };
+
+    usbip = callPackage ../os-specific/linux/usbip { };
+
+    v86d = callPackage ../os-specific/linux/v86d { };
+
+    veikk-linux-driver = callPackage ../os-specific/linux/veikk-linux-driver { };
+    vendor-reset = callPackage ../os-specific/linux/vendor-reset { };
+
+    vhba = callPackage ../misc/emulators/cdemu/vhba.nix { };
+
+    virtualbox = callPackage ../os-specific/linux/virtualbox {
+      virtualbox = pkgs.virtualboxHardened;
+    };
+
+    virtualboxGuestAdditions = callPackage ../applications/virtualization/virtualbox/guest-additions {
+      virtualbox = pkgs.virtualboxHardened;
+    };
+
+    wireguard = if lib.versionOlder kernel.version "5.6" then callPackage ../os-specific/linux/wireguard { } else null;
+
+    x86_energy_perf_policy = callPackage ../os-specific/linux/x86_energy_perf_policy { };
+
+    xmm7360-pci = callPackage ../os-specific/linux/xmm7360-pci { };
+
+    xpadneo = callPackage ../os-specific/linux/xpadneo { };
+
+    zenpower = callPackage ../os-specific/linux/zenpower { };
+
+    inherit (callPackage ../os-specific/linux/zfs {
+        configFile = "kernel";
+        inherit pkgs kernel;
+      }) zfsStable zfsUnstable;
+    zfs = zfsStable;
+
+    can-isotp = callPackage ../os-specific/linux/can-isotp { };
+
+  } // lib.optionalAttrs (config.allowAliases or false) {
+    ati_drivers_x11 = throw "ati drivers are no longer supported by any kernel >=4.1"; # added 2021-05-18;
+  });
+
+  hardenedPackagesFor = kernel: overrides: packagesFor (hardenedKernelFor kernel overrides);
+
+  vanillaPackages = {
+    # recurse to build modules for the kernels
+    linux_4_4 = recurseIntoAttrs (packagesFor kernels.linux_4_4);
+    linux_4_9 = recurseIntoAttrs (packagesFor kernels.linux_4_9);
+    linux_4_14 = recurseIntoAttrs (packagesFor kernels.linux_4_14);
+    linux_4_19 = recurseIntoAttrs (packagesFor kernels.linux_4_19);
+    linux_5_4 = recurseIntoAttrs (packagesFor kernels.linux_5_4);
+    linux_5_10 = recurseIntoAttrs (packagesFor kernels.linux_5_10);
+    linux_5_13 = recurseIntoAttrs (packagesFor kernels.linux_5_13);
+    linux_5_14 = recurseIntoAttrs (packagesFor kernels.linux_5_14);
+  };
+
+  rtPackages = {
+     # realtime kernel packages
+     linux_rt_5_4 = packagesFor kernels.linux_rt_5_4;
+     linux_rt_5_10 = packagesFor kernels.linux_rt_5_10;
+     linux_rt_5_11 = packagesFor kernels.linux_rt_5_11;
+  };
+
+  rpiPackages = {
+    linux_rpi1 = packagesFor kernels.linux_rpi1;
+    linux_rpi2 = packagesFor kernels.linux_rpi2;
+    linux_rpi3 = packagesFor kernels.linux_rpi3;
+    linux_rpi4 = packagesFor kernels.linux_rpi4;
+  };
+
+  packages = recurseIntoAttrs (vanillaPackages // rtPackages // rpiPackages // {
+    linux_mptcp_95 = packagesFor kernels.linux_mptcp_95;
+
+    # Intentionally lacks recurseIntoAttrs, as -rc kernels will quite likely break out-of-tree modules and cause failed Hydra builds.
+    linux_testing = packagesFor kernels.linux_testing;
+    linux_testing_bcachefs = recurseIntoAttrs (packagesFor kernels.linux_testing_bcachefs);
+
+    linux_hardened = recurseIntoAttrs (hardenedPackagesFor packageAliases.linux_default.kernel { });
+
+    linux_4_14_hardened = recurseIntoAttrs (hardenedPackagesFor kernels.linux_4_14 { });
+    linux_4_19_hardened = recurseIntoAttrs (hardenedPackagesFor kernels.linux_4_19 { });
+    linux_5_4_hardened = recurseIntoAttrs (hardenedPackagesFor kernels.linux_5_4 { });
+    linux_5_10_hardened = recurseIntoAttrs (hardenedPackagesFor kernels.linux_5_10 { });
+    linux_5_13_hardened = recurseIntoAttrs (hardenedPackagesFor kernels.linux_5_13 { });
+    linux_5_14_hardened = recurseIntoAttrs (hardenedPackagesFor kernels.linux_5_14 { });
+
+    linux_zen = recurseIntoAttrs (packagesFor kernels.linux_zen);
+    linux_lqx = recurseIntoAttrs (packagesFor kernels.linux_lqx);
+    linux_xanmod = recurseIntoAttrs (packagesFor kernels.linux_xanmod);
+
+    hardkernel_4_14 = recurseIntoAttrs (packagesFor kernels.linux_hardkernel_4_14);
+
+    linux_libre = recurseIntoAttrs (packagesFor kernels.linux_libre);
+
+    linux_latest_libre = recurseIntoAttrs (packagesFor kernels.linux_latest_libre);
+  });
+
+  packageAliases = {
+    linux_default = packages.linux_5_10;
+    # Update this when adding the newest kernel major version!
+    linux_latest = packages.linux_5_14;
+    linux_mptcp = packages.linux_mptcp_95;
+    linux_rt_default = packages.linux_rt_5_4;
+    linux_rt_latest = packages.linux_rt_5_11;
+    linux_hardkernel_latest = packages.hardkernel_4_14;
+  };
+
+  manualConfig = makeOverridable (callPackage ../os-specific/linux/kernel/manual-config.nix {});
+
+  customPackage = { version, src, configfile, allowImportFromDerivation ? true }:
+    recurseIntoAttrs (packagesFor (manualConfig {
+      inherit version src configfile lib stdenv allowImportFromDerivation;
+    }));
+
+  # Derive one of the default .config files
+  linuxConfig = {
+    src,
+    version ? (builtins.parseDrvName src.name).version,
+    makeTarget ? "defconfig",
+    name ? "kernel.config",
+  }: stdenvNoCC.mkDerivation {
+    inherit name src;
+    depsBuildBuild = [ buildPackages.stdenv.cc ]
+      ++ lib.optionals (lib.versionAtLeast version "4.16") [ buildPackages.bison buildPackages.flex ];
+    postPatch = ''
+      patchShebangs scripts/
+    '';
+    buildPhase = ''
+      set -x
+      make \
+        ARCH=${stdenv.hostPlatform.linuxArch} \
+        HOSTCC=${buildPackages.stdenv.cc.targetPrefix}gcc \
+        ${makeTarget}
+    '';
+    installPhase = ''
+      cp .config $out
+    '';
+  };
+
+  buildLinux = attrs: callPackage ../os-specific/linux/kernel/generic.nix attrs;
+
+}