3 Minimal requirements to compile the Kernel
4 ++++++++++++++++++++++++++++++++++++++++++
9 This document is designed to provide a list of the minimum levels of
10 software necessary to run the 4.x kernels.
12 This document is originally based on my "Changes" file for 2.0.x kernels
13 and therefore owes credit to the same people as that file (Jared Mauch,
14 Axel Boldt, Alessandro Sigala, and countless other users all over the
17 Current Minimal Requirements
18 ****************************
20 Upgrade to at **least** these software revisions before thinking you've
21 encountered a bug! If you're unsure what version you're currently
22 running, the suggested command should tell you.
24 Again, keep in mind that this list assumes you are already functionally
25 running a Linux kernel. Also, not all tools are necessary on all
26 systems; obviously, if you don't have any PC Card hardware, for example,
27 you probably needn't concern yourself with pcmciautils.
29 ====================== =============== ========================================
30 Program Minimal version Command to check the version
31 ====================== =============== ========================================
32 GNU C 5.1 gcc --version
33 Clang/LLVM (optional) 11.0.0 clang --version
34 GNU make 3.81 make --version
36 flex 2.5.35 flex --version
37 bison 2.0 bison --version
38 pahole 1.16 pahole --version
39 util-linux 2.10o fdformat --version
41 e2fsprogs 1.41.4 e2fsck -V
42 jfsutils 1.1.3 fsck.jfs -V
43 reiserfsprogs 3.6.3 reiserfsck -V
44 xfsprogs 2.6.0 xfs_db -V
45 squashfs-tools 4.0 mksquashfs -version
46 btrfs-progs 0.18 btrfsck
47 pcmciautils 004 pccardctl -V
48 quota-tools 3.09 quota -V
49 PPP 2.4.0 pppd --version
50 nfs-utils 1.0.5 showmount --version
51 procps 3.2.0 ps --version
52 udev 081 udevd --version
53 grub 0.93 grub --version || grub-install --version
54 mcelog 0.6 mcelog --version
55 iptables 1.4.2 iptables -V
56 openssl & libcrypto 1.0.0 openssl version
57 bc 1.06.95 bc --version
58 Sphinx\ [#f1]_ 1.7 sphinx-build --version
59 ====================== =============== ========================================
61 .. [#f1] Sphinx is needed only to build the Kernel documentation
69 The gcc version requirements may vary depending on the type of CPU in your
75 The latest formal release of clang and LLVM utils (according to
76 `releases.llvm.org <https://releases.llvm.org>`_) are supported for building
77 kernels. Older releases aren't guaranteed to work, and we may drop workarounds
78 from the kernel that were used to support older versions. Please see additional
79 docs on :ref:`Building Linux with Clang/LLVM <kbuild_llvm>`.
84 You will need GNU make 3.81 or later to build the kernel.
89 Binutils 2.23 or newer is needed to build the kernel.
94 The build system, as of 4.18, requires pkg-config to check for installed
95 kconfig tools and to determine flags settings for use in
96 'make {g,x}config'. Previously pkg-config was being used but not
97 verified or documented.
102 Since Linux 4.16, the build system generates lexical analyzers
103 during build. This requires flex 2.5.35 or later.
109 Since Linux 4.16, the build system generates parsers
110 during build. This requires bison 2.0 or later.
115 Since Linux 5.2, if CONFIG_DEBUG_INFO_BTF is selected, the build system
116 generates BTF (BPF Type Format) from DWARF in vmlinux, a bit later from kernel
117 modules as well. This requires pahole v1.16 or later.
119 It is found in the 'dwarves' or 'pahole' distro packages or from
120 https://fedorapeople.org/~acme/dwarves/.
125 You will need perl 5 and the following modules: ``Getopt::Long``,
126 ``Getopt::Std``, ``File::Basename``, and ``File::Find`` to build the kernel.
131 You will need bc to build kernels 3.10 and higher
137 Module signing and external certificate handling use the OpenSSL program and
138 crypto library to do key creation and signature generation.
140 You will need openssl to build kernels 3.7 and higher if module signing is
141 enabled. You will also need openssl development packages to build kernels 4.3
148 Architectural changes
149 ---------------------
151 DevFS has been obsoleted in favour of udev
152 (https://www.kernel.org/pub/linux/utils/kernel/hotplug/)
154 32-bit UID support is now in place. Have fun!
156 Linux documentation for functions is transitioning to inline
157 documentation via specially-formatted comments near their
158 definitions in the source. These comments can be combined with ReST
159 files the Documentation/ directory to make enriched documentation, which can
160 then be converted to PostScript, HTML, LaTex, ePUB and PDF files.
161 In order to convert from ReST format to a format of your choice, you'll need
167 New versions of util-linux provide ``fdisk`` support for larger disks,
168 support new options to mount, recognize more supported partition
169 types, have a fdformat which works with 2.4 kernels, and similar goodies.
170 You'll probably want to upgrade.
175 If the unthinkable happens and your kernel oopses, you may need the
176 ksymoops tool to decode it, but in most cases you don't.
177 It is generally preferred to build the kernel with ``CONFIG_KALLSYMS`` so
178 that it produces readable dumps that can be used as-is (this also
179 produces better output than ksymoops). If for some reason your kernel
180 is not build with ``CONFIG_KALLSYMS`` and you have no way to rebuild and
181 reproduce the Oops with that option, then you can still decode that Oops
187 These changes to the ``/lib/modules`` file tree layout also require that
188 mkinitrd be upgraded.
193 The latest version of ``e2fsprogs`` fixes several bugs in fsck and
194 debugfs. Obviously, it's a good idea to upgrade.
199 The ``jfsutils`` package contains the utilities for the file system.
200 The following utilities are available:
202 - ``fsck.jfs`` - initiate replay of the transaction log, and check
203 and repair a JFS formatted partition.
205 - ``mkfs.jfs`` - create a JFS formatted partition.
207 - other file system utilities are also available in this package.
212 The reiserfsprogs package should be used for reiserfs-3.6.x
213 (Linux kernels 2.4.x). It is a combined package and contains working
214 versions of ``mkreiserfs``, ``resize_reiserfs``, ``debugreiserfs`` and
215 ``reiserfsck``. These utils work on both i386 and alpha platforms.
220 The latest version of ``xfsprogs`` contains ``mkfs.xfs``, ``xfs_db``, and the
221 ``xfs_repair`` utilities, among others, for the XFS filesystem. It is
222 architecture independent and any version from 2.0.0 onward should
223 work correctly with this version of the XFS kernel code (2.6.0 or
224 later is recommended, due to some significant improvements).
229 PCMCIAutils replaces ``pcmcia-cs``. It properly sets up
230 PCMCIA sockets at system startup and loads the appropriate modules
231 for 16-bit PCMCIA devices if the kernel is modularized and the hotplug
237 Support for 32 bit uid's and gid's is required if you want to use
238 the newer version 2 quota format. Quota-tools version 3.07 and
239 newer has this support. Use the recommended version or newer
240 from the table above.
245 A driver has been added to allow updating of Intel IA32 microcode,
246 accessible as a normal (misc) character device. If you are not using
247 udev you may need to::
250 mknod /dev/cpu/microcode c 10 184
251 chmod 0644 /dev/cpu/microcode
253 as root before you can use this. You'll probably also want to
254 get the user-space microcode_ctl utility to use with this.
259 ``udev`` is a userspace application for populating ``/dev`` dynamically with
260 only entries for devices actually present. ``udev`` replaces the basic
261 functionality of devfs, while allowing persistent device naming for
267 Needs libfuse 2.4.0 or later. Absolute minimum is 2.3.0 but mount
268 options ``direct_io`` and ``kernel_cache`` won't work.
276 If you have advanced network configuration needs, you should probably
277 consider using the network tools from ip-route2.
281 The packet filtering and NAT code uses the same tools like the previous 2.4.x
282 kernel series (iptables). It still includes backwards-compatibility modules
283 for 2.2.x-style ipchains and 2.0.x-style ipfwadm.
288 The PPP driver has been restructured to support multilink and to
289 enable it to operate over diverse media layers. If you use PPP,
290 upgrade pppd to at least 2.4.0.
292 If you are not using udev, you must have the device file /dev/ppp
293 which can be made by::
295 mknod /dev/ppp c 108 0
302 In ancient (2.4 and earlier) kernels, the nfs server needed to know
303 about any client that expected to be able to access files via NFS. This
304 information would be given to the kernel by ``mountd`` when the client
305 mounted the filesystem, or by ``exportfs`` at system startup. exportfs
306 would take information about active clients from ``/var/lib/nfs/rmtab``.
308 This approach is quite fragile as it depends on rmtab being correct
309 which is not always easy, particularly when trying to implement
310 fail-over. Even when the system is working well, ``rmtab`` suffers from
311 getting lots of old entries that never get removed.
313 With modern kernels we have the option of having the kernel tell mountd
314 when it gets a request from an unknown host, and mountd can give
315 appropriate export information to the kernel. This removes the
316 dependency on ``rmtab`` and means that the kernel only needs to know about
317 currently active clients.
319 To enable this new functionality, you need to::
321 mount -t nfsd nfsd /proc/fs/nfsd
323 before running exportfs or mountd. It is recommended that all NFS
324 services be protected from the internet-at-large by a firewall where
330 On x86 kernels the mcelog utility is needed to process and log machine check
331 events when ``CONFIG_X86_MCE`` is enabled. Machine check events are errors
332 reported by the CPU. Processing them is strongly encouraged.
340 Please see :ref:`sphinx_install` in :ref:`Documentation/doc-guide/sphinx.rst <sphinxdoc>`
341 for details about Sphinx requirements.
343 Getting updated software
344 ========================
352 - <ftp://ftp.gnu.org/gnu/gcc/>
357 - :ref:`Getting LLVM <getting_llvm>`.
362 - <ftp://ftp.gnu.org/gnu/make/>
367 - <https://www.kernel.org/pub/linux/devel/binutils/>
372 - <https://github.com/westes/flex/releases>
377 - <ftp://ftp.gnu.org/gnu/bison/>
382 - <https://www.openssl.org/>
390 - <https://www.kernel.org/pub/linux/utils/util-linux/>
395 - <https://www.kernel.org/pub/linux/utils/kernel/kmod/>
396 - <https://git.kernel.org/pub/scm/utils/kernel/kmod/kmod.git>
401 - <https://www.kernel.org/pub/linux/utils/kernel/ksymoops/v2.4/>
406 - <https://code.launchpad.net/initrd-tools/main>
411 - <https://www.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/>
412 - <https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git/>
417 - <http://jfs.sourceforge.net/>
422 - <https://git.kernel.org/pub/scm/linux/kernel/git/jeffm/reiserfsprogs.git/>
427 - <https://git.kernel.org/pub/scm/fs/xfs/xfsprogs-dev.git>
428 - <https://www.kernel.org/pub/linux/utils/fs/xfs/xfsprogs/>
433 - <https://www.kernel.org/pub/linux/utils/kernel/pcmcia/>
438 - <http://sourceforge.net/projects/linuxquota/>
444 - <https://downloadcenter.intel.com/>
449 - <https://www.freedesktop.org/software/systemd/man/udev.html>
454 - <https://github.com/libfuse/libfuse/releases>
459 - <http://www.mcelog.org/>
467 - <https://download.samba.org/pub/ppp/>
468 - <https://git.ozlabs.org/?p=ppp.git>
469 - <https://github.com/paulusmack/ppp/>
474 - <http://sourceforge.net/project/showfiles.php?group_id=14>
479 - <https://netfilter.org/projects/iptables/index.html>
484 - <https://www.kernel.org/pub/linux/utils/net/iproute2/>
489 - <http://oprofile.sf.net/download/>
494 - <http://nfs.sourceforge.net/>
502 - <https://www.sphinx-doc.org/>