xref: /linux/Documentation/process/changes.rst (revision 6093a688a07da07808f0122f9aa2a3eed250d853)
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.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