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