linux/Documentation/process/changes.rst
<<
>>
Prefs
   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 4.x kernels.
  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                  4.9              gcc --version
  33Clang/LLVM (optional)  10.0.1           clang --version
  34GNU make               3.81             make --version
  35binutils               2.23             ld -v
  36flex                   2.5.35           flex --version
  37bison                  2.0              bison --version
  38util-linux             2.10o            fdformat --version
  39kmod                   13               depmod -V
  40e2fsprogs              1.41.4           e2fsck -V
  41jfsutils               1.1.3            fsck.jfs -V
  42reiserfsprogs          3.6.3            reiserfsck -V
  43xfsprogs               2.6.0            xfs_db -V
  44squashfs-tools         4.0              mksquashfs -version
  45btrfs-progs            0.18             btrfsck
  46pcmciautils            004              pccardctl -V
  47quota-tools            3.09             quota -V
  48PPP                    2.4.0            pppd --version
  49nfs-utils              1.0.5            showmount --version
  50procps                 3.2.0            ps --version
  51udev                   081              udevd --version
  52grub                   0.93             grub --version || grub-install --version
  53mcelog                 0.6              mcelog --version
  54iptables               1.4.2            iptables -V
  55openssl & libcrypto    1.0.0            openssl version
  56bc                     1.06.95          bc --version
  57Sphinx\ [#f1]_         1.3              sphinx-build --version
  58====================== ===============  ========================================
  59
  60.. [#f1] Sphinx is needed only to build the Kernel documentation
  61
  62Kernel compilation
  63******************
  64
  65GCC
  66---
  67
  68The gcc version requirements may vary depending on the type of CPU in your
  69computer.
  70
  71Clang/LLVM (optional)
  72---------------------
  73
  74The latest formal release of clang and LLVM utils (according to
  75`releases.llvm.org <https://releases.llvm.org>`_) are supported for building
  76kernels. Older releases aren't guaranteed to work, and we may drop workarounds
  77from the kernel that were used to support older versions. Please see additional
  78docs on :ref:`Building Linux with Clang/LLVM <kbuild_llvm>`.
  79
  80Make
  81----
  82
  83You will need GNU make 3.81 or later to build the kernel.
  84
  85Binutils
  86--------
  87
  88Binutils 2.23 or newer is needed to build the kernel.
  89
  90pkg-config
  91----------
  92
  93The build system, as of 4.18, requires pkg-config to check for installed
  94kconfig tools and to determine flags settings for use in
  95'make {g,x}config'.  Previously pkg-config was being used but not
  96verified or documented.
  97
  98Flex
  99----
 100
 101Since Linux 4.16, the build system generates lexical analyzers
 102during build.  This requires flex 2.5.35 or later.
 103
 104
 105Bison
 106-----
 107
 108Since Linux 4.16, the build system generates parsers
 109during build.  This requires bison 2.0 or later.
 110
 111Perl
 112----
 113
 114You will need perl 5 and the following modules: ``Getopt::Long``,
 115``Getopt::Std``, ``File::Basename``, and ``File::Find`` to build the kernel.
 116
 117BC
 118--
 119
 120You will need bc to build kernels 3.10 and higher
 121
 122
 123OpenSSL
 124-------
 125
 126Module signing and external certificate handling use the OpenSSL program and
 127crypto library to do key creation and signature generation.
 128
 129You will need openssl to build kernels 3.7 and higher if module signing is
 130enabled.  You will also need openssl development packages to build kernels 4.3
 131and higher.
 132
 133
 134System utilities
 135****************
 136
 137Architectural changes
 138---------------------
 139
 140DevFS has been obsoleted in favour of udev
 141(https://www.kernel.org/pub/linux/utils/kernel/hotplug/)
 142
 14332-bit UID support is now in place.  Have fun!
 144
 145Linux documentation for functions is transitioning to inline
 146documentation via specially-formatted comments near their
 147definitions in the source.  These comments can be combined with ReST
 148files the Documentation/ directory to make enriched documentation, which can
 149then be converted to PostScript, HTML, LaTex, ePUB and PDF files.
 150In order to convert from ReST format to a format of your choice, you'll need
 151Sphinx.
 152
 153Util-linux
 154----------
 155
 156New versions of util-linux provide ``fdisk`` support for larger disks,
 157support new options to mount, recognize more supported partition
 158types, have a fdformat which works with 2.4 kernels, and similar goodies.
 159You'll probably want to upgrade.
 160
 161Ksymoops
 162--------
 163
 164If the unthinkable happens and your kernel oopses, you may need the
 165ksymoops tool to decode it, but in most cases you don't.
 166It is generally preferred to build the kernel with ``CONFIG_KALLSYMS`` so
 167that it produces readable dumps that can be used as-is (this also
 168produces better output than ksymoops).  If for some reason your kernel
 169is not build with ``CONFIG_KALLSYMS`` and you have no way to rebuild and
 170reproduce the Oops with that option, then you can still decode that Oops
 171with ksymoops.
 172
 173Mkinitrd
 174--------
 175
 176These changes to the ``/lib/modules`` file tree layout also require that
 177mkinitrd be upgraded.
 178
 179E2fsprogs
 180---------
 181
 182The latest version of ``e2fsprogs`` fixes several bugs in fsck and
 183debugfs.  Obviously, it's a good idea to upgrade.
 184
 185JFSutils
 186--------
 187
 188The ``jfsutils`` package contains the utilities for the file system.
 189The following utilities are available:
 190
 191- ``fsck.jfs`` - initiate replay of the transaction log, and check
 192  and repair a JFS formatted partition.
 193
 194- ``mkfs.jfs`` - create a JFS formatted partition.
 195
 196- other file system utilities are also available in this package.
 197
 198Reiserfsprogs
 199-------------
 200
 201The reiserfsprogs package should be used for reiserfs-3.6.x
 202(Linux kernels 2.4.x). It is a combined package and contains working
 203versions of ``mkreiserfs``, ``resize_reiserfs``, ``debugreiserfs`` and
 204``reiserfsck``. These utils work on both i386 and alpha platforms.
 205
 206Xfsprogs
 207--------
 208
 209The latest version of ``xfsprogs`` contains ``mkfs.xfs``, ``xfs_db``, and the
 210``xfs_repair`` utilities, among others, for the XFS filesystem.  It is
 211architecture independent and any version from 2.0.0 onward should
 212work correctly with this version of the XFS kernel code (2.6.0 or
 213later is recommended, due to some significant improvements).
 214
 215PCMCIAutils
 216-----------
 217
 218PCMCIAutils replaces ``pcmcia-cs``. It properly sets up
 219PCMCIA sockets at system startup and loads the appropriate modules
 220for 16-bit PCMCIA devices if the kernel is modularized and the hotplug
 221subsystem is used.
 222
 223Quota-tools
 224-----------
 225
 226Support for 32 bit uid's and gid's is required if you want to use
 227the newer version 2 quota format.  Quota-tools version 3.07 and
 228newer has this support.  Use the recommended version or newer
 229from the table above.
 230
 231Intel IA32 microcode
 232--------------------
 233
 234A driver has been added to allow updating of Intel IA32 microcode,
 235accessible as a normal (misc) character device.  If you are not using
 236udev you may need to::
 237
 238  mkdir /dev/cpu
 239  mknod /dev/cpu/microcode c 10 184
 240  chmod 0644 /dev/cpu/microcode
 241
 242as root before you can use this.  You'll probably also want to
 243get the user-space microcode_ctl utility to use with this.
 244
 245udev
 246----
 247
 248``udev`` is a userspace application for populating ``/dev`` dynamically with
 249only entries for devices actually present. ``udev`` replaces the basic
 250functionality of devfs, while allowing persistent device naming for
 251devices.
 252
 253FUSE
 254----
 255
 256Needs libfuse 2.4.0 or later.  Absolute minimum is 2.3.0 but mount
 257options ``direct_io`` and ``kernel_cache`` won't work.
 258
 259Networking
 260**********
 261
 262General changes
 263---------------
 264
 265If you have advanced network configuration needs, you should probably
 266consider using the network tools from ip-route2.
 267
 268Packet Filter / NAT
 269-------------------
 270The packet filtering and NAT code uses the same tools like the previous 2.4.x
 271kernel series (iptables).  It still includes backwards-compatibility modules
 272for 2.2.x-style ipchains and 2.0.x-style ipfwadm.
 273
 274PPP
 275---
 276
 277The PPP driver has been restructured to support multilink and to
 278enable it to operate over diverse media layers.  If you use PPP,
 279upgrade pppd to at least 2.4.0.
 280
 281If you are not using udev, you must have the device file /dev/ppp
 282which can be made by::
 283
 284  mknod /dev/ppp c 108 0
 285
 286as root.
 287
 288NFS-utils
 289---------
 290
 291In ancient (2.4 and earlier) kernels, the nfs server needed to know
 292about any client that expected to be able to access files via NFS.  This
 293information would be given to the kernel by ``mountd`` when the client
 294mounted the filesystem, or by ``exportfs`` at system startup.  exportfs
 295would take information about active clients from ``/var/lib/nfs/rmtab``.
 296
 297This approach is quite fragile as it depends on rmtab being correct
 298which is not always easy, particularly when trying to implement
 299fail-over.  Even when the system is working well, ``rmtab`` suffers from
 300getting lots of old entries that never get removed.
 301
 302With modern kernels we have the option of having the kernel tell mountd
 303when it gets a request from an unknown host, and mountd can give
 304appropriate export information to the kernel.  This removes the
 305dependency on ``rmtab`` and means that the kernel only needs to know about
 306currently active clients.
 307
 308To enable this new functionality, you need to::
 309
 310  mount -t nfsd nfsd /proc/fs/nfsd
 311
 312before running exportfs or mountd.  It is recommended that all NFS
 313services be protected from the internet-at-large by a firewall where
 314that is possible.
 315
 316mcelog
 317------
 318
 319On x86 kernels the mcelog utility is needed to process and log machine check
 320events when ``CONFIG_X86_MCE`` is enabled. Machine check events are errors
 321reported by the CPU. Processing them is strongly encouraged.
 322
 323Kernel documentation
 324********************
 325
 326Sphinx
 327------
 328
 329Please see :ref:`sphinx_install` in :ref:`Documentation/doc-guide/sphinx.rst <sphinxdoc>`
 330for details about Sphinx requirements.
 331
 332Getting updated software
 333========================
 334
 335Kernel compilation
 336******************
 337
 338gcc
 339---
 340
 341- <ftp://ftp.gnu.org/gnu/gcc/>
 342
 343Clang/LLVM
 344----------
 345
 346- :ref:`Getting LLVM <getting_llvm>`.
 347
 348Make
 349----
 350
 351- <ftp://ftp.gnu.org/gnu/make/>
 352
 353Binutils
 354--------
 355
 356- <https://www.kernel.org/pub/linux/devel/binutils/>
 357
 358Flex
 359----
 360
 361- <https://github.com/westes/flex/releases>
 362
 363Bison
 364-----
 365
 366- <ftp://ftp.gnu.org/gnu/bison/>
 367
 368OpenSSL
 369-------
 370
 371- <https://www.openssl.org/>
 372
 373System utilities
 374****************
 375
 376Util-linux
 377----------
 378
 379- <https://www.kernel.org/pub/linux/utils/util-linux/>
 380
 381Kmod
 382----
 383
 384- <https://www.kernel.org/pub/linux/utils/kernel/kmod/>
 385- <https://git.kernel.org/pub/scm/utils/kernel/kmod/kmod.git>
 386
 387Ksymoops
 388--------
 389
 390- <https://www.kernel.org/pub/linux/utils/kernel/ksymoops/v2.4/>
 391
 392Mkinitrd
 393--------
 394
 395- <https://code.launchpad.net/initrd-tools/main>
 396
 397E2fsprogs
 398---------
 399
 400- <https://www.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/>
 401- <https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git/>
 402
 403JFSutils
 404--------
 405
 406- <http://jfs.sourceforge.net/>
 407
 408Reiserfsprogs
 409-------------
 410
 411- <https://git.kernel.org/pub/scm/linux/kernel/git/jeffm/reiserfsprogs.git/>
 412
 413Xfsprogs
 414--------
 415
 416- <https://git.kernel.org/pub/scm/fs/xfs/xfsprogs-dev.git>
 417- <https://www.kernel.org/pub/linux/utils/fs/xfs/xfsprogs/>
 418
 419Pcmciautils
 420-----------
 421
 422- <https://www.kernel.org/pub/linux/utils/kernel/pcmcia/>
 423
 424Quota-tools
 425-----------
 426
 427- <http://sourceforge.net/projects/linuxquota/>
 428
 429
 430Intel P6 microcode
 431------------------
 432
 433- <https://downloadcenter.intel.com/>
 434
 435udev
 436----
 437
 438- <https://www.freedesktop.org/software/systemd/man/udev.html>
 439
 440FUSE
 441----
 442
 443- <https://github.com/libfuse/libfuse/releases>
 444
 445mcelog
 446------
 447
 448- <http://www.mcelog.org/>
 449
 450Networking
 451**********
 452
 453PPP
 454---
 455
 456- <https://download.samba.org/pub/ppp/>
 457- <https://git.ozlabs.org/?p=ppp.git>
 458- <https://github.com/paulusmack/ppp/>
 459
 460NFS-utils
 461---------
 462
 463- <http://sourceforge.net/project/showfiles.php?group_id=14>
 464
 465Iptables
 466--------
 467
 468- <https://netfilter.org/projects/iptables/index.html>
 469
 470Ip-route2
 471---------
 472
 473- <https://www.kernel.org/pub/linux/utils/net/iproute2/>
 474
 475OProfile
 476--------
 477
 478- <http://oprofile.sf.net/download/>
 479
 480NFS-Utils
 481---------
 482
 483- <http://nfs.sourceforge.net/>
 484
 485Kernel documentation
 486********************
 487
 488Sphinx
 489------
 490
 491- <https://www.sphinx-doc.org/>
 492