Documentation/applying-patches.txt: Update the information there

This document is old: it is from Kernel v2.6.12 days.
Update it to the current status, and add a reference for the
linux-next tree.

Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Signed-off-by: Jonathan Corbet <corbet@lwn.net>
This commit is contained in:
Mauro Carvalho Chehab 2016-09-19 08:07:41 -03:00 committed by Jonathan Corbet
parent 9299c3e92c
commit 330ae7e99d
1 changed files with 111 additions and 146 deletions

View File

@ -6,7 +6,7 @@ Original by:
Jesper Juhl, August 2005 Jesper Juhl, August 2005
Last update: Last update:
2006-01-05 2016-09-14
A frequently asked question on the Linux Kernel Mailing List is how to apply A frequently asked question on the Linux Kernel Mailing List is how to apply
@ -90,23 +90,23 @@ this:
patch -p1 -i path/to/patch-x.y.z patch -p1 -i path/to/patch-x.y.z
If your patch file is compressed with gzip or bzip2 and you don't want to If your patch file is compressed with gzip or xz and you don't want to
uncompress it before applying it, then you can feed it to patch like this uncompress it before applying it, then you can feed it to patch like this
instead: instead:
:: ::
zcat path/to/patch-x.y.z.gz | patch -p1 xzcat path/to/patch-x.y.z.xz | patch -p1
bzcat path/to/patch-x.y.z.bz2 | patch -p1 bzcat path/to/patch-x.y.z.gz | patch -p1
If you wish to uncompress the patch file by hand first before applying it If you wish to uncompress the patch file by hand first before applying it
(what I assume you've done in the examples below), then you simply run (what I assume you've done in the examples below), then you simply run
gunzip or bunzip2 on the file -- like this: gunzip or xz on the file -- like this:
:: ::
gunzip patch-x.y.z.gz gunzip patch-x.y.z.gz
bunzip2 patch-x.y.z.bz2 xz -d patch-x.y.z.xz
Which will leave you with a plain text patch-x.y.z file that you can feed to Which will leave you with a plain text patch-x.y.z file that you can feed to
patch via stdin or the ``-i`` argument, as you prefer. patch via stdin or the ``-i`` argument, as you prefer.
@ -226,16 +226,16 @@ You can use the ``interdiff`` program (http://cyberelk.net/tim/patchutils/) to
generate a patch representing the differences between two patches and then generate a patch representing the differences between two patches and then
apply the result. apply the result.
This will let you move from something like 2.6.12.2 to 2.6.12.3 in a single This will let you move from something like 4.7.2 to 4.7.3 in a single
step. The -z flag to interdiff will even let you feed it patches in gzip or step. The -z flag to interdiff will even let you feed it patches in gzip or
bzip2 compressed form directly without the use of zcat or bzcat or manual bzip2 compressed form directly without the use of zcat or bzcat or manual
decompression. decompression.
Here's how you'd go from 2.6.12.2 to 2.6.12.3 in a single step: Here's how you'd go from 4.7.2 to 4.7.3 in a single step:
:: ::
interdiff -z ../patch-2.6.12.2.bz2 ../patch-2.6.12.3.gz | patch -p1 interdiff -z ../patch-4.7.2.gz ../patch-4.7.3.gz | patch -p1
Although interdiff may save you a step or two you are generally advised to Although interdiff may save you a step or two you are generally advised to
do the additional steps since interdiff can get things wrong in some cases. do the additional steps since interdiff can get things wrong in some cases.
@ -257,21 +257,13 @@ The patches are available at http://kernel.org/
Most recent patches are linked from the front page, but they also have Most recent patches are linked from the front page, but they also have
specific homes. specific homes.
The 2.6.x.y (-stable) and 2.6.x patches live at The 4.x.y (-stable) and 4.x patches live at
ftp://ftp.kernel.org/pub/linux/kernel/v2.6/ ftp://ftp.kernel.org/pub/linux/kernel/v4.x/
The -rc patches live at The -rc patches live at
ftp://ftp.kernel.org/pub/linux/kernel/v2.6/testing/ ftp://ftp.kernel.org/pub/linux/kernel/v4.x/testing/
The -git patches live at
ftp://ftp.kernel.org/pub/linux/kernel/v2.6/snapshots/
The -mm kernels live at
ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/
In place of ``ftp.kernel.org`` you can use ``ftp.cc.kernel.org``, where cc is a In place of ``ftp.kernel.org`` you can use ``ftp.cc.kernel.org``, where cc is a
country code. This way you'll be downloading from a mirror site that's most country code. This way you'll be downloading from a mirror site that's most
@ -280,53 +272,55 @@ less bandwidth used globally and less load on the main kernel.org servers --
these are good things, so do use mirrors when possible. these are good things, so do use mirrors when possible.
The 2.6.x kernels The 4.x kernels
================= ===============
These are the base stable releases released by Linus. The highest numbered These are the base stable releases released by Linus. The highest numbered
release is the most recent. release is the most recent.
If regressions or other serious flaws are found, then a -stable fix patch If regressions or other serious flaws are found, then a -stable fix patch
will be released (see below) on top of this base. Once a new 2.6.x base will be released (see below) on top of this base. Once a new 4.x base
kernel is released, a patch is made available that is a delta between the kernel is released, a patch is made available that is a delta between the
previous 2.6.x kernel and the new one. previous 4.x kernel and the new one.
To apply a patch moving from 2.6.11 to 2.6.12, you'd do the following (note To apply a patch moving from 4.6 to 4.7, you'd do the following (note
that such patches do **NOT** apply on top of 2.6.x.y kernels but on top of the that such patches do **NOT** apply on top of 4.x.y kernels but on top of the
base 2.6.x kernel -- if you need to move from 2.6.x.y to 2.6.x+1 you need to base 4.x kernel -- if you need to move from 4.x.y to 4.x+1 you need to
first revert the 2.6.x.y patch). first revert the 4.x.y patch).
Here are some examples: Here are some examples:
:: ::
# moving from 2.6.11 to 2.6.12 # moving from 4.6 to 4.7
$ cd ~/linux-2.6.11 # change to kernel source dir
$ patch -p1 < ../patch-2.6.12 # apply the 2.6.12 patch $ cd ~/linux-4.6 # change to kernel source dir
$ patch -p1 < ../patch-4.7 # apply the 4.7 patch
$ cd .. $ cd ..
$ mv linux-2.6.11 linux-2.6.12 # rename source dir $ mv linux-4.6 linux-4.7 # rename source dir
# moving from 2.6.11.1 to 2.6.12 # moving from 4.6.1 to 4.7
$ cd ~/linux-2.6.11.1 # change to kernel source dir
$ patch -p1 -R < ../patch-2.6.11.1 # revert the 2.6.11.1 patch $ cd ~/linux-4.6.1 # change to kernel source dir
# source dir is now 2.6.11 $ patch -p1 -R < ../patch-4.6.1 # revert the 4.6.1 patch
$ patch -p1 < ../patch-2.6.12 # apply new 2.6.12 patch # source dir is now 4.6
$ patch -p1 < ../patch-4.7 # apply new 4.7 patch
$ cd .. $ cd ..
$ mv linux-2.6.11.1 linux-2.6.12 # rename source dir $ mv linux-4.6.1 linux-4.7 # rename source dir
The 2.6.x.y kernels The 4.x.y kernels
=================== =================
Kernels with 4-digit versions are -stable kernels. They contain small(ish) Kernels with 3-digit versions are -stable kernels. They contain small(ish)
critical fixes for security problems or significant regressions discovered critical fixes for security problems or significant regressions discovered
in a given 2.6.x kernel. in a given 4.x kernel.
This is the recommended branch for users who want the most recent stable This is the recommended branch for users who want the most recent stable
kernel and are not interested in helping test development/experimental kernel and are not interested in helping test development/experimental
versions. versions.
If no 2.6.x.y kernel is available, then the highest numbered 2.6.x kernel is If no 4.x.y kernel is available, then the highest numbered 4.x kernel is
the current stable kernel. the current stable kernel.
.. note:: .. note::
@ -334,25 +328,25 @@ the current stable kernel.
The -stable team usually do make incremental patches available as well The -stable team usually do make incremental patches available as well
as patches against the latest mainline release, but I only cover the as patches against the latest mainline release, but I only cover the
non-incremental ones below. The incremental ones can be found at non-incremental ones below. The incremental ones can be found at
ftp://ftp.kernel.org/pub/linux/kernel/v2.6/incr/ ftp://ftp.kernel.org/pub/linux/kernel/v4.x/incr/
These patches are not incremental, meaning that for example the 2.6.12.3 These patches are not incremental, meaning that for example the 4.7.3
patch does not apply on top of the 2.6.12.2 kernel source, but rather on top patch does not apply on top of the 4.7.2 kernel source, but rather on top
of the base 2.6.12 kernel source. of the base 4.7 kernel source.
So, in order to apply the 2.6.12.3 patch to your existing 2.6.12.2 kernel So, in order to apply the 4.7.3 patch to your existing 4.7.2 kernel
source you have to first back out the 2.6.12.2 patch (so you are left with a source you have to first back out the 4.7.2 patch (so you are left with a
base 2.6.12 kernel source) and then apply the new 2.6.12.3 patch. base 4.7 kernel source) and then apply the new 4.7.3 patch.
Here's a small example: Here's a small example:
:: ::
$ cd ~/linux-2.6.12.2 # change to the kernel source dir $ cd ~/linux-4.7.2 # change to the kernel source dir
$ patch -p1 -R < ../patch-2.6.12.2 # revert the 2.6.12.2 patch $ patch -p1 -R < ../patch-4.7.2 # revert the 4.7.2 patch
$ patch -p1 < ../patch-2.6.12.3 # apply the new 2.6.12.3 patch $ patch -p1 < ../patch-4.7.3 # apply the new 4.7.3 patch
$ cd .. $ cd ..
$ mv linux-2.6.12.2 linux-2.6.12.3 # rename the kernel source dir $ mv linux-4.7.2 linux-4.7.3 # rename the kernel source dir
The -rc kernels The -rc kernels
=============== ===============
@ -371,37 +365,40 @@ This is a good branch to run for people who want to help out testing
development kernels but do not want to run some of the really experimental development kernels but do not want to run some of the really experimental
stuff (such people should see the sections about -git and -mm kernels below). stuff (such people should see the sections about -git and -mm kernels below).
The -rc patches are not incremental, they apply to a base 2.6.x kernel, just The -rc patches are not incremental, they apply to a base 4.x kernel, just
like the 2.6.x.y patches described above. The kernel version before the -rcN like the 4.x.y patches described above. The kernel version before the -rcN
suffix denotes the version of the kernel that this -rc kernel will eventually suffix denotes the version of the kernel that this -rc kernel will eventually
turn into. turn into.
So, 2.6.13-rc5 means that this is the fifth release candidate for the 2.6.13 So, 4.8-rc5 means that this is the fifth release candidate for the 4.8
kernel and the patch should be applied on top of the 2.6.12 kernel source. kernel and the patch should be applied on top of the 4.7 kernel source.
Here are 3 examples of how to apply these patches: Here are 3 examples of how to apply these patches:
:: ::
# first an example of moving from 2.6.12 to 2.6.13-rc3 # first an example of moving from 4.7 to 4.8-rc3
$ cd ~/linux-2.6.12 # change to the 2.6.12 source dir
$ patch -p1 < ../patch-2.6.13-rc3 # apply the 2.6.13-rc3 patch
$ cd ..
$ mv linux-2.6.12 linux-2.6.13-rc3 # rename the source dir
# now let's move from 2.6.13-rc3 to 2.6.13-rc5 $ cd ~/linux-4.7 # change to the 4.7 source dir
$ cd ~/linux-2.6.13-rc3 # change to the 2.6.13-rc3 dir $ patch -p1 < ../patch-4.8-rc3 # apply the 4.8-rc3 patch
$ patch -p1 -R < ../patch-2.6.13-rc3 # revert the 2.6.13-rc3 patch
$ patch -p1 < ../patch-2.6.13-rc5 # apply the new 2.6.13-rc5 patch
$ cd .. $ cd ..
$ mv linux-2.6.13-rc3 linux-2.6.13-rc5 # rename the source dir $ mv linux-4.7 linux-4.8-rc3 # rename the source dir
# finally let's try and move from 2.6.12.3 to 2.6.13-rc5 # now let's move from 4.8-rc3 to 4.8-rc5
$ cd ~/linux-2.6.12.3 # change to the kernel source dir
$ patch -p1 -R < ../patch-2.6.12.3 # revert the 2.6.12.3 patch $ cd ~/linux-4.8-rc3 # change to the 4.8-rc3 dir
$ patch -p1 < ../patch-2.6.13-rc5 # apply new 2.6.13-rc5 patch $ patch -p1 -R < ../patch-4.8-rc3 # revert the 4.8-rc3 patch
$ patch -p1 < ../patch-4.8-rc5 # apply the new 4.8-rc5 patch
$ cd .. $ cd ..
$ mv linux-2.6.12.3 linux-2.6.13-rc5 # rename the kernel source dir $ mv linux-4.8-rc3 linux-4.8-rc5 # rename the source dir
# finally let's try and move from 4.7.3 to 4.8-rc5
$ cd ~/linux-4.7.3 # change to the kernel source dir
$ patch -p1 -R < ../patch-4.7.3 # revert the 4.7.3 patch
$ patch -p1 < ../patch-4.8-rc5 # apply new 4.8-rc5 patch
$ cd ..
$ mv linux-4.7.3 linux-4.8-rc5 # rename the kernel source dir
The -git kernels The -git kernels
@ -415,100 +412,68 @@ Linus's tree. They are more experimental than -rc kernels since they are
generated automatically without even a cursory glance to see if they are generated automatically without even a cursory glance to see if they are
sane. sane.
-git patches are not incremental and apply either to a base 2.6.x kernel or -git patches are not incremental and apply either to a base 4.x kernel or
a base 2.6.x-rc kernel -- you can see which from their name. a base 4.x-rc kernel -- you can see which from their name.
A patch named 2.6.12-git1 applies to the 2.6.12 kernel source and a patch A patch named 4.7-git1 applies to the 4.7 kernel source and a patch
named 2.6.13-rc3-git2 applies to the source of the 2.6.13-rc3 kernel. named 4.8-rc3-git2 applies to the source of the 4.8-rc3 kernel.
Here are some examples of how to apply these patches: Here are some examples of how to apply these patches:
:: ::
# moving from 2.6.12 to 2.6.12-git1 # moving from 4.7 to 4.7-git1
$ cd ~/linux-2.6.12 # change to the kernel source dir
$ patch -p1 < ../patch-2.6.12-git1 # apply the 2.6.12-git1 patch $ cd ~/linux-4.7 # change to the kernel source dir
$ patch -p1 < ../patch-4.7-git1 # apply the 4.7-git1 patch
$ cd .. $ cd ..
$ mv linux-2.6.12 linux-2.6.12-git1 # rename the kernel source dir $ mv linux-4.7 linux-4.7-git1 # rename the kernel source dir
# moving from 2.6.12-git1 to 2.6.13-rc2-git3 # moving from 4.7-git1 to 4.8-rc2-git3
$ cd ~/linux-2.6.12-git1 # change to the kernel source dir
$ patch -p1 -R < ../patch-2.6.12-git1 # revert the 2.6.12-git1 patch $ cd ~/linux-4.7-git1 # change to the kernel source dir
# we now have a 2.6.12 kernel $ patch -p1 -R < ../patch-4.7-git1 # revert the 4.7-git1 patch
$ patch -p1 < ../patch-2.6.13-rc2 # apply the 2.6.13-rc2 patch # we now have a 4.7 kernel
# the kernel is now 2.6.13-rc2 $ patch -p1 < ../patch-4.8-rc2 # apply the 4.8-rc2 patch
$ patch -p1 < ../patch-2.6.13-rc2-git3 # apply the 2.6.13-rc2-git3 patch # the kernel is now 4.8-rc2
# the kernel is now 2.6.13-rc2-git3 $ patch -p1 < ../patch-4.8-rc2-git3 # apply the 4.8-rc2-git3 patch
# the kernel is now 4.8-rc2-git3
$ cd .. $ cd ..
$ mv linux-2.6.12-git1 linux-2.6.13-rc2-git3 # rename source dir $ mv linux-4.7-git1 linux-4.8-rc2-git3 # rename source dir
The -mm kernels The -mm patches and the linux-next tree
=============== =======================================
These are experimental kernels released by Andrew Morton. The -mm patches are experimental patches released by Andrew Morton.
The -mm tree serves as a sort of proving ground for new features and other In the past, -mm tree were used to also test subsystem patches, but this
experimental patches. function is now done via the
:ref:`linux-next <https://www.kernel.org/doc/man-pages/linux-next.html>`
tree. The Subsystem maintainers push their patches first to linux-next,
and, during the merge window, sends them directly to Linus.
Once a patch has proved its worth in -mm for a while Andrew pushes it on to The -mm patches serve as a sort of proving ground for new features and other
Linus for inclusion in mainline. experimental patches that aren't merged via a subsystem tree.
Once such patches has proved its worth in -mm for a while Andrew pushes
it on to Linus for inclusion in mainline.
Although it's encouraged that patches flow to Linus via the -mm tree, this The linux-next tree is daily updated, and includes the -mm patches.
is not always enforced. Both are in constant flux and contains many experimental features, a
Subsystem maintainers (or individuals) sometimes push their patches directly
to Linus, even though (or after) they have been merged and tested in -mm (or
sometimes even without prior testing in -mm).
You should generally strive to get your patches into mainline via -mm to
ensure maximum testing.
This branch is in constant flux and contains many experimental features, a
lot of debugging patches not appropriate for mainline etc., and is the most lot of debugging patches not appropriate for mainline etc., and is the most
experimental of the branches described in this document. experimental of the branches described in this document.
These kernels are not appropriate for use on systems that are supposed to be These patches are not appropriate for use on systems that are supposed to be
stable and they are more risky to run than any of the other branches (make stable and they are more risky to run than any of the other branches (make
sure you have up-to-date backups -- that goes for any experimental kernel but sure you have up-to-date backups -- that goes for any experimental kernel but
even more so for -mm kernels). even more so for -mm patches or using a Kernel from the linux-next tree).
These kernels in addition to all the other experimental patches they contain Testing of -mm patches and linux-next is greatly appreciated since the whole
usually also contain any changes in the mainline -git kernels available at point of those are to weed out regressions, crashes, data corruption bugs,
the time of release. build breakage (and any other bug in general) before changes are merged into
the more stable mainline Linus tree.
Testing of -mm kernels is greatly appreciated since the whole point of the But testers of -mm and linux-next should be aware that breakages are
tree is to weed out regressions, crashes, data corruption bugs, build more common than in any other tree.
breakage (and any other bug in general) before changes are merged into the
more stable mainline Linus tree.
But testers of -mm should be aware that breakage in this tree is more common
than in any other tree.
The -mm kernels are not released on a fixed schedule, but usually a few -mm
kernels are released in between each -rc kernel (1 to 3 is common).
The -mm kernels apply to either a base 2.6.x kernel (when no -rc kernels
have been released yet) or to a Linus -rc kernel.
Here are some examples of applying the -mm patches:
::
# moving from 2.6.12 to 2.6.12-mm1
$ cd ~/linux-2.6.12 # change to the 2.6.12 source dir
$ patch -p1 < ../2.6.12-mm1 # apply the 2.6.12-mm1 patch
$ cd ..
$ mv linux-2.6.12 linux-2.6.12-mm1 # rename the source appropriately
# moving from 2.6.12-mm1 to 2.6.13-rc3-mm3
$ cd ~/linux-2.6.12-mm1
$ patch -p1 -R < ../2.6.12-mm1 # revert the 2.6.12-mm1 patch
# we now have a 2.6.12 source
$ patch -p1 < ../patch-2.6.13-rc3 # apply the 2.6.13-rc3 patch
# we now have a 2.6.13-rc3 source
$ patch -p1 < ../2.6.13-rc3-mm3 # apply the 2.6.13-rc3-mm3 patch
$ cd ..
$ mv linux-2.6.12-mm1 linux-2.6.13-rc3-mm3 # rename the source dir
This concludes this list of explanations of the various kernel trees. This concludes this list of explanations of the various kernel trees.