1{
2 lib,
3 buildLinux,
4 fetchurl,
5 kernelPatches ? [ ],
6 structuredExtraConfig ? { },
7 extraMeta ? { },
8 argsOverride ? { },
9 ...
10}@args:
11
12let
13 version = "5.15.183-rt85"; # updated by ./update-rt.sh
14 branch = lib.versions.majorMinor version;
15 kversion = builtins.elemAt (lib.splitString "-" version) 0;
16in
17buildLinux (
18 args
19 // {
20 inherit version;
21 pname = "linux-rt";
22
23 # modDirVersion needs a patch number, change X.Y-rtZ to X.Y.0-rtZ.
24 modDirVersion =
25 if (builtins.match "[^.]*[.][^.]*-.*" version) == null then
26 version
27 else
28 lib.replaceStrings [ "-" ] [ ".0-" ] version;
29
30 src = fetchurl {
31 url = "mirror://kernel/linux/kernel/v5.x/linux-${kversion}.tar.xz";
32 sha256 = "1s4fqm83api3xk0b443b4bhgrx7bx6n8bchdpmzahqadk9i7yvyh";
33 };
34
35 kernelPatches =
36 let
37 rt-patch = {
38 name = "rt";
39 patch = fetchurl {
40 url = "mirror://kernel/linux/kernel/projects/rt/${branch}/older/patch-${version}.patch.xz";
41 sha256 = "1jlrnjr2cwlfqxzq27wzz0r57bpissxs0s3nbdaj4bk92cd527c3";
42 };
43 };
44 in
45 [ rt-patch ] ++ kernelPatches;
46
47 structuredExtraConfig =
48 with lib.kernel;
49 {
50 PREEMPT_RT = yes;
51 # Fix error: unused option: PREEMPT_RT.
52 EXPERT = yes; # PREEMPT_RT depends on it (in kernel/Kconfig.preempt)
53 # Fix error: option not set correctly: PREEMPT_VOLUNTARY (wanted 'y', got 'n').
54 PREEMPT_VOLUNTARY = lib.mkForce no; # PREEMPT_RT deselects it.
55 # Fix error: unused option: RT_GROUP_SCHED.
56 RT_GROUP_SCHED = lib.mkForce (option no); # Removed by sched-disable-rt-group-sched-on-rt.patch.
57 }
58 // structuredExtraConfig;
59
60 extraMeta = extraMeta // {
61 inherit branch;
62 };
63 }
64 // argsOverride
65)