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