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 current kernel version.
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
35 bash 4.2 bash --version
37 flex 2.5.35 flex --version
38 bison 2.0 bison --version
39 pahole 1.16 pahole --version
40 util-linux 2.10o fdformat --version
42 e2fsprogs 1.41.4 e2fsck -V
43 jfsutils 1.1.3 fsck.jfs -V
44 reiserfsprogs 3.6.3 reiserfsck -V
45 xfsprogs 2.6.0 xfs_db -V
46 squashfs-tools 4.0 mksquashfs -version
47 btrfs-progs 0.18 btrfsck
48 pcmciautils 004 pccardctl -V
49 quota-tools 3.09 quota -V
50 PPP 2.4.0 pppd --version
51 nfs-utils 1.0.5 showmount --version
52 procps 3.2.0 ps --version
53 udev 081 udevd --version
54 grub 0.93 grub --version || grub-install --version
55 mcelog 0.6 mcelog --version
56 iptables 1.4.2 iptables -V
57 openssl & libcrypto 1.0.0 openssl version
58 bc 1.06.95 bc --version
59 Sphinx\ [#f1]_ 1.7 sphinx-build --version
60 cpio any cpio --version
61 ====================== =============== ========================================
63 .. [#f1] Sphinx is needed only to build the Kernel documentation
71 The gcc version requirements may vary depending on the type of CPU in your
77 The latest formal release of clang and LLVM utils (according to
78 `releases.llvm.org <https://releases.llvm.org>`_) are supported for building
79 kernels. Older releases aren't guaranteed to work, and we may drop workarounds
80 from the kernel that were used to support older versions. Please see additional
81 docs on :ref:`Building Linux with Clang/LLVM <kbuild_llvm>`.
86 You will need GNU make 3.81 or later to build the kernel.
91 Some bash scripts are used for the kernel build.
92 Bash 4.2 or newer is needed.
97 Binutils 2.23 or newer is needed to build the kernel.
102 The build system, as of 4.18, requires pkg-config to check for installed
103 kconfig tools and to determine flags settings for use in
104 'make {g,x}config'. Previously pkg-config was being used but not
105 verified or documented.
110 Since Linux 4.16, the build system generates lexical analyzers
111 during build. This requires flex 2.5.35 or later.
117 Since Linux 4.16, the build system generates parsers
118 during build. This requires bison 2.0 or later.
123 Since Linux 5.2, if CONFIG_DEBUG_INFO_BTF is selected, the build system
124 generates BTF (BPF Type Format) from DWARF in vmlinux, a bit later from kernel
125 modules as well. This requires pahole v1.16 or later.
127 It is found in the 'dwarves' or 'pahole' distro packages or from
128 https://fedorapeople.org/~acme/dwarves/.
133 You will need perl 5 and the following modules: ``Getopt::Long``,
134 ``Getopt::Std``, ``File::Basename``, and ``File::Find`` to build the kernel.
139 You will need bc to build kernels 3.10 and higher
145 Module signing and external certificate handling use the OpenSSL program and
146 crypto library to do key creation and signature generation.
148 You will need openssl to build kernels 3.7 and higher if module signing is
149 enabled. You will also need openssl development packages to build kernels 4.3
156 Architectural changes
157 ---------------------
159 DevFS has been obsoleted in favour of udev
160 (https://www.kernel.org/pub/linux/utils/kernel/hotplug/)
162 32-bit UID support is now in place. Have fun!
164 Linux documentation for functions is transitioning to inline
165 documentation via specially-formatted comments near their
166 definitions in the source. These comments can be combined with ReST
167 files the Documentation/ directory to make enriched documentation, which can
168 then be converted to PostScript, HTML, LaTex, ePUB and PDF files.
169 In order to convert from ReST format to a format of your choice, you'll need
175 New versions of util-linux provide ``fdisk`` support for larger disks,
176 support new options to mount, recognize more supported partition
177 types, have a fdformat which works with 2.4 kernels, and similar goodies.
178 You'll probably want to upgrade.
183 If the unthinkable happens and your kernel oopses, you may need the
184 ksymoops tool to decode it, but in most cases you don't.
185 It is generally preferred to build the kernel with ``CONFIG_KALLSYMS`` so
186 that it produces readable dumps that can be used as-is (this also
187 produces better output than ksymoops). If for some reason your kernel
188 is not build with ``CONFIG_KALLSYMS`` and you have no way to rebuild and
189 reproduce the Oops with that option, then you can still decode that Oops
195 These changes to the ``/lib/modules`` file tree layout also require that
196 mkinitrd be upgraded.
201 The latest version of ``e2fsprogs`` fixes several bugs in fsck and
202 debugfs. Obviously, it's a good idea to upgrade.
207 The ``jfsutils`` package contains the utilities for the file system.
208 The following utilities are available:
210 - ``fsck.jfs`` - initiate replay of the transaction log, and check
211 and repair a JFS formatted partition.
213 - ``mkfs.jfs`` - create a JFS formatted partition.
215 - other file system utilities are also available in this package.
220 The reiserfsprogs package should be used for reiserfs-3.6.x
221 (Linux kernels 2.4.x). It is a combined package and contains working
222 versions of ``mkreiserfs``, ``resize_reiserfs``, ``debugreiserfs`` and
223 ``reiserfsck``. These utils work on both i386 and alpha platforms.
228 The latest version of ``xfsprogs`` contains ``mkfs.xfs``, ``xfs_db``, and the
229 ``xfs_repair`` utilities, among others, for the XFS filesystem. It is
230 architecture independent and any version from 2.0.0 onward should
231 work correctly with this version of the XFS kernel code (2.6.0 or
232 later is recommended, due to some significant improvements).
237 PCMCIAutils replaces ``pcmcia-cs``. It properly sets up
238 PCMCIA sockets at system startup and loads the appropriate modules
239 for 16-bit PCMCIA devices if the kernel is modularized and the hotplug
245 Support for 32 bit uid's and gid's is required if you want to use
246 the newer version 2 quota format. Quota-tools version 3.07 and
247 newer has this support. Use the recommended version or newer
248 from the table above.
253 A driver has been added to allow updating of Intel IA32 microcode,
254 accessible as a normal (misc) character device. If you are not using
255 udev you may need to::
258 mknod /dev/cpu/microcode c 10 184
259 chmod 0644 /dev/cpu/microcode
261 as root before you can use this. You'll probably also want to
262 get the user-space microcode_ctl utility to use with this.
267 ``udev`` is a userspace application for populating ``/dev`` dynamically with
268 only entries for devices actually present. ``udev`` replaces the basic
269 functionality of devfs, while allowing persistent device naming for
275 Needs libfuse 2.4.0 or later. Absolute minimum is 2.3.0 but mount
276 options ``direct_io`` and ``kernel_cache`` won't work.
284 If you have advanced network configuration needs, you should probably
285 consider using the network tools from ip-route2.
289 The packet filtering and NAT code uses the same tools like the previous 2.4.x
290 kernel series (iptables). It still includes backwards-compatibility modules
291 for 2.2.x-style ipchains and 2.0.x-style ipfwadm.
296 The PPP driver has been restructured to support multilink and to
297 enable it to operate over diverse media layers. If you use PPP,
298 upgrade pppd to at least 2.4.0.
300 If you are not using udev, you must have the device file /dev/ppp
301 which can be made by::
303 mknod /dev/ppp c 108 0
310 In ancient (2.4 and earlier) kernels, the nfs server needed to know
311 about any client that expected to be able to access files via NFS. This
312 information would be given to the kernel by ``mountd`` when the client
313 mounted the filesystem, or by ``exportfs`` at system startup. exportfs
314 would take information about active clients from ``/var/lib/nfs/rmtab``.
316 This approach is quite fragile as it depends on rmtab being correct
317 which is not always easy, particularly when trying to implement
318 fail-over. Even when the system is working well, ``rmtab`` suffers from
319 getting lots of old entries that never get removed.
321 With modern kernels we have the option of having the kernel tell mountd
322 when it gets a request from an unknown host, and mountd can give
323 appropriate export information to the kernel. This removes the
324 dependency on ``rmtab`` and means that the kernel only needs to know about
325 currently active clients.
327 To enable this new functionality, you need to::
329 mount -t nfsd nfsd /proc/fs/nfsd
331 before running exportfs or mountd. It is recommended that all NFS
332 services be protected from the internet-at-large by a firewall where
338 On x86 kernels the mcelog utility is needed to process and log machine check
339 events when ``CONFIG_X86_MCE`` is enabled. Machine check events are errors
340 reported by the CPU. Processing them is strongly encouraged.
348 Please see :ref:`sphinx_install` in :ref:`Documentation/doc-guide/sphinx.rst <sphinxdoc>`
349 for details about Sphinx requirements.
351 Getting updated software
352 ========================
360 - <ftp://ftp.gnu.org/gnu/gcc/>
365 - :ref:`Getting LLVM <getting_llvm>`.
370 - <ftp://ftp.gnu.org/gnu/make/>
375 - <ftp://ftp.gnu.org/gnu/bash/>
380 - <https://www.kernel.org/pub/linux/devel/binutils/>
385 - <https://github.com/westes/flex/releases>
390 - <ftp://ftp.gnu.org/gnu/bison/>
395 - <https://www.openssl.org/>
403 - <https://www.kernel.org/pub/linux/utils/util-linux/>
408 - <https://www.kernel.org/pub/linux/utils/kernel/kmod/>
409 - <https://git.kernel.org/pub/scm/utils/kernel/kmod/kmod.git>
414 - <https://www.kernel.org/pub/linux/utils/kernel/ksymoops/v2.4/>
419 - <https://code.launchpad.net/initrd-tools/main>
424 - <https://www.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/>
425 - <https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git/>
430 - <http://jfs.sourceforge.net/>
435 - <https://git.kernel.org/pub/scm/linux/kernel/git/jeffm/reiserfsprogs.git/>
440 - <https://git.kernel.org/pub/scm/fs/xfs/xfsprogs-dev.git>
441 - <https://www.kernel.org/pub/linux/utils/fs/xfs/xfsprogs/>
446 - <https://www.kernel.org/pub/linux/utils/kernel/pcmcia/>
451 - <http://sourceforge.net/projects/linuxquota/>
457 - <https://downloadcenter.intel.com/>
462 - <https://www.freedesktop.org/software/systemd/man/udev.html>
467 - <https://github.com/libfuse/libfuse/releases>
472 - <http://www.mcelog.org/>
477 - <https://www.gnu.org/software/cpio/>
485 - <https://download.samba.org/pub/ppp/>
486 - <https://git.ozlabs.org/?p=ppp.git>
487 - <https://github.com/paulusmack/ppp/>
492 - <http://sourceforge.net/project/showfiles.php?group_id=14>
497 - <https://netfilter.org/projects/iptables/index.html>
502 - <https://www.kernel.org/pub/linux/utils/net/iproute2/>
507 - <http://oprofile.sf.net/download/>
512 - <http://nfs.sourceforge.net/>
520 - <https://www.sphinx-doc.org/>