From 1875a2b54efffc6bbe4b7b3210aa45c0f0dbc36f Mon Sep 17 00:00:00 2001 From: xieby1 Date: Wed, 12 Feb 2025 10:52:21 +0800 Subject: [PATCH] docs: howto: kernel_config --- docs/howto/kernel_config.md | 54 +++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 docs/howto/kernel_config.md diff --git a/docs/howto/kernel_config.md b/docs/howto/kernel_config.md new file mode 100644 index 00000000..d4f553ea --- /dev/null +++ b/docs/howto/kernel_config.md @@ -0,0 +1,54 @@ +# How To Config Linux Kernel in Nix + +Basic configuration tricks referring to [nixos.wiki: Linux Kernel](https://nixos.wiki/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 to `pkgs/os-specific/linux/kernel/mainline.nix` +* ❷ `argsOverride` in `override (old: {argsOverride = {...} })` is applied to `pkgs/os-specific/linux/kernel/generic.nix` +* ❸ `overrideAttrs` is applied to `pkgs/os-specific/linux/kernel/manual-config.nix`