a7f79620ac
The manual still had a reference to an option that was already renamed
ages ago and a7ed44ccad
made it 'visible'.
With the visible attribute set to false for extraKernelModules, the
option no longer appears in the manual and thus breaks the link from the
manual to the options.
This is easily fixed by referring to boot.initrd.kernelModules instead
of the obsolete option boot.initrd.extraKernelModules.
Signed-off-by: aszlig <aszlig@nix.build>
Cc: @rycee, @matthewbauer
87 lines
3.3 KiB
XML
87 lines
3.3 KiB
XML
<chapter xmlns="http://docbook.org/ns/docbook"
|
||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||
xmlns:xi="http://www.w3.org/2001/XInclude"
|
||
version="5.0"
|
||
xml:id="sec-kernel-config">
|
||
<title>Linux Kernel</title>
|
||
<para>
|
||
You can override the Linux kernel and associated packages using the option
|
||
<option>boot.kernelPackages</option>. For instance, this selects the Linux
|
||
3.10 kernel:
|
||
<programlisting>
|
||
<xref linkend="opt-boot.kernelPackages"/> = pkgs.linuxPackages_3_10;
|
||
</programlisting>
|
||
Note that this not only replaces the kernel, but also packages that are
|
||
specific to the kernel version, such as the NVIDIA video drivers. This
|
||
ensures that driver packages are consistent with the kernel.
|
||
</para>
|
||
<para>
|
||
The default Linux kernel configuration should be fine for most users. You can
|
||
see the configuration of your current kernel with the following command:
|
||
<programlisting>
|
||
zcat /proc/config.gz
|
||
</programlisting>
|
||
If you want to change the kernel configuration, you can use the
|
||
<option>packageOverrides</option> feature (see
|
||
<xref
|
||
linkend="sec-customising-packages" />). For instance, to enable support
|
||
for the kernel debugger KGDB:
|
||
<programlisting>
|
||
nixpkgs.config.packageOverrides = pkgs:
|
||
{ linux_3_4 = pkgs.linux_3_4.override {
|
||
extraConfig =
|
||
''
|
||
KGDB y
|
||
'';
|
||
};
|
||
};
|
||
</programlisting>
|
||
<varname>extraConfig</varname> takes a list of Linux kernel configuration
|
||
options, one per line. The name of the option should not include the prefix
|
||
<literal>CONFIG_</literal>. The option value is typically
|
||
<literal>y</literal>, <literal>n</literal> or <literal>m</literal> (to build
|
||
something as a kernel module).
|
||
</para>
|
||
<para>
|
||
Kernel modules for hardware devices are generally loaded automatically by
|
||
<command>udev</command>. You can force a module to be loaded via
|
||
<xref linkend="opt-boot.kernelModules"/>, e.g.
|
||
<programlisting>
|
||
<xref linkend="opt-boot.kernelModules"/> = [ "fuse" "kvm-intel" "coretemp" ];
|
||
</programlisting>
|
||
If the module is required early during the boot (e.g. to mount the root file
|
||
system), you can use <xref linkend="opt-boot.initrd.kernelModules"/>:
|
||
<programlisting>
|
||
<xref linkend="opt-boot.initrd.kernelModules"/> = [ "cifs" ];
|
||
</programlisting>
|
||
This causes the specified modules and their dependencies to be added to the
|
||
initial ramdisk.
|
||
</para>
|
||
<para>
|
||
Kernel runtime parameters can be set through
|
||
<xref linkend="opt-boot.kernel.sysctl"/>, e.g.
|
||
<programlisting>
|
||
<xref linkend="opt-boot.kernel.sysctl"/>."net.ipv4.tcp_keepalive_time" = 120;
|
||
</programlisting>
|
||
sets the kernel’s TCP keepalive time to 120 seconds. To see the available
|
||
parameters, run <command>sysctl -a</command>.
|
||
</para>
|
||
<section>
|
||
<title>Developing kernel modules</title>
|
||
|
||
<para>
|
||
When developing kernel modules it's often convenient to run edit-compile-run
|
||
loop as quickly as possible. See below snippet as an example of developing
|
||
<literal>mellanox</literal> drivers.
|
||
</para>
|
||
|
||
<screen><![CDATA[
|
||
$ nix-build '<nixpkgs>' -A linuxPackages.kernel.dev
|
||
$ nix-shell '<nixpkgs>' -A linuxPackages.kernel
|
||
$ unpackPhase
|
||
$ cd linux-*
|
||
$ make -C $dev/lib/modules/*/build M=$(pwd)/drivers/net/ethernet/mellanox modules
|
||
# insmod ./drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.ko
|
||
]]></screen>
|
||
</section>
|
||
</chapter>
|