-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
54 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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` |