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