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