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) 17.0.1 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.26 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 150Since Linux 7.0, kfuncs annotated with KF_IMPLICIT_ARGS require pahole v1.26 151or later. Without it, such kfuncs will have incorrect BTF prototypes in 152vmlinux, causing BPF programs to fail to load with a "func_proto incompatible 153with vmlinux" error. Many sched_ext kfuncs are affected. 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 164Python 165------ 166 167Several config options require it: it is required for arm/arm64 168default configs, CONFIG_LTO_CLANG, some DRM optional configs, 169the kernel-doc tool, and docs build (Sphinx), among others. 170 171BC 172-- 173 174You will need bc to build kernels 3.10 and higher 175 176 177OpenSSL 178------- 179 180Module signing and external certificate handling use the OpenSSL program and 181crypto library to do key creation and signature generation. 182 183You will need openssl to build kernels 3.7 and higher if module signing is 184enabled. You will also need openssl development packages to build kernels 4.3 185and higher. 186 187Tar 188--- 189 190GNU tar is needed if you want to enable access to the kernel headers via sysfs 191(CONFIG_IKHEADERS). 192 193gtags / GNU GLOBAL (optional) 194----------------------------- 195 196The kernel build requires GNU GLOBAL version 6.6.5 or later to generate 197tag files through ``make gtags``. This is due to its use of the gtags 198``-C (--directory)`` flag. 199 200mkimage 201------- 202 203This tool is used when building a Flat Image Tree (FIT), commonly used on ARM 204platforms. The tool is available via the ``u-boot-tools`` package or can be 205built from the U-Boot source code. See the instructions at 206https://docs.u-boot.org/en/latest/build/tools.html#building-tools-for-linux 207 208GNU AWK 209------- 210 211GNU AWK is needed if you want kernel builds to generate address range data for 212builtin modules (CONFIG_BUILTIN_MODULE_RANGES). 213 214System utilities 215**************** 216 217Architectural changes 218--------------------- 219 220DevFS has been obsoleted in favour of udev 221(https://www.kernel.org/pub/linux/utils/kernel/hotplug/) 222 22332-bit UID support is now in place. Have fun! 224 225Linux documentation for functions is transitioning to inline 226documentation via specially-formatted comments near their 227definitions in the source. These comments can be combined with ReST 228files in the Documentation/ directory to make enriched documentation, which can 229then be converted to PostScript, HTML, LaTex, ePUB and PDF files. 230In order to convert from ReST format to a format of your choice, you'll need 231Sphinx. 232 233Util-linux 234---------- 235 236New versions of util-linux provide ``fdisk`` support for larger disks, 237support new options to mount, recognize more supported partition 238types, and similar goodies. 239You'll probably want to upgrade. 240 241Ksymoops 242-------- 243 244If the unthinkable happens and your kernel oopses, you may need the 245ksymoops tool to decode it, but in most cases you don't. 246It is generally preferred to build the kernel with ``CONFIG_KALLSYMS`` so 247that it produces readable dumps that can be used as-is (this also 248produces better output than ksymoops). If for some reason your kernel 249is not build with ``CONFIG_KALLSYMS`` and you have no way to rebuild and 250reproduce the Oops with that option, then you can still decode that Oops 251with ksymoops. 252 253Mkinitrd 254-------- 255 256These changes to the ``/lib/modules`` file tree layout also require that 257mkinitrd be upgraded. 258 259E2fsprogs 260--------- 261 262The latest version of ``e2fsprogs`` fixes several bugs in fsck and 263debugfs. Obviously, it's a good idea to upgrade. 264 265JFSutils 266-------- 267 268The ``jfsutils`` package contains the utilities for the file system. 269The following utilities are available: 270 271- ``fsck.jfs`` - initiate replay of the transaction log, and check 272 and repair a JFS formatted partition. 273 274- ``mkfs.jfs`` - create a JFS formatted partition. 275 276- other file system utilities are also available in this package. 277 278Xfsprogs 279-------- 280 281The latest version of ``xfsprogs`` contains ``mkfs.xfs``, ``xfs_db``, and the 282``xfs_repair`` utilities, among others, for the XFS filesystem. It is 283architecture independent and any version from 2.0.0 onward should 284work correctly with this version of the XFS kernel code (2.6.0 or 285later is recommended, due to some significant improvements). 286 287PCMCIAutils 288----------- 289 290PCMCIAutils replaces ``pcmcia-cs``. It properly sets up 291PCMCIA sockets at system startup and loads the appropriate modules 292for 16-bit PCMCIA devices if the kernel is modularized and the hotplug 293subsystem is used. 294 295Quota-tools 296----------- 297 298Support for 32 bit uid's and gid's is required if you want to use 299the newer version 2 quota format. Quota-tools version 3.07 and 300newer has this support. Use the recommended version or newer 301from the table above. 302 303Intel IA32 microcode 304-------------------- 305 306A driver has been added to allow updating of Intel IA32 microcode, 307accessible as a normal (misc) character device. If you are not using 308udev you may need to:: 309 310 mkdir /dev/cpu 311 mknod /dev/cpu/microcode c 10 184 312 chmod 0644 /dev/cpu/microcode 313 314as root before you can use this. You'll probably also want to 315get the user-space microcode_ctl utility to use with this. 316 317udev 318---- 319 320``udev`` is a userspace application for populating ``/dev`` dynamically with 321only entries for devices actually present. ``udev`` replaces the basic 322functionality of devfs, while allowing persistent device naming for 323devices. 324 325FUSE 326---- 327 328Needs libfuse 2.4.0 or later. Absolute minimum is 2.3.0 but mount 329options ``direct_io`` and ``kernel_cache`` won't work. 330 331Networking 332********** 333 334General changes 335--------------- 336 337If you have advanced network configuration needs, you should probably 338consider using the network tools from ip-route2. 339 340Packet Filter / NAT 341------------------- 342The packet filtering and NAT code uses the same tools like the previous 2.4.x 343kernel series (iptables). It still includes backwards-compatibility modules 344for 2.2.x-style ipchains and 2.0.x-style ipfwadm. 345 346PPP 347--- 348 349The PPP driver has been restructured to support multilink and to 350enable it to operate over diverse media layers. If you use PPP, 351upgrade pppd to at least 2.4.0. 352 353If you are not using udev, you must have the device file /dev/ppp 354which can be made by:: 355 356 mknod /dev/ppp c 108 0 357 358as root. 359 360NFS-utils 361--------- 362 363In ancient (2.4 and earlier) kernels, the nfs server needed to know 364about any client that expected to be able to access files via NFS. This 365information would be given to the kernel by ``mountd`` when the client 366mounted the filesystem, or by ``exportfs`` at system startup. exportfs 367would take information about active clients from ``/var/lib/nfs/rmtab``. 368 369This approach is quite fragile as it depends on rmtab being correct 370which is not always easy, particularly when trying to implement 371fail-over. Even when the system is working well, ``rmtab`` suffers from 372getting lots of old entries that never get removed. 373 374With modern kernels we have the option of having the kernel tell mountd 375when it gets a request from an unknown host, and mountd can give 376appropriate export information to the kernel. This removes the 377dependency on ``rmtab`` and means that the kernel only needs to know about 378currently active clients. 379 380To enable this new functionality, you need to:: 381 382 mount -t nfsd nfsd /proc/fs/nfsd 383 384before running exportfs or mountd. It is recommended that all NFS 385services be protected from the internet-at-large by a firewall where 386that is possible. 387 388mcelog 389------ 390 391On x86 kernels the mcelog utility is needed to process and log machine check 392events when ``CONFIG_X86_MCE`` is enabled. Machine check events are errors 393reported by the CPU. Processing them is strongly encouraged. 394 395Kernel documentation 396******************** 397 398Sphinx 399------ 400 401Please see :ref:`sphinx_install` in Documentation/doc-guide/sphinx.rst 402for details about Sphinx requirements. 403 404rustdoc 405------- 406 407``rustdoc`` is used to generate the documentation for Rust code. Please see 408Documentation/rust/general-information.rst for more information. 409 410Getting updated software 411======================== 412 413Kernel compilation 414****************** 415 416gcc 417--- 418 419- <ftp://ftp.gnu.org/gnu/gcc/> 420 421Clang/LLVM 422---------- 423 424- :ref:`Getting LLVM <getting_llvm>`. 425 426Rust 427---- 428 429- Documentation/rust/quick-start.rst. 430 431bindgen 432------- 433 434- Documentation/rust/quick-start.rst. 435 436Make 437---- 438 439- <ftp://ftp.gnu.org/gnu/make/> 440 441Bash 442---- 443 444- <ftp://ftp.gnu.org/gnu/bash/> 445 446Binutils 447-------- 448 449- <https://www.kernel.org/pub/linux/devel/binutils/> 450 451Flex 452---- 453 454- <https://github.com/westes/flex/releases> 455 456Bison 457----- 458 459- <ftp://ftp.gnu.org/gnu/bison/> 460 461OpenSSL 462------- 463 464- <https://www.openssl.org/> 465 466System utilities 467**************** 468 469Util-linux 470---------- 471 472- <https://www.kernel.org/pub/linux/utils/util-linux/> 473 474Kmod 475---- 476 477- <https://www.kernel.org/pub/linux/utils/kernel/kmod/> 478- <https://git.kernel.org/pub/scm/utils/kernel/kmod/kmod.git> 479 480Ksymoops 481-------- 482 483- <https://www.kernel.org/pub/linux/utils/kernel/ksymoops/v2.4/> 484 485Mkinitrd 486-------- 487 488- <https://code.launchpad.net/initrd-tools/main> 489 490E2fsprogs 491--------- 492 493- <https://www.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/> 494- <https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git/> 495 496JFSutils 497-------- 498 499- <https://jfs.sourceforge.net/> 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