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