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 3.82 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 66====================== =============== ======================================== 67 68.. [#f1] Sphinx is needed only to build the Kernel documentation 69 70Kernel compilation 71****************** 72 73GCC 74--- 75 76The gcc version requirements may vary depending on the type of CPU in your 77computer. 78 79Clang/LLVM (optional) 80--------------------- 81 82The latest formal release of clang and LLVM utils (according to 83`releases.llvm.org <https://releases.llvm.org>`_) are supported for building 84kernels. Older releases aren't guaranteed to work, and we may drop workarounds 85from the kernel that were used to support older versions. Please see additional 86docs on :ref:`Building Linux with Clang/LLVM <kbuild_llvm>`. 87 88Rust (optional) 89--------------- 90 91A particular version of the Rust toolchain is required. Newer versions may or 92may not work because the kernel depends on some unstable Rust features, for 93the moment. 94 95Each Rust toolchain comes with several "components", some of which are required 96(like ``rustc``) and some that are optional. The ``rust-src`` component (which 97is optional) needs to be installed to build the kernel. Other components are 98useful for developing. 99 100Please see Documentation/rust/quick-start.rst for instructions on how to 101satisfy the build requirements of Rust support. In particular, the ``Makefile`` 102target ``rustavailable`` is useful to check why the Rust toolchain may not 103be detected. 104 105bindgen (optional) 106------------------ 107 108``bindgen`` is used to generate the Rust bindings to the C side of the kernel. 109It depends on ``libclang``. 110 111Make 112---- 113 114You will need GNU make 3.82 or later to build the kernel. 115 116Bash 117---- 118 119Some bash scripts are used for the kernel build. 120Bash 4.2 or newer is needed. 121 122Binutils 123-------- 124 125Binutils 2.25 or newer is needed to build the kernel. 126 127pkg-config 128---------- 129 130The build system, as of 4.18, requires pkg-config to check for installed 131kconfig tools and to determine flags settings for use in 132'make {g,x}config'. Previously pkg-config was being used but not 133verified or documented. 134 135Flex 136---- 137 138Since Linux 4.16, the build system generates lexical analyzers 139during build. This requires flex 2.5.35 or later. 140 141 142Bison 143----- 144 145Since Linux 4.16, the build system generates parsers 146during build. This requires bison 2.0 or later. 147 148pahole 149------ 150 151Since Linux 5.2, if CONFIG_DEBUG_INFO_BTF is selected, the build system 152generates BTF (BPF Type Format) from DWARF in vmlinux, a bit later from kernel 153modules as well. This requires pahole v1.16 or later. 154 155It is found in the 'dwarves' or 'pahole' distro packages or from 156https://fedorapeople.org/~acme/dwarves/. 157 158Perl 159---- 160 161You will need perl 5 and the following modules: ``Getopt::Long``, 162``Getopt::Std``, ``File::Basename``, and ``File::Find`` to build the kernel. 163 164BC 165-- 166 167You will need bc to build kernels 3.10 and higher 168 169 170OpenSSL 171------- 172 173Module signing and external certificate handling use the OpenSSL program and 174crypto library to do key creation and signature generation. 175 176You will need openssl to build kernels 3.7 and higher if module signing is 177enabled. You will also need openssl development packages to build kernels 4.3 178and higher. 179 180Tar 181--- 182 183GNU tar is needed if you want to enable access to the kernel headers via sysfs 184(CONFIG_IKHEADERS). 185 186gtags / GNU GLOBAL (optional) 187----------------------------- 188 189The kernel build requires GNU GLOBAL version 6.6.5 or later to generate 190tag files through ``make gtags``. This is due to its use of the gtags 191``-C (--directory)`` flag. 192 193mkimage 194------- 195 196This tool is used when building a Flat Image Tree (FIT), commonly used on ARM 197platforms. The tool is available via the ``u-boot-tools`` package or can be 198built from the U-Boot source code. See the instructions at 199https://docs.u-boot.org/en/latest/build/tools.html#building-tools-for-linux 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 538cpio 539---- 540 541- <https://www.gnu.org/software/cpio/> 542 543Networking 544********** 545 546PPP 547--- 548 549- <https://download.samba.org/pub/ppp/> 550- <https://git.ozlabs.org/?p=ppp.git> 551- <https://github.com/paulusmack/ppp/> 552 553NFS-utils 554--------- 555 556- <https://sourceforge.net/project/showfiles.php?group_id=14> 557- <https://nfs.sourceforge.net/> 558 559Iptables 560-------- 561 562- <https://netfilter.org/projects/iptables/index.html> 563 564Ip-route2 565--------- 566 567- <https://www.kernel.org/pub/linux/utils/net/iproute2/> 568 569OProfile 570-------- 571 572- <https://oprofile.sf.net/download/> 573 574Kernel documentation 575******************** 576 577Sphinx 578------ 579 580- <https://www.sphinx-doc.org/> 581