Skip to content

Commit

Permalink
docs: howto: kernel_config
Browse files Browse the repository at this point in the history
  • Loading branch information
xieby1 committed Feb 12, 2025
1 parent 1c915b6 commit 1875a2b
Showing 1 changed file with 54 additions and 0 deletions.
54 changes: 54 additions & 0 deletions docs/howto/kernel_config.md
Original file line number Diff line number Diff line change
@@ -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`

0 comments on commit 1875a2b

Please sign in to comment.