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 btrfs --version 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]_ 3.4.3 sphinx-build --version 62GNU tar 1.28 tar --version 63gtags (optional) 6.6.5 gtags --version 64mkimage (optional) 2017.01 mkimage --version 65Python (optional) 3.9.x python3 --version 66GNU AWK (optional) 5.1.0 gawk --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 195GNU AWK 196------- 197 198GNU AWK is needed if you want kernel builds to generate address range data for 199builtin modules (CONFIG_BUILTIN_MODULE_RANGES). 200 201System utilities 202**************** 203 204Architectural changes 205--------------------- 206 207DevFS has been obsoleted in favour of udev 208(https://www.kernel.org/pub/linux/utils/kernel/hotplug/) 209 21032-bit UID support is now in place. Have fun! 211 212Linux documentation for functions is transitioning to inline 213documentation via specially-formatted comments near their 214definitions in the source. These comments can be combined with ReST 215files the Documentation/ directory to make enriched documentation, which can 216then be converted to PostScript, HTML, LaTex, ePUB and PDF files. 217In order to convert from ReST format to a format of your choice, you'll need 218Sphinx. 219 220Util-linux 221---------- 222 223New versions of util-linux provide ``fdisk`` support for larger disks, 224support new options to mount, recognize more supported partition 225types, and similar goodies. 226You'll probably want to upgrade. 227 228Ksymoops 229-------- 230 231If the unthinkable happens and your kernel oopses, you may need the 232ksymoops tool to decode it, but in most cases you don't. 233It is generally preferred to build the kernel with ``CONFIG_KALLSYMS`` so 234that it produces readable dumps that can be used as-is (this also 235produces better output than ksymoops). If for some reason your kernel 236is not build with ``CONFIG_KALLSYMS`` and you have no way to rebuild and 237reproduce the Oops with that option, then you can still decode that Oops 238with ksymoops. 239 240Mkinitrd 241-------- 242 243These changes to the ``/lib/modules`` file tree layout also require that 244mkinitrd be upgraded. 245 246E2fsprogs 247--------- 248 249The latest version of ``e2fsprogs`` fixes several bugs in fsck and 250debugfs. Obviously, it's a good idea to upgrade. 251 252JFSutils 253-------- 254 255The ``jfsutils`` package contains the utilities for the file system. 256The following utilities are available: 257 258- ``fsck.jfs`` - initiate replay of the transaction log, and check 259 and repair a JFS formatted partition. 260 261- ``mkfs.jfs`` - create a JFS formatted partition. 262 263- other file system utilities are also available in this package. 264 265Reiserfsprogs 266------------- 267 268The reiserfsprogs package should be used for reiserfs-3.6.x 269(Linux kernels 2.4.x). It is a combined package and contains working 270versions of ``mkreiserfs``, ``resize_reiserfs``, ``debugreiserfs`` and 271``reiserfsck``. These utils work on both i386 and alpha platforms. 272 273Xfsprogs 274-------- 275 276The latest version of ``xfsprogs`` contains ``mkfs.xfs``, ``xfs_db``, and the 277``xfs_repair`` utilities, among others, for the XFS filesystem. It is 278architecture independent and any version from 2.0.0 onward should 279work correctly with this version of the XFS kernel code (2.6.0 or 280later is recommended, due to some significant improvements). 281 282PCMCIAutils 283----------- 284 285PCMCIAutils replaces ``pcmcia-cs``. It properly sets up 286PCMCIA sockets at system startup and loads the appropriate modules 287for 16-bit PCMCIA devices if the kernel is modularized and the hotplug 288subsystem is used. 289 290Quota-tools 291----------- 292 293Support for 32 bit uid's and gid's is required if you want to use 294the newer version 2 quota format. Quota-tools version 3.07 and 295newer has this support. Use the recommended version or newer 296from the table above. 297 298Intel IA32 microcode 299-------------------- 300 301A driver has been added to allow updating of Intel IA32 microcode, 302accessible as a normal (misc) character device. If you are not using 303udev you may need to:: 304 305 mkdir /dev/cpu 306 mknod /dev/cpu/microcode c 10 184 307 chmod 0644 /dev/cpu/microcode 308 309as root before you can use this. You'll probably also want to 310get the user-space microcode_ctl utility to use with this. 311 312udev 313---- 314 315``udev`` is a userspace application for populating ``/dev`` dynamically with 316only entries for devices actually present. ``udev`` replaces the basic 317functionality of devfs, while allowing persistent device naming for 318devices. 319 320FUSE 321---- 322 323Needs libfuse 2.4.0 or later. Absolute minimum is 2.3.0 but mount 324options ``direct_io`` and ``kernel_cache`` won't work. 325 326Networking 327********** 328 329General changes 330--------------- 331 332If you have advanced network configuration needs, you should probably 333consider using the network tools from ip-route2. 334 335Packet Filter / NAT 336------------------- 337The packet filtering and NAT code uses the same tools like the previous 2.4.x 338kernel series (iptables). It still includes backwards-compatibility modules 339for 2.2.x-style ipchains and 2.0.x-style ipfwadm. 340 341PPP 342--- 343 344The PPP driver has been restructured to support multilink and to 345enable it to operate over diverse media layers. If you use PPP, 346upgrade pppd to at least 2.4.0. 347 348If you are not using udev, you must have the device file /dev/ppp 349which can be made by:: 350 351 mknod /dev/ppp c 108 0 352 353as root. 354 355NFS-utils 356--------- 357 358In ancient (2.4 and earlier) kernels, the nfs server needed to know 359about any client that expected to be able to access files via NFS. This 360information would be given to the kernel by ``mountd`` when the client 361mounted the filesystem, or by ``exportfs`` at system startup. exportfs 362would take information about active clients from ``/var/lib/nfs/rmtab``. 363 364This approach is quite fragile as it depends on rmtab being correct 365which is not always easy, particularly when trying to implement 366fail-over. Even when the system is working well, ``rmtab`` suffers from 367getting lots of old entries that never get removed. 368 369With modern kernels we have the option of having the kernel tell mountd 370when it gets a request from an unknown host, and mountd can give 371appropriate export information to the kernel. This removes the 372dependency on ``rmtab`` and means that the kernel only needs to know about 373currently active clients. 374 375To enable this new functionality, you need to:: 376 377 mount -t nfsd nfsd /proc/fs/nfsd 378 379before running exportfs or mountd. It is recommended that all NFS 380services be protected from the internet-at-large by a firewall where 381that is possible. 382 383mcelog 384------ 385 386On x86 kernels the mcelog utility is needed to process and log machine check 387events when ``CONFIG_X86_MCE`` is enabled. Machine check events are errors 388reported by the CPU. Processing them is strongly encouraged. 389 390Kernel documentation 391******************** 392 393Sphinx 394------ 395 396Please see :ref:`sphinx_install` in :ref:`Documentation/doc-guide/sphinx.rst <sphinxdoc>` 397for details about Sphinx requirements. 398 399rustdoc 400------- 401 402``rustdoc`` is used to generate the documentation for Rust code. Please see 403Documentation/rust/general-information.rst for more information. 404 405Getting updated software 406======================== 407 408Kernel compilation 409****************** 410 411gcc 412--- 413 414- <ftp://ftp.gnu.org/gnu/gcc/> 415 416Clang/LLVM 417---------- 418 419- :ref:`Getting LLVM <getting_llvm>`. 420 421Rust 422---- 423 424- Documentation/rust/quick-start.rst. 425 426bindgen 427------- 428 429- Documentation/rust/quick-start.rst. 430 431Make 432---- 433 434- <ftp://ftp.gnu.org/gnu/make/> 435 436Bash 437---- 438 439- <ftp://ftp.gnu.org/gnu/bash/> 440 441Binutils 442-------- 443 444- <https://www.kernel.org/pub/linux/devel/binutils/> 445 446Flex 447---- 448 449- <https://github.com/westes/flex/releases> 450 451Bison 452----- 453 454- <ftp://ftp.gnu.org/gnu/bison/> 455 456OpenSSL 457------- 458 459- <https://www.openssl.org/> 460 461System utilities 462**************** 463 464Util-linux 465---------- 466 467- <https://www.kernel.org/pub/linux/utils/util-linux/> 468 469Kmod 470---- 471 472- <https://www.kernel.org/pub/linux/utils/kernel/kmod/> 473- <https://git.kernel.org/pub/scm/utils/kernel/kmod/kmod.git> 474 475Ksymoops 476-------- 477 478- <https://www.kernel.org/pub/linux/utils/kernel/ksymoops/v2.4/> 479 480Mkinitrd 481-------- 482 483- <https://code.launchpad.net/initrd-tools/main> 484 485E2fsprogs 486--------- 487 488- <https://www.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/> 489- <https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git/> 490 491JFSutils 492-------- 493 494- <https://jfs.sourceforge.net/> 495 496Reiserfsprogs 497------------- 498 499- <https://git.kernel.org/pub/scm/linux/kernel/git/jeffm/reiserfsprogs.git/> 500 501Xfsprogs 502-------- 503 504- <https://git.kernel.org/pub/scm/fs/xfs/xfsprogs-dev.git> 505- <https://www.kernel.org/pub/linux/utils/fs/xfs/xfsprogs/> 506 507Pcmciautils 508----------- 509 510- <https://www.kernel.org/pub/linux/utils/kernel/pcmcia/> 511 512Quota-tools 513----------- 514 515- <https://sourceforge.net/projects/linuxquota/> 516 517 518Intel P6 microcode 519------------------ 520 521- <https://downloadcenter.intel.com/> 522 523udev 524---- 525 526- <https://www.freedesktop.org/software/systemd/man/udev.html> 527 528FUSE 529---- 530 531- <https://github.com/libfuse/libfuse/releases> 532 533mcelog 534------ 535 536- <https://www.mcelog.org/> 537 538Networking 539********** 540 541PPP 542--- 543 544- <https://download.samba.org/pub/ppp/> 545- <https://git.ozlabs.org/?p=ppp.git> 546- <https://github.com/paulusmack/ppp/> 547 548NFS-utils 549--------- 550 551- <https://sourceforge.net/project/showfiles.php?group_id=14> 552- <https://nfs.sourceforge.net/> 553 554Iptables 555-------- 556 557- <https://netfilter.org/projects/iptables/index.html> 558 559Ip-route2 560--------- 561 562- <https://www.kernel.org/pub/linux/utils/net/iproute2/> 563 564OProfile 565-------- 566 567- <https://oprofile.sf.net/download/> 568 569Kernel documentation 570******************** 571 572Sphinx 573------ 574 575- <https://www.sphinx-doc.org/> 576