Linux kernel: Difference between revisions
→Custom configuration: emphasise structuredExtraConfig and note what actually causes the "unused option" errors |
m prefix shell comments with $ to get "comment" highlighting instead of "root shell" |
||
| (9 intermediate revisions by 8 users not shown) | |||
| Line 24: | Line 24: | ||
</syntaxHighlight> | </syntaxHighlight> | ||
<syntaxhighlight lang="nix"> | <syntaxhighlight lang="nix"> | ||
nix-repl> | nix-repl> pkgs = import <nixpkgs> {} | ||
Added 12607 variables. | Added 12607 variables. | ||
nix-repl> pkgs. | nix-repl> pkgs.linuxKernel.packages | ||
pkgs.linuxPackages pkgs.linuxPackages_custom | pkgs.linuxPackages pkgs.linuxPackages_custom | ||
pkgs.linuxPackages-libre pkgs.linuxPackages_custom_tinyconfig_kernel | pkgs.linuxPackages-libre pkgs.linuxPackages_custom_tinyconfig_kernel | ||
| Line 130: | Line 130: | ||
name = "crashdump-config"; | name = "crashdump-config"; | ||
patch = null; | patch = null; | ||
structuredExtraConfig = { | structuredExtraConfig = with lib.kernel; { | ||
CRASH_DUMP = | CRASH_DUMP = yes; | ||
DEBUG_INFO = | DEBUG_INFO = yes; | ||
PROC_VMCORE = | PROC_VMCORE = yes; | ||
LOCKUP_DETECTOR = | LOCKUP_DETECTOR = yes; | ||
HARDLOCKUP_DETECTOR = | HARDLOCKUP_DETECTOR = yes; | ||
}; | }; | ||
} ]; | } ]; | ||
| Line 142: | Line 142: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Another way is to create an overlay to configure {{ic|structuredExtraConfig}}. This allows for more flexibility, since you can basically override any available kernel option<ref>[https://github.com/NixOS/nixpkgs/blob/e6db435973160591fe7348876a5567c729495175/pkgs/os-specific/linux/kernel/generic.nix#L11-L56<tt>pkgs/os-specific/linux/kernel/generic.nix#L11-L56</tt>]</ref>. | |||
Another way is to create an overlay to configure | |||
{{file|/etc/nixos/configuration.nix|nix|<nowiki> | {{file|/etc/nixos/configuration.nix|nix|<nowiki> | ||
| Line 189: | Line 179: | ||
} | } | ||
</nowiki>}} | </nowiki>}} | ||
Note that pinning the kernel version will likely require manual recompilation, which may be slow on older hardware. See [https://discourse.nixos.org/t/pin-kernel-version/50630/3 this thread] for a related discussion. | |||
=== Debugging a failed configuration === | === Debugging a failed configuration === | ||
| Line 249: | Line 241: | ||
Please provide a comparison with other distributions' kernel: | Please provide a comparison with other distributions' kernel: | ||
* Arch: https://gitlab.archlinux.org/archlinux/packaging/packages/linux/-/blob/main/config | |||
* Debian: https://salsa.debian.org/kernel-team/linux/blob/master/debian/config/config and the ARCH specific ones | |||
== Booting a kernel from a custom source == | == Booting a kernel from a custom source == | ||
| Line 274: | Line 267: | ||
kernelPatches = []; | kernelPatches = []; | ||
structuredExtraConfig = with lib.kernel; { | |||
INTEL_SGX | INTEL_SGX = yes; | ||
}; | |||
extraMeta.branch = "5.4"; | extraMeta.branch = "5.4"; | ||
| Line 299: | Line 292: | ||
owner = "aramg"; | owner = "aramg"; | ||
repo = "droidcam"; | repo = "droidcam"; | ||
tag = "v${version}"; | |||
hash = "1d9qpnmqa3pfwsrpjnxdz76ipk4w37bbxyrazchh4vslnfc886fx"; | hash = "1d9qpnmqa3pfwsrpjnxdz76ipk4w37bbxyrazchh4vslnfc886fx"; | ||
}; | }; | ||
| Line 453: | Line 446: | ||
<syntaxHighlight lang=console> | <syntaxHighlight lang=console> | ||
$ nix-shell | $ nix-shell | ||
# to configure | $ # to configure | ||
$ nix-shell> make $makeFlags defconfig -j $(nproc) | $ nix-shell> make $makeFlags defconfig -j $(nproc) | ||
# to build | $ # to build | ||
$ nix-shell> make $makeFlags -j $(nproc) | $ nix-shell> make $makeFlags -j $(nproc) | ||
</syntaxHighlight> | </syntaxHighlight> | ||
| Line 474: | Line 467: | ||
<syntaxHighlight lang=console> | <syntaxHighlight lang=console> | ||
$ nix-shell | $ nix-shell | ||
# to configure | $ # to configure | ||
$ nix-shell> make $makeFlags defconfig -j $(nproc) | $ nix-shell> make $makeFlags defconfig -j $(nproc) | ||
# to build | $ # to build | ||
$ nix-shell> make $makeFlags -j $(nproc) | $ nix-shell> make $makeFlags -j $(nproc) | ||
</syntaxHighlight> | </syntaxHighlight> | ||
| Line 482: | Line 475: | ||
=== Overriding kernel packages === | === Overriding kernel packages === | ||
In order to override <code>linuxPackages</code>, use the <code>extend</code> attribute. Example: | In order to override <code>linuxPackages</code>, an alias of <code>linuxKernel.packages</code>, use the <code>extend</code> attribute. Example: | ||
<syntaxHighlight lang=nix> | <syntaxHighlight lang=nix> | ||
| Line 506: | Line 499: | ||
}) | }) | ||
]; | ]; | ||
</syntaxHighlight> | |||
You can also use <code>kernelPackagesExtensions</code> in a similar fashion to override <code>linuxKernel.packages</code>: | |||
<syntaxHighlight lang=nix> | |||
nixpkgs.overlays = [ | |||
(_: prev: { | |||
kernelPackagesExtensions = prev.kernelPackagesExtensions ++ [ | |||
(_: linuxPrev: { | |||
digimend = linuxPrev.digimend.overrideAttrs (prevAttrs: { | |||
postPatch = prevAttrs.postPatch or "" + '' | |||
substituteInPlace "hid-uclogic-core.c" \ | |||
--replace-fail "del_timer_sync" "timer_shutdown_sync" | |||
''; | |||
}); | |||
}) | |||
]; | |||
}) | |||
]; | |||
</syntaxHighlight> | </syntaxHighlight> | ||
| Line 602: | Line 614: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== See also == | == See also == | ||