1.. _changes:
2
3Minimal requirements to compile the Kernel
4++++++++++++++++++++++++++++++++++++++++++
5
6Intro
7=====
8
9This document is designed to provide a list of the minimum levels of
10software necessary to run the 4.x kernels.
11
12This document is originally based on my "Changes" file for 2.0.x kernels
13and therefore owes credit to the same people as that file (Jared Mauch,
14Axel Boldt, Alessandro Sigala, and countless other users all over the
15'net).
16
17Current Minimal Requirements
18****************************
19
20Upgrade to at **least** these software revisions before thinking you've
21encountered a bug!  If you're unsure what version you're currently
22running, the suggested command should tell you.
23
24Again, keep in mind that this list assumes you are already functionally
25running a Linux kernel.  Also, not all tools are necessary on all
26systems; obviously, if you don't have any PC Card hardware, for example,
27you probably needn't concern yourself with pcmciautils.
28
29====================== ===============  ========================================
30        Program        Minimal version       Command to check the version
31====================== ===============  ========================================
32GNU C                  5.1              gcc --version
33Clang/LLVM (optional)  10.0.1           clang --version
34GNU make               3.81             make --version
35binutils               2.23             ld -v
36flex                   2.5.35           flex --version
37bison                  2.0              bison --version
38pahole                 1.16             pahole --version
39util-linux             2.10o            fdformat --version
40kmod                   13               depmod -V
41e2fsprogs              1.41.4           e2fsck -V
42jfsutils               1.1.3            fsck.jfs -V
43reiserfsprogs          3.6.3            reiserfsck -V
44xfsprogs               2.6.0            xfs_db -V
45squashfs-tools         4.0              mksquashfs -version
46btrfs-progs            0.18             btrfsck
47pcmciautils            004              pccardctl -V
48quota-tools            3.09             quota -V
49PPP                    2.4.0            pppd --version
50nfs-utils              1.0.5            showmount --version
51procps                 3.2.0            ps --version
52udev                   081              udevd --version
53grub                   0.93             grub --version || grub-install --version
54mcelog                 0.6              mcelog --version
55iptables               1.4.2            iptables -V
56openssl & libcrypto    1.0.0            openssl version
57bc                     1.06.95          bc --version
58Sphinx\ [#f1]_         1.7              sphinx-build --version
59====================== ===============  ========================================
60
61.. [#f1] Sphinx is needed only to build the Kernel documentation
62
63Kernel compilation
64******************
65
66GCC
67---
68
69The gcc version requirements may vary depending on the type of CPU in your
70computer.
71
72Clang/LLVM (optional)
73---------------------
74
75The latest formal release of clang and LLVM utils (according to
76`releases.llvm.org <https://releases.llvm.org>`_) are supported for building
77kernels. Older releases aren't guaranteed to work, and we may drop workarounds
78from the kernel that were used to support older versions. Please see additional
79docs on :ref:`Building Linux with Clang/LLVM <kbuild_llvm>`.
80
81Make
82----
83
84You will need GNU make 3.81 or later to build the kernel.
85
86Binutils
87--------
88
89Binutils 2.23 or newer is needed to build the kernel.
90
91pkg-config
92----------
93
94The build system, as of 4.18, requires pkg-config to check for installed
95kconfig tools and to determine flags settings for use in
96'make {g,x}config'.  Previously pkg-config was being used but not
97verified or documented.
98
99Flex
100----
101
102Since Linux 4.16, the build system generates lexical analyzers
103during build.  This requires flex 2.5.35 or later.
104
105
106Bison
107-----
108
109Since Linux 4.16, the build system generates parsers
110during build.  This requires bison 2.0 or later.
111
112pahole:
113-------
114
115Since Linux 5.2, if CONFIG_DEBUG_INFO_BTF is selected, the build system
116generates BTF (BPF Type Format) from DWARF in vmlinux, a bit later from kernel
117modules as well.  This requires pahole v1.16 or later.
118
119It is found in the 'dwarves' or 'pahole' distro packages or from
120https://fedorapeople.org/~acme/dwarves/.
121
122Perl
123----
124
125You will need perl 5 and the following modules: ``Getopt::Long``,
126``Getopt::Std``, ``File::Basename``, and ``File::Find`` to build the kernel.
127
128BC
129--
130
131You will need bc to build kernels 3.10 and higher
132
133
134OpenSSL
135-------
136
137Module signing and external certificate handling use the OpenSSL program and
138crypto library to do key creation and signature generation.
139
140You will need openssl to build kernels 3.7 and higher if module signing is
141enabled.  You will also need openssl development packages to build kernels 4.3
142and higher.
143
144
145System utilities
146****************
147
148Architectural changes
149---------------------
150
151DevFS has been obsoleted in favour of udev
152(https://www.kernel.org/pub/linux/utils/kernel/hotplug/)
153
15432-bit UID support is now in place.  Have fun!
155
156Linux documentation for functions is transitioning to inline
157documentation via specially-formatted comments near their
158definitions in the source.  These comments can be combined with ReST
159files the Documentation/ directory to make enriched documentation, which can
160then be converted to PostScript, HTML, LaTex, ePUB and PDF files.
161In order to convert from ReST format to a format of your choice, you'll need
162Sphinx.
163
164Util-linux
165----------
166
167New versions of util-linux provide ``fdisk`` support for larger disks,
168support new options to mount, recognize more supported partition
169types, have a fdformat which works with 2.4 kernels, and similar goodies.
170You'll probably want to upgrade.
171
172Ksymoops
173--------
174
175If the unthinkable happens and your kernel oopses, you may need the
176ksymoops tool to decode it, but in most cases you don't.
177It is generally preferred to build the kernel with ``CONFIG_KALLSYMS`` so
178that it produces readable dumps that can be used as-is (this also
179produces better output than ksymoops).  If for some reason your kernel
180is not build with ``CONFIG_KALLSYMS`` and you have no way to rebuild and
181reproduce the Oops with that option, then you can still decode that Oops
182with ksymoops.
183
184Mkinitrd
185--------
186
187These changes to the ``/lib/modules`` file tree layout also require that
188mkinitrd be upgraded.
189
190E2fsprogs
191---------
192
193The latest version of ``e2fsprogs`` fixes several bugs in fsck and
194debugfs.  Obviously, it's a good idea to upgrade.
195
196JFSutils
197--------
198
199The ``jfsutils`` package contains the utilities for the file system.
200The following utilities are available:
201
202- ``fsck.jfs`` - initiate replay of the transaction log, and check
203  and repair a JFS formatted partition.
204
205- ``mkfs.jfs`` - create a JFS formatted partition.
206
207- other file system utilities are also available in this package.
208
209Reiserfsprogs
210-------------
211
212The reiserfsprogs package should be used for reiserfs-3.6.x
213(Linux kernels 2.4.x). It is a combined package and contains working
214versions of ``mkreiserfs``, ``resize_reiserfs``, ``debugreiserfs`` and
215``reiserfsck``. These utils work on both i386 and alpha platforms.
216
217Xfsprogs
218--------
219
220The latest version of ``xfsprogs`` contains ``mkfs.xfs``, ``xfs_db``, and the
221``xfs_repair`` utilities, among others, for the XFS filesystem.  It is
222architecture independent and any version from 2.0.0 onward should
223work correctly with this version of the XFS kernel code (2.6.0 or
224later is recommended, due to some significant improvements).
225
226PCMCIAutils
227-----------
228
229PCMCIAutils replaces ``pcmcia-cs``. It properly sets up
230PCMCIA sockets at system startup and loads the appropriate modules
231for 16-bit PCMCIA devices if the kernel is modularized and the hotplug
232subsystem is used.
233
234Quota-tools
235-----------
236
237Support for 32 bit uid's and gid's is required if you want to use
238the newer version 2 quota format.  Quota-tools version 3.07 and
239newer has this support.  Use the recommended version or newer
240from the table above.
241
242Intel IA32 microcode
243--------------------
244
245A driver has been added to allow updating of Intel IA32 microcode,
246accessible as a normal (misc) character device.  If you are not using
247udev you may need to::
248
249  mkdir /dev/cpu
250  mknod /dev/cpu/microcode c 10 184
251  chmod 0644 /dev/cpu/microcode
252
253as root before you can use this.  You'll probably also want to
254get the user-space microcode_ctl utility to use with this.
255
256udev
257----
258
259``udev`` is a userspace application for populating ``/dev`` dynamically with
260only entries for devices actually present. ``udev`` replaces the basic
261functionality of devfs, while allowing persistent device naming for
262devices.
263
264FUSE
265----
266
267Needs libfuse 2.4.0 or later.  Absolute minimum is 2.3.0 but mount
268options ``direct_io`` and ``kernel_cache`` won't work.
269
270Networking
271**********
272
273General changes
274---------------
275
276If you have advanced network configuration needs, you should probably
277consider using the network tools from ip-route2.
278
279Packet Filter / NAT
280-------------------
281The packet filtering and NAT code uses the same tools like the previous 2.4.x
282kernel series (iptables).  It still includes backwards-compatibility modules
283for 2.2.x-style ipchains and 2.0.x-style ipfwadm.
284
285PPP
286---
287
288The PPP driver has been restructured to support multilink and to
289enable it to operate over diverse media layers.  If you use PPP,
290upgrade pppd to at least 2.4.0.
291
292If you are not using udev, you must have the device file /dev/ppp
293which can be made by::
294
295  mknod /dev/ppp c 108 0
296
297as root.
298
299NFS-utils
300---------
301
302In ancient (2.4 and earlier) kernels, the nfs server needed to know
303about any client that expected to be able to access files via NFS.  This
304information would be given to the kernel by ``mountd`` when the client
305mounted the filesystem, or by ``exportfs`` at system startup.  exportfs
306would take information about active clients from ``/var/lib/nfs/rmtab``.
307
308This approach is quite fragile as it depends on rmtab being correct
309which is not always easy, particularly when trying to implement
310fail-over.  Even when the system is working well, ``rmtab`` suffers from
311getting lots of old entries that never get removed.
312
313With modern kernels we have the option of having the kernel tell mountd
314when it gets a request from an unknown host, and mountd can give
315appropriate export information to the kernel.  This removes the
316dependency on ``rmtab`` and means that the kernel only needs to know about
317currently active clients.
318
319To enable this new functionality, you need to::
320
321  mount -t nfsd nfsd /proc/fs/nfsd
322
323before running exportfs or mountd.  It is recommended that all NFS
324services be protected from the internet-at-large by a firewall where
325that is possible.
326
327mcelog
328------
329
330On x86 kernels the mcelog utility is needed to process and log machine check
331events when ``CONFIG_X86_MCE`` is enabled. Machine check events are errors
332reported by the CPU. Processing them is strongly encouraged.
333
334Kernel documentation
335********************
336
337Sphinx
338------
339
340Please see :ref:`sphinx_install` in :ref:`Documentation/doc-guide/sphinx.rst <sphinxdoc>`
341for details about Sphinx requirements.
342
343Getting updated software
344========================
345
346Kernel compilation
347******************
348
349gcc
350---
351
352- <ftp://ftp.gnu.org/gnu/gcc/>
353
354Clang/LLVM
355----------
356
357- :ref:`Getting LLVM <getting_llvm>`.
358
359Make
360----
361
362- <ftp://ftp.gnu.org/gnu/make/>
363
364Binutils
365--------
366
367- <https://www.kernel.org/pub/linux/devel/binutils/>
368
369Flex
370----
371
372- <https://github.com/westes/flex/releases>
373
374Bison
375-----
376
377- <ftp://ftp.gnu.org/gnu/bison/>
378
379OpenSSL
380-------
381
382- <https://www.openssl.org/>
383
384System utilities
385****************
386
387Util-linux
388----------
389
390- <https://www.kernel.org/pub/linux/utils/util-linux/>
391
392Kmod
393----
394
395- <https://www.kernel.org/pub/linux/utils/kernel/kmod/>
396- <https://git.kernel.org/pub/scm/utils/kernel/kmod/kmod.git>
397
398Ksymoops
399--------
400
401- <https://www.kernel.org/pub/linux/utils/kernel/ksymoops/v2.4/>
402
403Mkinitrd
404--------
405
406- <https://code.launchpad.net/initrd-tools/main>
407
408E2fsprogs
409---------
410
411- <https://www.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/>
412- <https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git/>
413
414JFSutils
415--------
416
417- <http://jfs.sourceforge.net/>
418
419Reiserfsprogs
420-------------
421
422- <https://git.kernel.org/pub/scm/linux/kernel/git/jeffm/reiserfsprogs.git/>
423
424Xfsprogs
425--------
426
427- <https://git.kernel.org/pub/scm/fs/xfs/xfsprogs-dev.git>
428- <https://www.kernel.org/pub/linux/utils/fs/xfs/xfsprogs/>
429
430Pcmciautils
431-----------
432
433- <https://www.kernel.org/pub/linux/utils/kernel/pcmcia/>
434
435Quota-tools
436-----------
437
438- <http://sourceforge.net/projects/linuxquota/>
439
440
441Intel P6 microcode
442------------------
443
444- <https://downloadcenter.intel.com/>
445
446udev
447----
448
449- <https://www.freedesktop.org/software/systemd/man/udev.html>
450
451FUSE
452----
453
454- <https://github.com/libfuse/libfuse/releases>
455
456mcelog
457------
458
459- <http://www.mcelog.org/>
460
461Networking
462**********
463
464PPP
465---
466
467- <https://download.samba.org/pub/ppp/>
468- <https://git.ozlabs.org/?p=ppp.git>
469- <https://github.com/paulusmack/ppp/>
470
471NFS-utils
472---------
473
474- <http://sourceforge.net/project/showfiles.php?group_id=14>
475
476Iptables
477--------
478
479- <https://netfilter.org/projects/iptables/index.html>
480
481Ip-route2
482---------
483
484- <https://www.kernel.org/pub/linux/utils/net/iproute2/>
485
486OProfile
487--------
488
489- <http://oprofile.sf.net/download/>
490
491NFS-Utils
492---------
493
494- <http://nfs.sourceforge.net/>
495
496Kernel documentation
497********************
498
499Sphinx
500------
501
502- <https://www.sphinx-doc.org/>
503