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. For a list of the programs 23on your system including their version execute ./scripts/ver_linux 24 25Again, keep in mind that this list assumes you are already functionally 26running a Linux kernel. Also, not all tools are necessary on all 27systems; obviously, if you don't have any PC Card hardware, for example, 28you probably do not need to concern yourself with pcmciautils. 29 30====================== =============== ======================================== 31 Program Minimal version Command to check the version 32====================== =============== ======================================== 33bash 4.2 bash --version 34bc 1.06.95 bc --version 35bindgen (optional) 0.71.1 bindgen --version 36binutils 2.30 ld -v 37bison 2.0 bison --version 38btrfs-progs 0.18 btrfs --version 39Clang/LLVM (optional) 15.0.0 clang --version 40e2fsprogs 1.41.4 e2fsck -V 41flex 2.5.35 flex --version 42gdb 7.2 gdb --version 43GNU awk (optional) 5.1.0 gawk --version 44GNU C 8.1 gcc --version 45GNU make 4.0 make --version 46GNU tar 1.28 tar --version 47GRUB 0.93 grub --version || grub-install --version 48gtags (optional) 6.6.5 gtags --version 49iptables 1.4.2 iptables -V 50jfsutils 1.1.3 fsck.jfs -V 51kmod 13 kmod -V 52mcelog 0.6 mcelog --version 53mkimage (optional) 2017.01 mkimage --version 54nfs-utils 1.0.5 showmount --version 55openssl & libcrypto 1.0.0 openssl version 56pahole 1.22 pahole --version 57pcmciautils 004 pccardctl -V 58PPP 2.4.0 pppd --version 59procps 3.2.0 ps --version 60Python 3.9.x python3 --version 61quota-tools 3.09 quota -V 62Rust (optional) 1.85.0 rustc --version 63Sphinx\ [#f1]_ 3.4.3 sphinx-build --version 64squashfs-tools 4.0 mksquashfs -version 65udev 081 udevadm --version 66util-linux 2.10o mount --version 67xfsprogs 2.6.0 xfs_db -V 68====================== =============== ======================================== 69 70.. [#f1] Sphinx is needed only to build the Kernel documentation 71 72Kernel compilation 73****************** 74 75GCC 76--- 77 78The gcc version requirements may vary depending on the type of CPU in your 79computer. 80 81Clang/LLVM (optional) 82--------------------- 83 84The latest formal release of clang and LLVM utils (according to 85`releases.llvm.org <https://releases.llvm.org>`_) are supported for building 86kernels. Older releases aren't guaranteed to work, and we may drop workarounds 87from the kernel that were used to support older versions. Please see additional 88docs 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 to 96satisfy the build requirements of Rust support. In particular, the ``Makefile`` 97target ``rustavailable`` is useful to check why the Rust toolchain may not 98be 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 106Make 107---- 108 109You will need GNU make 4.0 or later to build the kernel. 110 111Bash 112---- 113 114Some bash scripts are used for the kernel build. 115Bash 4.2 or newer is needed. 116 117Binutils 118-------- 119 120Binutils 2.30 or newer is needed to build the kernel. 121 122pkg-config 123---------- 124 125The build system, as of 4.18, requires pkg-config to check for installed 126kconfig tools and to determine flags settings for use in 127'make {g,x}config'. Previously pkg-config was being used but not 128verified or documented. 129 130Flex 131---- 132 133Since Linux 4.16, the build system generates lexical analyzers 134during build. This requires flex 2.5.35 or later. 135 136 137Bison 138----- 139 140Since Linux 4.16, the build system generates parsers 141during build. This requires bison 2.0 or later. 142 143pahole 144------ 145 146Since Linux 5.2, if CONFIG_DEBUG_INFO_BTF is selected, the build system 147generates BTF (BPF Type Format) from DWARF in vmlinux, a bit later from kernel 148modules as well. This requires pahole v1.22 or later. 149 150It is found in the 'dwarves' or 'pahole' distro packages or from 151https://fedorapeople.org/~acme/dwarves/. 152 153Perl 154---- 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 159Python 160------ 161 162Several config options require it: it is required for arm/arm64 163default configs, CONFIG_LTO_CLANG, some DRM optional configs, 164the kernel-doc tool, and docs build (Sphinx), among others. 165 166BC 167-- 168 169You will need bc to build kernels 3.10 and higher 170 171 172OpenSSL 173------- 174 175Module signing and external certificate handling use the OpenSSL program and 176crypto library to do key creation and signature generation. 177 178You will need openssl to build kernels 3.7 and higher if module signing is 179enabled. You will also need openssl development packages to build kernels 4.3 180and higher. 181 182Tar 183--- 184 185GNU tar is needed if you want to enable access to the kernel headers via sysfs 186(CONFIG_IKHEADERS). 187 188gtags / GNU GLOBAL (optional) 189----------------------------- 190 191The kernel build requires GNU GLOBAL version 6.6.5 or later to generate 192tag files through ``make gtags``. This is due to its use of the gtags 193``-C (--directory)`` flag. 194 195mkimage 196------- 197 198This tool is used when building a Flat Image Tree (FIT), commonly used on ARM 199platforms. The tool is available via the ``u-boot-tools`` package or can be 200built from the U-Boot source code. See the instructions at 201https://docs.u-boot.org/en/latest/build/tools.html#building-tools-for-linux 202 203GNU AWK 204------- 205 206GNU AWK is needed if you want kernel builds to generate address range data for 207builtin modules (CONFIG_BUILTIN_MODULE_RANGES). 208 209System utilities 210**************** 211 212Architectural changes 213--------------------- 214 215DevFS has been obsoleted in favour of udev 216(https://www.kernel.org/pub/linux/utils/kernel/hotplug/) 217 21832-bit UID support is now in place. Have fun! 219 220Linux documentation for functions is transitioning to inline 221documentation via specially-formatted comments near their 222definitions in the source. These comments can be combined with ReST 223files in the Documentation/ directory to make enriched documentation, which can 224then be converted to PostScript, HTML, LaTex, ePUB and PDF files. 225In order to convert from ReST format to a format of your choice, you'll need 226Sphinx. 227 228Util-linux 229---------- 230 231New versions of util-linux provide ``fdisk`` support for larger disks, 232support new options to mount, recognize more supported partition 233types, and similar goodies. 234You'll probably want to upgrade. 235 236Ksymoops 237-------- 238 239If the unthinkable happens and your kernel oopses, you may need the 240ksymoops tool to decode it, but in most cases you don't. 241It is generally preferred to build the kernel with ``CONFIG_KALLSYMS`` so 242that it produces readable dumps that can be used as-is (this also 243produces better output than ksymoops). If for some reason your kernel 244is not build with ``CONFIG_KALLSYMS`` and you have no way to rebuild and 245reproduce the Oops with that option, then you can still decode that Oops 246with ksymoops. 247 248Mkinitrd 249-------- 250 251These changes to the ``/lib/modules`` file tree layout also require that 252mkinitrd be upgraded. 253 254E2fsprogs 255--------- 256 257The latest version of ``e2fsprogs`` fixes several bugs in fsck and 258debugfs. Obviously, it's a good idea to upgrade. 259 260JFSutils 261-------- 262 263The ``jfsutils`` package contains the utilities for the file system. 264The following utilities are available: 265 266- ``fsck.jfs`` - initiate replay of the transaction log, and check 267 and repair a JFS formatted partition. 268 269- ``mkfs.jfs`` - create a JFS formatted partition. 270 271- other file system utilities are also available in this package. 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 Documentation/doc-guide/sphinx.rst 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 496Xfsprogs 497-------- 498 499- <https://git.kernel.org/pub/scm/fs/xfs/xfsprogs-dev.git> 500- <https://www.kernel.org/pub/linux/utils/fs/xfs/xfsprogs/> 501 502Pcmciautils 503----------- 504 505- <https://www.kernel.org/pub/linux/utils/kernel/pcmcia/> 506 507Quota-tools 508----------- 509 510- <https://sourceforge.net/projects/linuxquota/> 511 512 513Intel P6 microcode 514------------------ 515 516- <https://downloadcenter.intel.com/> 517 518udev 519---- 520 521- <https://www.freedesktop.org/software/systemd/man/udev.html> 522 523FUSE 524---- 525 526- <https://github.com/libfuse/libfuse/releases> 527 528mcelog 529------ 530 531- <https://www.mcelog.org/> 532 533Networking 534********** 535 536PPP 537--- 538 539- <https://download.samba.org/pub/ppp/> 540- <https://git.ozlabs.org/?p=ppp.git> 541- <https://github.com/paulusmack/ppp/> 542 543NFS-utils 544--------- 545 546- <https://sourceforge.net/project/showfiles.php?group_id=14> 547- <https://nfs.sourceforge.net/> 548 549Iptables 550-------- 551 552- <https://netfilter.org/projects/iptables/index.html> 553 554Ip-route2 555--------- 556 557- <https://www.kernel.org/pub/linux/utils/net/iproute2/> 558 559OProfile 560-------- 561 562- <https://oprofile.sf.net/download/> 563 564Kernel documentation 565******************** 566 567Sphinx 568------ 569 570- <https://www.sphinx-doc.org/> 571