Merge tag 'x86-asm-2024-03-11' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
[linux-2.6-block.git] / Documentation / process / changes.rst
CommitLineData
609d99a3
MCC
1.. _changes:
2
9b4ebd98 3Minimal requirements to compile the Kernel
840f6690
MCC
4++++++++++++++++++++++++++++++++++++++++++
5
1da177e4
LT
6Intro
7=====
8
9This document is designed to provide a list of the minimum levels of
5a5866c2 10software necessary to run the current kernel version.
1da177e4
LT
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
1da177e4 17Current Minimal Requirements
840f6690 18****************************
1da177e4 19
840f6690 20Upgrade to at **least** these software revisions before thinking you've
1da177e4
LT
21encountered a bug! If you're unsure what version you're currently
22running, the suggested command should tell you.
23
5adaf851
LT
24Again, keep in mind that this list assumes you are already functionally
25running a Linux kernel. Also, not all tools are necessary on all
9c3c0c20
AB
26systems; obviously, if you don't have any PC Card hardware, for example,
27you probably needn't concern yourself with pcmciautils.
1da177e4 28
840f6690
MCC
29====================== =============== ========================================
30 Program Minimal version Command to check the version
31====================== =============== ========================================
76ae8474 32GNU C 5.1 gcc --version
df05c0e9 33Clang/LLVM (optional) 11.0.0 clang --version
768409cf 34Rust (optional) 1.76.0 rustc --version
08ab7865 35bindgen (optional) 0.65.1 bindgen --version
0715fdb0 36GNU make 3.82 make --version
da4288b9 37bash 4.2 bash --version
e4412739 38binutils 2.25 ld -v
033dba2e
MY
39flex 2.5.35 flex --version
40bison 2.0 bison --version
333b11e5 41pahole 1.16 pahole --version
821bd43e 42util-linux 2.10o mount --version
934193a6 43kmod 13 depmod -V
840f6690
MCC
44e2fsprogs 1.41.4 e2fsck -V
45jfsutils 1.1.3 fsck.jfs -V
46reiserfsprogs 3.6.3 reiserfsck -V
47xfsprogs 2.6.0 xfs_db -V
48squashfs-tools 4.0 mksquashfs -version
49btrfs-progs 0.18 btrfsck
50pcmciautils 004 pccardctl -V
51quota-tools 3.09 quota -V
52PPP 2.4.0 pppd --version
840f6690
MCC
53nfs-utils 1.0.5 showmount --version
54procps 3.2.0 ps --version
840f6690
MCC
55udev 081 udevd --version
56grub 0.93 grub --version || grub-install --version
57mcelog 0.6 mcelog --version
58iptables 1.4.2 iptables -V
59openssl & libcrypto 1.0.0 openssl version
60bc 1.06.95 bc --version
3e893e16 61Sphinx\ [#f1]_ 2.4.4 sphinx-build --version
69ef0920 62cpio any cpio --version
c584476d 63GNU tar 1.28 tar --version
b230235b 64gtags (optional) 6.6.5 gtags --version
840f6690 65====================== =============== ========================================
7a922637 66
81f10d19 67.. [#f1] Sphinx is needed only to build the Kernel documentation
1da177e4
LT
68
69Kernel compilation
840f6690 70******************
1da177e4
LT
71
72GCC
73---
74
75The gcc version requirements may vary depending on the type of CPU in your
a1365647 76computer.
1da177e4 77
3519c4d6
ND
78Clang/LLVM (optional)
79---------------------
80
81The latest formal release of clang and LLVM utils (according to
82`releases.llvm.org <https://releases.llvm.org>`_) are supported for building
83kernels. Older releases aren't guaranteed to work, and we may drop workarounds
84from the kernel that were used to support older versions. Please see additional
85docs on :ref:`Building Linux with Clang/LLVM <kbuild_llvm>`.
86
d07479b2
MO
87Rust (optional)
88---------------
89
90A particular version of the Rust toolchain is required. Newer versions may or
91may not work because the kernel depends on some unstable Rust features, for
92the moment.
93
94Each Rust toolchain comes with several "components", some of which are required
95(like ``rustc``) and some that are optional. The ``rust-src`` component (which
96is optional) needs to be installed to build the kernel. Other components are
97useful for developing.
98
99Please see Documentation/rust/quick-start.rst for instructions on how to
100satisfy the build requirements of Rust support. In particular, the ``Makefile``
101target ``rustavailable`` is useful to check why the Rust toolchain may not
102be detected.
103
104bindgen (optional)
105------------------
106
107``bindgen`` is used to generate the Rust bindings to the C side of the kernel.
108It depends on ``libclang``.
109
1da177e4
LT
110Make
111----
112
0715fdb0 113You will need GNU make 3.82 or later to build the kernel.
1da177e4 114
da4288b9
MY
115Bash
116----
117
118Some bash scripts are used for the kernel build.
119Bash 4.2 or newer is needed.
120
1da177e4
LT
121Binutils
122--------
123
e4412739 124Binutils 2.25 or newer is needed to build the kernel.
1da177e4 125
4ab3b801
RD
126pkg-config
127----------
128
129The build system, as of 4.18, requires pkg-config to check for installed
130kconfig tools and to determine flags settings for use in
fd65465b 131'make {g,x}config'. Previously pkg-config was being used but not
4ab3b801
RD
132verified or documented.
133
033dba2e
MY
134Flex
135----
136
137Since Linux 4.16, the build system generates lexical analyzers
138during build. This requires flex 2.5.35 or later.
139
140
141Bison
142-----
143
144Since Linux 4.16, the build system generates parsers
145during build. This requires bison 2.0 or later.
146
333b11e5
ACM
147pahole:
148-------
149
150Since Linux 5.2, if CONFIG_DEBUG_INFO_BTF is selected, the build system
151generates BTF (BPF Type Format) from DWARF in vmlinux, a bit later from kernel
152modules as well. This requires pahole v1.16 or later.
153
154It is found in the 'dwarves' or 'pahole' distro packages or from
155https://fedorapeople.org/~acme/dwarves/.
156
08219624
JLPD
157Perl
158----
159
840f6690
MCC
160You will need perl 5 and the following modules: ``Getopt::Long``,
161``Getopt::Std``, ``File::Basename``, and ``File::Find`` to build the kernel.
08219624 162
221069be
A
163BC
164--
165
166You will need bc to build kernels 3.10 and higher
167
08219624 168
3f1d44ae
DH
169OpenSSL
170-------
171
172Module signing and external certificate handling use the OpenSSL program and
173crypto library to do key creation and signature generation.
174
175You will need openssl to build kernels 3.7 and higher if module signing is
176enabled. You will also need openssl development packages to build kernels 4.3
177and higher.
178
c584476d
MY
179Tar
180---
181
182GNU tar is needed if you want to enable access to the kernel headers via sysfs
183(CONFIG_IKHEADERS).
184
b230235b
AD
185gtags / GNU GLOBAL (optional)
186-----------------------------
187
188The kernel build requires GNU GLOBAL version 6.6.5 or later to generate
189tag files through ``make gtags``. This is due to its use of the gtags
190``-C (--directory)`` flag.
3f1d44ae 191
1da177e4 192System utilities
840f6690 193****************
1da177e4
LT
194
195Architectural changes
196---------------------
197
198DevFS has been obsoleted in favour of udev
e7b4311e 199(https://www.kernel.org/pub/linux/utils/kernel/hotplug/)
1da177e4
LT
200
20132-bit UID support is now in place. Have fun!
202
203Linux documentation for functions is transitioning to inline
204documentation via specially-formatted comments near their
ff41c419
MCC
205definitions in the source. These comments can be combined with ReST
206files the Documentation/ directory to make enriched documentation, which can
207then be converted to PostScript, HTML, LaTex, ePUB and PDF files.
208In order to convert from ReST format to a format of your choice, you'll need
209Sphinx.
1da177e4
LT
210
211Util-linux
212----------
213
840f6690 214New versions of util-linux provide ``fdisk`` support for larger disks,
1da177e4 215support new options to mount, recognize more supported partition
821bd43e 216types, and similar goodies.
1da177e4
LT
217You'll probably want to upgrade.
218
219Ksymoops
220--------
221
62a07e6e
JJ
222If the unthinkable happens and your kernel oopses, you may need the
223ksymoops tool to decode it, but in most cases you don't.
840f6690 224It is generally preferred to build the kernel with ``CONFIG_KALLSYMS`` so
5adaf851
LT
225that it produces readable dumps that can be used as-is (this also
226produces better output than ksymoops). If for some reason your kernel
840f6690 227is not build with ``CONFIG_KALLSYMS`` and you have no way to rebuild and
5adaf851
LT
228reproduce the Oops with that option, then you can still decode that Oops
229with ksymoops.
1da177e4 230
1da177e4
LT
231Mkinitrd
232--------
233
840f6690 234These changes to the ``/lib/modules`` file tree layout also require that
1da177e4
LT
235mkinitrd be upgraded.
236
237E2fsprogs
238---------
239
840f6690 240The latest version of ``e2fsprogs`` fixes several bugs in fsck and
1da177e4
LT
241debugfs. Obviously, it's a good idea to upgrade.
242
243JFSutils
244--------
245
840f6690 246The ``jfsutils`` package contains the utilities for the file system.
1da177e4 247The following utilities are available:
840f6690
MCC
248
249- ``fsck.jfs`` - initiate replay of the transaction log, and check
1da177e4 250 and repair a JFS formatted partition.
840f6690
MCC
251
252- ``mkfs.jfs`` - create a JFS formatted partition.
253
254- other file system utilities are also available in this package.
1da177e4
LT
255
256Reiserfsprogs
257-------------
258
259The reiserfsprogs package should be used for reiserfs-3.6.x
260(Linux kernels 2.4.x). It is a combined package and contains working
840f6690
MCC
261versions of ``mkreiserfs``, ``resize_reiserfs``, ``debugreiserfs`` and
262``reiserfsck``. These utils work on both i386 and alpha platforms.
1da177e4
LT
263
264Xfsprogs
265--------
266
840f6690
MCC
267The latest version of ``xfsprogs`` contains ``mkfs.xfs``, ``xfs_db``, and the
268``xfs_repair`` utilities, among others, for the XFS filesystem. It is
1da177e4
LT
269architecture independent and any version from 2.0.0 onward should
270work correctly with this version of the XFS kernel code (2.6.0 or
271later is recommended, due to some significant improvements).
272
5085cb26
DB
273PCMCIAutils
274-----------
275
840f6690 276PCMCIAutils replaces ``pcmcia-cs``. It properly sets up
5085cb26
DB
277PCMCIA sockets at system startup and loads the appropriate modules
278for 16-bit PCMCIA devices if the kernel is modularized and the hotplug
279subsystem is used.
1da177e4 280
1da177e4
LT
281Quota-tools
282-----------
283
284Support for 32 bit uid's and gid's is required if you want to use
285the newer version 2 quota format. Quota-tools version 3.07 and
286newer has this support. Use the recommended version or newer
287from the table above.
288
289Intel IA32 microcode
290--------------------
291
292A driver has been added to allow updating of Intel IA32 microcode,
890fbae2 293accessible as a normal (misc) character device. If you are not using
1b49ecf2 294udev you may need to::
840f6690
MCC
295
296 mkdir /dev/cpu
297 mknod /dev/cpu/microcode c 10 184
298 chmod 0644 /dev/cpu/microcode
1da177e4
LT
299
300as root before you can use this. You'll probably also want to
301get the user-space microcode_ctl utility to use with this.
302
1da177e4
LT
303udev
304----
840f6690
MCC
305
306``udev`` is a userspace application for populating ``/dev`` dynamically with
307only entries for devices actually present. ``udev`` replaces the basic
03a67a46 308functionality of devfs, while allowing persistent device naming for
890fbae2 309devices.
1da177e4 310
909021ea
MS
311FUSE
312----
313
314Needs libfuse 2.4.0 or later. Absolute minimum is 2.3.0 but mount
840f6690 315options ``direct_io`` and ``kernel_cache`` won't work.
909021ea 316
1da177e4 317Networking
840f6690 318**********
1da177e4
LT
319
320General changes
321---------------
322
323If you have advanced network configuration needs, you should probably
324consider using the network tools from ip-route2.
325
326Packet Filter / NAT
327-------------------
328The packet filtering and NAT code uses the same tools like the previous 2.4.x
329kernel series (iptables). It still includes backwards-compatibility modules
330for 2.2.x-style ipchains and 2.0.x-style ipfwadm.
331
332PPP
333---
334
335The PPP driver has been restructured to support multilink and to
336enable it to operate over diverse media layers. If you use PPP,
337upgrade pppd to at least 2.4.0.
338
890fbae2 339If you are not using udev, you must have the device file /dev/ppp
1b49ecf2 340which can be made by::
840f6690
MCC
341
342 mknod /dev/ppp c 108 0
1da177e4
LT
343
344as root.
345
1da177e4
LT
346NFS-utils
347---------
348
5adaf851
LT
349In ancient (2.4 and earlier) kernels, the nfs server needed to know
350about any client that expected to be able to access files via NFS. This
840f6690
MCC
351information would be given to the kernel by ``mountd`` when the client
352mounted the filesystem, or by ``exportfs`` at system startup. exportfs
353would take information about active clients from ``/var/lib/nfs/rmtab``.
1da177e4
LT
354
355This approach is quite fragile as it depends on rmtab being correct
356which is not always easy, particularly when trying to implement
840f6690 357fail-over. Even when the system is working well, ``rmtab`` suffers from
1da177e4
LT
358getting lots of old entries that never get removed.
359
5adaf851
LT
360With modern kernels we have the option of having the kernel tell mountd
361when it gets a request from an unknown host, and mountd can give
362appropriate export information to the kernel. This removes the
840f6690 363dependency on ``rmtab`` and means that the kernel only needs to know about
5adaf851 364currently active clients.
1da177e4 365
1b49ecf2 366To enable this new functionality, you need to::
840f6690 367
e4121712 368 mount -t nfsd nfsd /proc/fs/nfsd
1da177e4
LT
369
370before running exportfs or mountd. It is recommended that all NFS
371services be protected from the internet-at-large by a firewall where
372that is possible.
373
172d899d
AK
374mcelog
375------
376
c8c3f7d6 377On x86 kernels the mcelog utility is needed to process and log machine check
840f6690
MCC
378events when ``CONFIG_X86_MCE`` is enabled. Machine check events are errors
379reported by the CPU. Processing them is strongly encouraged.
172d899d 380
81f10d19
MCC
381Kernel documentation
382********************
383
384Sphinx
385------
386
f77af637 387Please see :ref:`sphinx_install` in :ref:`Documentation/doc-guide/sphinx.rst <sphinxdoc>`
b8b07b5c 388for details about Sphinx requirements.
81f10d19 389
d07479b2
MO
390rustdoc
391-------
392
393``rustdoc`` is used to generate the documentation for Rust code. Please see
394Documentation/rust/general-information.rst for more information.
395
1da177e4
LT
396Getting updated software
397========================
398
399Kernel compilation
400******************
401
a1365647
AM
402gcc
403---
840f6690
MCC
404
405- <ftp://ftp.gnu.org/gnu/gcc/>
1da177e4 406
3519c4d6
ND
407Clang/LLVM
408----------
409
410- :ref:`Getting LLVM <getting_llvm>`.
411
d07479b2
MO
412Rust
413----
414
415- Documentation/rust/quick-start.rst.
416
417bindgen
418-------
419
420- Documentation/rust/quick-start.rst.
421
1da177e4
LT
422Make
423----
840f6690
MCC
424
425- <ftp://ftp.gnu.org/gnu/make/>
1da177e4 426
da4288b9
MY
427Bash
428----
429
430- <ftp://ftp.gnu.org/gnu/bash/>
431
1da177e4
LT
432Binutils
433--------
840f6690 434
3bdadc86 435- <https://www.kernel.org/pub/linux/devel/binutils/>
1da177e4 436
033dba2e
MY
437Flex
438----
439
440- <https://github.com/westes/flex/releases>
441
442Bison
443-----
444
445- <ftp://ftp.gnu.org/gnu/bison/>
446
3f1d44ae
DH
447OpenSSL
448-------
840f6690
MCC
449
450- <https://www.openssl.org/>
3f1d44ae 451
1da177e4
LT
452System utilities
453****************
454
455Util-linux
456----------
840f6690 457
3bdadc86 458- <https://www.kernel.org/pub/linux/utils/util-linux/>
1da177e4 459
934193a6
RD
460Kmod
461----
462
463- <https://www.kernel.org/pub/linux/utils/kernel/kmod/>
464- <https://git.kernel.org/pub/scm/utils/kernel/kmod/kmod.git>
465
1da177e4
LT
466Ksymoops
467--------
840f6690 468
3bdadc86 469- <https://www.kernel.org/pub/linux/utils/kernel/ksymoops/v2.4/>
1da177e4 470
1da177e4
LT
471Mkinitrd
472--------
840f6690
MCC
473
474- <https://code.launchpad.net/initrd-tools/main>
1da177e4
LT
475
476E2fsprogs
477---------
840f6690 478
599e6f8d
RD
479- <https://www.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/>
480- <https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git/>
1da177e4
LT
481
482JFSutils
483--------
840f6690 484
383f3088 485- <https://jfs.sourceforge.net/>
1da177e4
LT
486
487Reiserfsprogs
488-------------
840f6690 489
599e6f8d 490- <https://git.kernel.org/pub/scm/linux/kernel/git/jeffm/reiserfsprogs.git/>
1da177e4
LT
491
492Xfsprogs
493--------
840f6690 494
599e6f8d
RD
495- <https://git.kernel.org/pub/scm/fs/xfs/xfsprogs-dev.git>
496- <https://www.kernel.org/pub/linux/utils/fs/xfs/xfsprogs/>
1da177e4 497
5085cb26
DB
498Pcmciautils
499-----------
840f6690 500
3bdadc86 501- <https://www.kernel.org/pub/linux/utils/kernel/pcmcia/>
5085cb26 502
1da177e4 503Quota-tools
840f6690
MCC
504-----------
505
383f3088 506- <https://sourceforge.net/projects/linuxquota/>
1da177e4 507
8b0c2d98 508
1da177e4
LT
509Intel P6 microcode
510------------------
840f6690
MCC
511
512- <https://downloadcenter.intel.com/>
1da177e4 513
1da177e4
LT
514udev
515----
840f6690 516
e7b4311e 517- <https://www.freedesktop.org/software/systemd/man/udev.html>
1da177e4 518
909021ea
MS
519FUSE
520----
840f6690 521
86afad7d 522- <https://github.com/libfuse/libfuse/releases>
909021ea 523
172d899d
AK
524mcelog
525------
840f6690 526
383f3088 527- <https://www.mcelog.org/>
172d899d 528
69ef0920
BMG
529cpio
530----
531
532- <https://www.gnu.org/software/cpio/>
533
1da177e4
LT
534Networking
535**********
536
537PPP
538---
840f6690 539
599e6f8d
RD
540- <https://download.samba.org/pub/ppp/>
541- <https://git.ozlabs.org/?p=ppp.git>
542- <https://github.com/paulusmack/ppp/>
1da177e4 543
1da177e4
LT
544NFS-utils
545---------
840f6690 546
383f3088
SP
547- <https://sourceforge.net/project/showfiles.php?group_id=14>
548- <https://nfs.sourceforge.net/>
1da177e4
LT
549
550Iptables
551--------
840f6690 552
599e6f8d 553- <https://netfilter.org/projects/iptables/index.html>
1da177e4
LT
554
555Ip-route2
556---------
840f6690
MCC
557
558- <https://www.kernel.org/pub/linux/utils/net/iproute2/>
1da177e4
LT
559
560OProfile
561--------
840f6690 562
383f3088 563- <https://oprofile.sf.net/download/>
81f10d19
MCC
564
565Kernel documentation
566********************
567
568Sphinx
569------
570
e7b4311e 571- <https://www.sphinx-doc.org/>