How To Config Linux Kernel in Nix
Basic configuration tricks referring to nixos.wiki: Linux Kernel.
The Override System in Kernel
What do the pkgs.linux.override
, pkgs.linux.overrideAttrs
override?
To answer these questions, we need first to explore how kernel derivation is generated.
When we type pkgs.linux
, how this derivation is generated by nix?
* pkgs.linux
* pkgs/top-level/all-packages:
* linuxPackages.kernel;
* (linuxPackages = linuxKernel.packageAliases.linux_default).kernel;
* (linuxPackages = (linuxKernel = recurseIntoAttrs (callPackage ./linux-kernels.nix { });).packageAliases.linux_default).kernel;
* (recurseIntoAttrs (callPackage ./linux-kernels.nix { });).packageAliases.linux_default.kernel;
* pkgs/top-level/linux-kernels.nix:
* packages.linux_6_6.kernel;
* (recurseIntoAttrs (vanillaPackages // rtPackages // rpiPackages // { ... })).linux_6_6.kernel
* (recurseIntoAttrs ({...; linux_6_6 = recurseIntoAttrs (packagesFor kernels.linux_6_6);...} // rtPackages // rpiPackages // { ... })).linux_6_6.kernel
* (packagesFor kernels.linux_6_6).kernel
* ((kernel_: {kernel = kernel_;}) kernels.linux_6_6).kernel
* kernels.linux_6_6
* ❶callPackage ../os-specific/linux/kernel/mainline.nix {
branch = "6.6";
kernelPatches = [
kernelPatches.bridge_stp_helper
kernelPatches.request_key_helper
];
};
* pkgs/os-specific/linux/kernel/mainline.nix
* buildLinux args'
* ❷buildLinux ((builtins.removeAttrs args [ "branch" ])
// {
inherit src version;
modDirVersion = lib.versions.pad 3 version;
extraMeta.branch = branch;
}
// (args.argsOverride or { }))
* (callPackage pkgs/os-specific/linux/kernel/generic.nix {}) args'
* overridableKernel args'
* (lib.makeOverridable ({...}: kernel.overrideAttrs (...))) args'
* kernel.overrideAttrs (...)
* ❸((callPackage ./manual-config.nix { inherit lib stdenv buildPackages; }) (basicArgs // { ... })).overrideAttrs (...)
因此
- ❶
override
is applied topkgs/os-specific/linux/kernel/mainline.nix
- ❷
argsOverride
inoverride (old: {argsOverride = {...} })
is applied topkgs/os-specific/linux/kernel/generic.nix
- ❸
overrideAttrs
is applied topkgs/os-specific/linux/kernel/manual-config.nix