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