summary refs log tree commit diff
path: root/nixos/doc
diff options
context:
space:
mode:
authorMatthieu Coudron <mattator@gmail.com>2017-11-30 05:09:00 +0900
committerTuomas Tynkkynen <tuomas.tynkkynen@iki.fi>2018-06-08 10:36:21 +0300
commiteb7e0d42dbe44a452dcbf9afea979ac9591c2fd1 (patch)
tree5bf4d60f359a08bb9313979fdd9ab91d9e8309b6 /nixos/doc
parent6bde64f6db7a9a4732886773278c6054383f4eb3 (diff)
downloadnixpkgs-eb7e0d42dbe44a452dcbf9afea979ac9591c2fd1.tar
nixpkgs-eb7e0d42dbe44a452dcbf9afea979ac9591c2fd1.tar.gz
nixpkgs-eb7e0d42dbe44a452dcbf9afea979ac9591c2fd1.tar.bz2
nixpkgs-eb7e0d42dbe44a452dcbf9afea979ac9591c2fd1.tar.lz
nixpkgs-eb7e0d42dbe44a452dcbf9afea979ac9591c2fd1.tar.xz
nixpkgs-eb7e0d42dbe44a452dcbf9afea979ac9591c2fd1.tar.zst
nixpkgs-eb7e0d42dbe44a452dcbf9afea979ac9591c2fd1.zip
doc: Explain how to hack on kernel
Presents the options available (linuxManualConfig versus overriding
extraConfig, ignoreConfigErrors, autoModules, kernelPreferBuiltin.

For advanced hostPlatform customization refer to the commands shared by ericson1234 at
https://github.com/NixOS/nixpkgs/pull/33813 but it is too advanced to
put in the doc.
Diffstat (limited to 'nixos/doc')
-rw-r--r--nixos/doc/manual/configuration/linux-kernel.xml51
1 files changed, 51 insertions, 0 deletions
diff --git a/nixos/doc/manual/configuration/linux-kernel.xml b/nixos/doc/manual/configuration/linux-kernel.xml
index 6502aaec83e..f4d697c42db 100644
--- a/nixos/doc/manual/configuration/linux-kernel.xml
+++ b/nixos/doc/manual/configuration/linux-kernel.xml
@@ -67,6 +67,57 @@ nixpkgs.config.packageOverrides = pkgs:
   parameters, run <command>sysctl -a</command>.
  </para>
  <section>
+  <title>Customize your kernel</title>
+
+  <para>
+   The first step before compiling the kernel is to generate an appropriate
+   <literal>.config</literal> configuration. Either you pass your own config via
+   the <literal>configfile</literal> setting of <literal>linuxManualConfig</literal>:
+  <screen><![CDATA[
+  custom-kernel = super.linuxManualConfig {
+    inherit (super) stdenv hostPlatform;
+    inherit (linux_4_9) src;
+    version = "${linux_4_9.version}-custom";
+
+    configfile = /home/me/my_kernel_config;
+    allowImportFromDerivation = true;
+  };
+  ]]></screen>
+
+You can edit the config with this snippet (by default <command>make menuconfig</command> won't work
+  out of the box on nixos):
+  <screen><![CDATA[
+      nix-shell -E 'with import <nixpkgs> {}; kernelToOverride.overrideAttrs (o: {nativeBuildInputs=o.nativeBuildInputs ++ [ pkgconfig ncurses ];})'
+  ]]></screen>
+
+
+  or you can let nixpkgs generate the configuration.
+  Nixpkgs generates it via answering the interactive kernel utility <command>make config</command>.
+  The answers depend on parameters passed to <filename>pkgs/os-specific/linux/kernel/generic.nix</filename>
+  (which you can influence by overriding <literal>extraConfig, autoModules, modDirVersion, preferBuiltin, extraConfig</literal>).
+<screen><![CDATA[
+
+  mptcp93.override ({
+      name="mptcp-local";
+
+      ignoreConfigErrors = true;
+      autoModules = false;
+      kernelPreferBuiltin = true;
+
+      enableParallelBuilding = true;
+
+      extraConfig = ''
+        DEBUG_KERNEL y
+        FRAME_POINTER y
+        KGDB y
+        KGDB_SERIAL_CONSOLE y
+        DEBUG_INFO y
+      '';
+    });
+  ]]></screen>
+  </para>
+ </section>
+ <section>
   <title>Developing kernel modules</title>
 
   <para>