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