nixpkgs/pkgs/os-specific/linux/kernel
DS 1d7ee9ff09 doc: consolidate info on manual linux kernel configs
The Nixpkgs documentation on the linux kernel builders focused on
using and extending kernels that were already packaged, but never
mentioned that it's possible to also build a kernel almost "from
scratch".
The NixOS documentation went a bit deeper on manual linux kernel
configs, but that information wasn't particularly NixOS-specific.

This commit consolidates the information related to building the
kernel on Nixpkgs's documentation, while keeping any additional
NixOS-specific information on NixOS's documentation.

An additional README.md was created for contributor-facing
documentation.
2023-11-23 08:50:16 -08:00
..
hardened linux/hardened/patches/6.5: 6.5.8-hardened1 -> 6.5.10-hardened1 2023-11-08 13:03:35 +01:00
perf perf: enable perf stat evens supported by libpfm 2023-08-19 13:09:17 +01:00
bridge-stp-helper.patch
common-config.nix Merge remote-tracking branch 'origin/master' into staging-next 2023-11-13 14:31:51 -06:00
export-rt-sched-migrate.patch
generate-config.pl
generic.nix Merge master into staging-next 2023-11-03 06:01:08 +00:00
gpio-utils.nix
htmldocs.nix treewide: reduce packages I maintainer 2023-07-23 19:30:22 +02:00
kernels-org.json linux_4_14: 4.14.329 -> 4.14.330 2023-11-20 15:35:43 +01:00
linux-libre.nix linux_latest-libre: 19438 -> 19441 2023-11-12 09:37:26 +01:00
linux-rpi.nix
linux-rt-5.4.nix linux-rt_5_4: 5.4.254-rt85 -> 5.4.257-rt87 2023-10-02 08:23:52 +00:00
linux-rt-5.10.nix linux-rt_5_10: 5.10.197-rt96 -> 5.10.199-rt97 2023-11-13 15:33:39 +01:00
linux-rt-5.15.nix linux-rt_5_15: 5.15.133-rt70 -> 5.15.137-rt71 2023-11-02 13:37:41 +01:00
linux-rt-6.1.nix linux-rt_6_1: 6.1.54-rt15 -> 6.1.59-rt16 2023-10-25 13:50:09 +03:00
linux-testing-bcachefs.nix bcachefs: revert using json to hold bcachefs commits/hashes 2023-10-03 22:00:26 +01:00
mainline.nix linux: more update-script cleanups/fixes 2023-09-22 16:09:59 +03:00
manual-config.nix Merge pull request #262677 from Artturin/repick2 2023-10-22 10:57:38 +03:00
modinst-arg-list-too-long.patch
mptcp-config.nix
patches.nix linux/patches: remove cpu-cgroup-v2 2023-10-15 01:19:36 +02:00
randstruct-provide-seed-5.19.patch
randstruct-provide-seed.patch
README.md doc: consolidate info on manual linux kernel configs 2023-11-23 08:50:16 -08:00
request-key-helper-updated.patch
request-key-helper.patch
rtl8761b-support.patch
update-libre.sh
update-mainline.py linux/update-mainline.py: log to stderr 2023-10-02 20:21:45 +00:00
update-rt.sh
update-zen.py
update.sh linux: rewrite updater-script, make data-driven 2023-09-22 10:38:44 +03:00
xanmod-kernels.nix maintainers: fortuneteller2k -> moni 2023-11-17 18:03:27 +08:00
zen-kernels.nix linuxKernel.kernels.linux_lqx: 6.5.11-lqx2 -> 6.6.2-lqx1 2023-11-22 19:18:20 +01:00

How to add a new (major) version of the Linux kernel to Nixpkgs:

  1. Copy the old Nix expression (e.g., linux-2.6.21.nix) to the new one (e.g., linux-2.6.22.nix) and update it.

  2. Add the new kernel to the kernels attribute set in linux-kernels.nix (e.g., create an attribute kernel_2_6_22).

  3. Update the kernel configuration. First unpack the kernel. Then for each supported platform (i686, x86_64, uml) do the following:

    1. Make a copy from the old config (e.g., config-2.6.21-i686-smp) to the new one (e.g., config-2.6.22-i686-smp).

    2. Copy the config file for this platform (e.g., config-2.6.22-i686-smp) to .config in the kernel source tree.

    3. Run make oldconfig ARCH={i386,x86_64,um} and answer all questions. (For the uml configuration, also add SHELL=bash.) Make sure to keep the configuration consistent between platforms (i.e., dont enable some feature on i686 and disable it on x86_64).

    4. If needed, you can also run make menuconfig:

      $ nix-env -f "<nixpkgs>" -iA ncurses
      $ export NIX_CFLAGS_LINK=-lncurses
      $ make menuconfig ARCH=arch
      
    5. Copy .config over the new config file (e.g., config-2.6.22-i686-smp).

  4. Test building the kernel:

nix-build -A linuxKernel.kernels.kernel_2_6_22

If it compiles, ship it! For extra credit, try booting NixOS with it.

  1. It may be that the new kernel requires updating the external kernel modules and kernel-dependent packages listed in the linuxPackagesFor function in linux-kernels.nix (such as the NVIDIA drivers, AUFS, etc.). If the updated packages arent backwards compatible with older kernels, you may need to keep the older versions around.