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