nixpkgs/pkgs/os-specific/linux/kernel/README.md
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

1.8 KiB
Raw Blame History

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.