582 lines · plain
1.. _changes:2 3Minimal requirements to compile the Kernel4++++++++++++++++++++++++++++++++++++++++++5 6Intro7=====8 9This document is designed to provide a list of the minimum levels of10software necessary to run the current kernel version.11 12This document is originally based on my "Changes" file for 2.0.x kernels13and therefore owes credit to the same people as that file (Jared Mauch,14Axel Boldt, Alessandro Sigala, and countless other users all over the15'net).16 17Current Minimal Requirements18****************************19 20Upgrade to at **least** these software revisions before thinking you've21encountered a bug! If you're unsure what version you're currently22running, the suggested command should tell you.23 24Again, keep in mind that this list assumes you are already functionally25running a Linux kernel. Also, not all tools are necessary on all26systems; 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 version31====================== =============== ========================================32GNU C 5.1 gcc --version33Clang/LLVM (optional) 13.0.1 clang --version34Rust (optional) 1.78.0 rustc --version35bindgen (optional) 0.65.1 bindgen --version36GNU make 4.0 make --version37bash 4.2 bash --version38binutils 2.25 ld -v39flex 2.5.35 flex --version40bison 2.0 bison --version41pahole 1.16 pahole --version42util-linux 2.10o mount --version43kmod 13 depmod -V44e2fsprogs 1.41.4 e2fsck -V45jfsutils 1.1.3 fsck.jfs -V46reiserfsprogs 3.6.3 reiserfsck -V47xfsprogs 2.6.0 xfs_db -V48squashfs-tools 4.0 mksquashfs -version49btrfs-progs 0.18 btrfsck50pcmciautils 004 pccardctl -V51quota-tools 3.09 quota -V52PPP 2.4.0 pppd --version53nfs-utils 1.0.5 showmount --version54procps 3.2.0 ps --version55udev 081 udevd --version56grub 0.93 grub --version || grub-install --version57mcelog 0.6 mcelog --version58iptables 1.4.2 iptables -V59openssl & libcrypto 1.0.0 openssl version60bc 1.06.95 bc --version61Sphinx\ [#f1]_ 2.4.4 sphinx-build --version62cpio any cpio --version63GNU tar 1.28 tar --version64gtags (optional) 6.6.5 gtags --version65mkimage (optional) 2017.01 mkimage --version66Python (optional) 3.5.x python3 --version67GNU AWK (optional) 5.1.0 gawk --version68====================== =============== ========================================69 70.. [#f1] Sphinx is needed only to build the Kernel documentation71 72Kernel compilation73******************74 75GCC76---77 78The gcc version requirements may vary depending on the type of CPU in your79computer.80 81Clang/LLVM (optional)82---------------------83 84The latest formal release of clang and LLVM utils (according to85`releases.llvm.org <https://releases.llvm.org>`_) are supported for building86kernels. Older releases aren't guaranteed to work, and we may drop workarounds87from the kernel that were used to support older versions. Please see additional88docs on :ref:`Building Linux with Clang/LLVM <kbuild_llvm>`.89 90Rust (optional)91---------------92 93A recent version of the Rust compiler is required.94 95Please see Documentation/rust/quick-start.rst for instructions on how to96satisfy the build requirements of Rust support. In particular, the ``Makefile``97target ``rustavailable`` is useful to check why the Rust toolchain may not98be detected.99 100bindgen (optional)101------------------102 103``bindgen`` is used to generate the Rust bindings to the C side of the kernel.104It depends on ``libclang``.105 106Make107----108 109You will need GNU make 4.0 or later to build the kernel.110 111Bash112----113 114Some bash scripts are used for the kernel build.115Bash 4.2 or newer is needed.116 117Binutils118--------119 120Binutils 2.25 or newer is needed to build the kernel.121 122pkg-config123----------124 125The build system, as of 4.18, requires pkg-config to check for installed126kconfig tools and to determine flags settings for use in127'make {g,x}config'. Previously pkg-config was being used but not128verified or documented.129 130Flex131----132 133Since Linux 4.16, the build system generates lexical analyzers134during build. This requires flex 2.5.35 or later.135 136 137Bison138-----139 140Since Linux 4.16, the build system generates parsers141during build. This requires bison 2.0 or later.142 143pahole144------145 146Since Linux 5.2, if CONFIG_DEBUG_INFO_BTF is selected, the build system147generates BTF (BPF Type Format) from DWARF in vmlinux, a bit later from kernel148modules as well. This requires pahole v1.16 or later.149 150It is found in the 'dwarves' or 'pahole' distro packages or from151https://fedorapeople.org/~acme/dwarves/.152 153Perl154----155 156You will need perl 5 and the following modules: ``Getopt::Long``,157``Getopt::Std``, ``File::Basename``, and ``File::Find`` to build the kernel.158 159BC160--161 162You will need bc to build kernels 3.10 and higher163 164 165OpenSSL166-------167 168Module signing and external certificate handling use the OpenSSL program and169crypto library to do key creation and signature generation.170 171You will need openssl to build kernels 3.7 and higher if module signing is172enabled. You will also need openssl development packages to build kernels 4.3173and higher.174 175Tar176---177 178GNU tar is needed if you want to enable access to the kernel headers via sysfs179(CONFIG_IKHEADERS).180 181gtags / GNU GLOBAL (optional)182-----------------------------183 184The kernel build requires GNU GLOBAL version 6.6.5 or later to generate185tag files through ``make gtags``. This is due to its use of the gtags186``-C (--directory)`` flag.187 188mkimage189-------190 191This tool is used when building a Flat Image Tree (FIT), commonly used on ARM192platforms. The tool is available via the ``u-boot-tools`` package or can be193built from the U-Boot source code. See the instructions at194https://docs.u-boot.org/en/latest/build/tools.html#building-tools-for-linux195 196GNU AWK197-------198 199GNU AWK is needed if you want kernel builds to generate address range data for200builtin modules (CONFIG_BUILTIN_MODULE_RANGES).201 202System utilities203****************204 205Architectural changes206---------------------207 208DevFS has been obsoleted in favour of udev209(https://www.kernel.org/pub/linux/utils/kernel/hotplug/)210 21132-bit UID support is now in place. Have fun!212 213Linux documentation for functions is transitioning to inline214documentation via specially-formatted comments near their215definitions in the source. These comments can be combined with ReST216files the Documentation/ directory to make enriched documentation, which can217then be converted to PostScript, HTML, LaTex, ePUB and PDF files.218In order to convert from ReST format to a format of your choice, you'll need219Sphinx.220 221Util-linux222----------223 224New versions of util-linux provide ``fdisk`` support for larger disks,225support new options to mount, recognize more supported partition226types, and similar goodies.227You'll probably want to upgrade.228 229Ksymoops230--------231 232If the unthinkable happens and your kernel oopses, you may need the233ksymoops tool to decode it, but in most cases you don't.234It is generally preferred to build the kernel with ``CONFIG_KALLSYMS`` so235that it produces readable dumps that can be used as-is (this also236produces better output than ksymoops). If for some reason your kernel237is not build with ``CONFIG_KALLSYMS`` and you have no way to rebuild and238reproduce the Oops with that option, then you can still decode that Oops239with ksymoops.240 241Mkinitrd242--------243 244These changes to the ``/lib/modules`` file tree layout also require that245mkinitrd be upgraded.246 247E2fsprogs248---------249 250The latest version of ``e2fsprogs`` fixes several bugs in fsck and251debugfs. Obviously, it's a good idea to upgrade.252 253JFSutils254--------255 256The ``jfsutils`` package contains the utilities for the file system.257The following utilities are available:258 259- ``fsck.jfs`` - initiate replay of the transaction log, and check260 and repair a JFS formatted partition.261 262- ``mkfs.jfs`` - create a JFS formatted partition.263 264- other file system utilities are also available in this package.265 266Reiserfsprogs267-------------268 269The reiserfsprogs package should be used for reiserfs-3.6.x270(Linux kernels 2.4.x). It is a combined package and contains working271versions of ``mkreiserfs``, ``resize_reiserfs``, ``debugreiserfs`` and272``reiserfsck``. These utils work on both i386 and alpha platforms.273 274Xfsprogs275--------276 277The latest version of ``xfsprogs`` contains ``mkfs.xfs``, ``xfs_db``, and the278``xfs_repair`` utilities, among others, for the XFS filesystem. It is279architecture independent and any version from 2.0.0 onward should280work correctly with this version of the XFS kernel code (2.6.0 or281later is recommended, due to some significant improvements).282 283PCMCIAutils284-----------285 286PCMCIAutils replaces ``pcmcia-cs``. It properly sets up287PCMCIA sockets at system startup and loads the appropriate modules288for 16-bit PCMCIA devices if the kernel is modularized and the hotplug289subsystem is used.290 291Quota-tools292-----------293 294Support for 32 bit uid's and gid's is required if you want to use295the newer version 2 quota format. Quota-tools version 3.07 and296newer has this support. Use the recommended version or newer297from the table above.298 299Intel IA32 microcode300--------------------301 302A driver has been added to allow updating of Intel IA32 microcode,303accessible as a normal (misc) character device. If you are not using304udev you may need to::305 306 mkdir /dev/cpu307 mknod /dev/cpu/microcode c 10 184308 chmod 0644 /dev/cpu/microcode309 310as root before you can use this. You'll probably also want to311get the user-space microcode_ctl utility to use with this.312 313udev314----315 316``udev`` is a userspace application for populating ``/dev`` dynamically with317only entries for devices actually present. ``udev`` replaces the basic318functionality of devfs, while allowing persistent device naming for319devices.320 321FUSE322----323 324Needs libfuse 2.4.0 or later. Absolute minimum is 2.3.0 but mount325options ``direct_io`` and ``kernel_cache`` won't work.326 327Networking328**********329 330General changes331---------------332 333If you have advanced network configuration needs, you should probably334consider using the network tools from ip-route2.335 336Packet Filter / NAT337-------------------338The packet filtering and NAT code uses the same tools like the previous 2.4.x339kernel series (iptables). It still includes backwards-compatibility modules340for 2.2.x-style ipchains and 2.0.x-style ipfwadm.341 342PPP343---344 345The PPP driver has been restructured to support multilink and to346enable it to operate over diverse media layers. If you use PPP,347upgrade pppd to at least 2.4.0.348 349If you are not using udev, you must have the device file /dev/ppp350which can be made by::351 352 mknod /dev/ppp c 108 0353 354as root.355 356NFS-utils357---------358 359In ancient (2.4 and earlier) kernels, the nfs server needed to know360about any client that expected to be able to access files via NFS. This361information would be given to the kernel by ``mountd`` when the client362mounted the filesystem, or by ``exportfs`` at system startup. exportfs363would take information about active clients from ``/var/lib/nfs/rmtab``.364 365This approach is quite fragile as it depends on rmtab being correct366which is not always easy, particularly when trying to implement367fail-over. Even when the system is working well, ``rmtab`` suffers from368getting lots of old entries that never get removed.369 370With modern kernels we have the option of having the kernel tell mountd371when it gets a request from an unknown host, and mountd can give372appropriate export information to the kernel. This removes the373dependency on ``rmtab`` and means that the kernel only needs to know about374currently active clients.375 376To enable this new functionality, you need to::377 378 mount -t nfsd nfsd /proc/fs/nfsd379 380before running exportfs or mountd. It is recommended that all NFS381services be protected from the internet-at-large by a firewall where382that is possible.383 384mcelog385------386 387On x86 kernels the mcelog utility is needed to process and log machine check388events when ``CONFIG_X86_MCE`` is enabled. Machine check events are errors389reported by the CPU. Processing them is strongly encouraged.390 391Kernel documentation392********************393 394Sphinx395------396 397Please see :ref:`sphinx_install` in :ref:`Documentation/doc-guide/sphinx.rst <sphinxdoc>`398for details about Sphinx requirements.399 400rustdoc401-------402 403``rustdoc`` is used to generate the documentation for Rust code. Please see404Documentation/rust/general-information.rst for more information.405 406Getting updated software407========================408 409Kernel compilation410******************411 412gcc413---414 415- <ftp://ftp.gnu.org/gnu/gcc/>416 417Clang/LLVM418----------419 420- :ref:`Getting LLVM <getting_llvm>`.421 422Rust423----424 425- Documentation/rust/quick-start.rst.426 427bindgen428-------429 430- Documentation/rust/quick-start.rst.431 432Make433----434 435- <ftp://ftp.gnu.org/gnu/make/>436 437Bash438----439 440- <ftp://ftp.gnu.org/gnu/bash/>441 442Binutils443--------444 445- <https://www.kernel.org/pub/linux/devel/binutils/>446 447Flex448----449 450- <https://github.com/westes/flex/releases>451 452Bison453-----454 455- <ftp://ftp.gnu.org/gnu/bison/>456 457OpenSSL458-------459 460- <https://www.openssl.org/>461 462System utilities463****************464 465Util-linux466----------467 468- <https://www.kernel.org/pub/linux/utils/util-linux/>469 470Kmod471----472 473- <https://www.kernel.org/pub/linux/utils/kernel/kmod/>474- <https://git.kernel.org/pub/scm/utils/kernel/kmod/kmod.git>475 476Ksymoops477--------478 479- <https://www.kernel.org/pub/linux/utils/kernel/ksymoops/v2.4/>480 481Mkinitrd482--------483 484- <https://code.launchpad.net/initrd-tools/main>485 486E2fsprogs487---------488 489- <https://www.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/>490- <https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git/>491 492JFSutils493--------494 495- <https://jfs.sourceforge.net/>496 497Reiserfsprogs498-------------499 500- <https://git.kernel.org/pub/scm/linux/kernel/git/jeffm/reiserfsprogs.git/>501 502Xfsprogs503--------504 505- <https://git.kernel.org/pub/scm/fs/xfs/xfsprogs-dev.git>506- <https://www.kernel.org/pub/linux/utils/fs/xfs/xfsprogs/>507 508Pcmciautils509-----------510 511- <https://www.kernel.org/pub/linux/utils/kernel/pcmcia/>512 513Quota-tools514-----------515 516- <https://sourceforge.net/projects/linuxquota/>517 518 519Intel P6 microcode520------------------521 522- <https://downloadcenter.intel.com/>523 524udev525----526 527- <https://www.freedesktop.org/software/systemd/man/udev.html>528 529FUSE530----531 532- <https://github.com/libfuse/libfuse/releases>533 534mcelog535------536 537- <https://www.mcelog.org/>538 539cpio540----541 542- <https://www.gnu.org/software/cpio/>543 544Networking545**********546 547PPP548---549 550- <https://download.samba.org/pub/ppp/>551- <https://git.ozlabs.org/?p=ppp.git>552- <https://github.com/paulusmack/ppp/>553 554NFS-utils555---------556 557- <https://sourceforge.net/project/showfiles.php?group_id=14>558- <https://nfs.sourceforge.net/>559 560Iptables561--------562 563- <https://netfilter.org/projects/iptables/index.html>564 565Ip-route2566---------567 568- <https://www.kernel.org/pub/linux/utils/net/iproute2/>569 570OProfile571--------572 573- <https://oprofile.sf.net/download/>574 575Kernel documentation576********************577 578Sphinx579------580 581- <https://www.sphinx-doc.org/>582