Re: Documentation - how to apply patches for various trees

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Thank you!  I agree that having a link off of kernel.org makes sense.

Richard

On 8/2/05, Jesper Juhl <[email protected]> wrote:
> Hi,
> 
> How to apply the -rc, -git, -mm and the 2.6.x.y (-stable) patches is a quite
> frequently asked question on LKML and elsewhere.
> Since so many people seem to be confused by this I gathered it ought to be
> properly documented once and for all so we  a) get more people testing those
> trees  and  b) get asked this question less often.
> So, I sat down and wrote such a document.
> 
> Below is a patch to add a new file "applying-patches.txt" to Documentation/
> This document describes each of the trees and gives examples on how to apply
> the various patches.
> 
> Looking forward to your feedback (and possible inclusion).
> 
> I guess this document could also be placed somewhere on kernel.org and linked
> to from the front page so that people downloading the various patches will
> have this information available at their fingertips.
> 
> 
> Signed-off-by: Jesper Juhl <[email protected]>
> ---
> 
>  Documentation/applying-patches.txt |  221 +++++++++++++++++++++++++++++++++++++
>  1 files changed, 221 insertions(+)
> 
> diff -uP linux-2.6.13-rc5-orig/Documentation/applying-patches.txt linux-2.6.13-rc5/Documentation/applying-patches.txt
> --- linux-2.6.13-rc5-orig/Documentation/applying-patches.txt    1970-01-01 01:00:00.000000000 +0100
> +++ linux-2.6.13-rc5/Documentation/applying-patches.txt 2005-08-02 23:17:13.000000000 +0200
> @@ -0,0 +1,221 @@
> +
> +       Applying Patches To The Linux Kernel
> +       ------------------------------------
> +
> +       (Written by Jesper Juhl, August 2005)
> +
> +
> +A frequently asked question on the Linux Kernel Mailing List is how to apply
> +a patch to the kernel or, more specifically, what base kernel a patch for
> +one of the many trees/branches should be applied to. Hopefully this document
> +will explain this to you.
> +
> +
> +What is a patch?
> +---
> + A patch is a small text document containing a delta of changes between two
> +different versions of a source tree. Patches are created with the `diff'
> +program.
> +To correctly apply a patch you need to know what base it was generated from
> +and what new version the patch will change the source tree into.
> +
> +
> +How do I apply a patch?
> +---
> + You apply a patch with the `patch' program. The patch program reads a diff
> +(or patch) file and makes the changes to the source tree described in it.
> +Patches for the Linux kernel are generated releative to the parent directory
> +holding the kernel source dir. This means that paths to files inside the
> +patch file contain the name of the kernel source dirs it was generated
> +against - since this is unlikely to match the name of the kernel source dir
> +on your local machine (but is often useful info to see what version an
> +otherwise unlabeled patch was generated against) you should change into your
> +kernel source directory and then strip the first element of the path from
> +filenames in the patch file when applying it (the -p1 argument to `patch'
> +does this). To revert a previously applied patch, use the -R argument to
> +patch.
> +
> +
> +Where can I download the patches?
> +---
> +The patches are available at http://kernel.org/
> +Most recent patches are linked from the front page, but they also have
> +specific homes.
> +The 2.6.x.y (-stable) and 2.6.x patches live at
> + ftp://ftp.kernel.org/pub/linux/kernel/v2.6/
> +The -rc patches live at
> + ftp://ftp.kernel.org/pub/linux/kernel/v2.6/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/
> +
> +
> +The 2.6.x kernels
> +---
> + These are the base stable releases released by Linus. The highest numbered
> +release is the most recent. If regressions or other serious flaws are found
> +then a -stable fix patch will be released (see below) on to of this base.
> +Once a new 2.6.x base kernel is released, a patch is made available that is
> +a delta between the previous 2.6.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
> +that such patches do *NOT* apply on top of 2.6.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
> +first revert the 2.6.x.y patch).
> +
> +# moving from 2.6.11 to 2.6.12
> +$ cd ~/linux-2.6.11                    # change to kernel source dir
> +$ patch -p1 < ../patch-2.6.12          # apply the 2.6.12 patch
> +$ cd ..
> +$ mv linux-2.6.11 linux-2.6.12         # rename source dir
> +
> +# moving from 2.6.11.1 to 2.6.12
> +$ 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
> +                                       # source dir is now 2.6.11
> +$ patch -p1 < ../patch-2.6.12          # apply new 2.6.12 patch
> +$ cd ..
> +$ mv linux-2.6.11.1 inux-2.6.12                # rename source dir
> +
> +
> +The 2.6.x.y kernels
> +---
> + Kernels with 4 digit versions are -stable kernels. They contain small(ish)
> +critical fixes for security problems or significant regressions discovered
> +in a given 2.6.x kernel. This is the recommended branch for users who want
> +the most recent stable kernel and are not interrested in helping test
> +development/experimental versions. If no 2.6.x.y kernel is available, then
> +the highest numbered 2.6.x kernel is the current stable kernel.
> +These patches are not incremental, meaning that for example the 2.6.12.3
> +patch does not apply on top of the 2.6.12.2 kernel source, but rather on top
> +of the base 2.6.12 kernel source.
> +So, in order to apply the 2.6.12.3 patch to your existing 2.6.12.2 kernel
> +source you have to first back out the 2.6.12.2 patch (so you are left with a
> +base 2.6.12 kernel source) and then apply the new 2.6.12.3 patch.
> +Here's a small example
> +
> +$ cd ~/linux-2.6.12.2                  # change into the kernel source dir
> +$ patch -p1 -R < ../patch-2.6.12.2     # revert the 2.6.12.2 patch
> +$ patch -p1 < ../patch-2.6.12.3                # apply the new 2.6.12.3 patch
> +$ cd ..
> +$ mv linux-2.6.12.2 linux-2.6.12.3     # rename the kernel source dir
> +
> +
> +The -rc kernels
> +---
> + These are ReleaseCandidate kernels. These are development kernels released
> +by Linus whenever he deems the current git (the kernels source management
> +tool) tree to be in a resonably sane state adequate for testing. These
> +kernels are not stable and you should expect occasional breakage if you
> +intend to run them. This is however the most stable of the main development
> +branches and is also what will eventually turn into the next stable kernel,
> +so it is important that it be tested by as many people as possible.
> +This is a good branch to run for people who want to help out testing
> +development kernel but do not want to run some of the really experimental
> +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
> +like the 2.6.x.y patches described above. The kernel version before the -rcN
> +suffix denotes the version of the kernel that this -rc kernel will eventually
> +turn into. So, 2.6.13-rc5 means that this is the fifth release candidate for
> +the 2.6.13 kernel and the patch should be applied on top of the 2.6.12
> +kernel source.
> +Here are 3 examples of how to apply these patches
> +
> +# first an example of moving from 2.6.12 to 2.6.13-rc3
> +$ cd ~/linux-2.6.12                    # change into 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-2.6.13-rc3                        # change into the 2.6.13-rc3 dir
> +$ 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 ..
> +$ mv linux-2.6.13-rc3 linux-2.6.13-rc5 # rename the source dir
> +
> +# finally let's try and move from 2.6.12.3 to 2.6.13-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
> +$ patch -p1 < ../patch-2.6.13-rc5      # apply new 2.6.13-rc5 patch
> +$ cd ..
> +$ mv linux-2.6.12.3 linux-2.6.13-rc5   # rename the kernel source dir
> +
> +
> +The -git kernels
> +---
> + These are daily snapshots of Linus' kernel tree (managed in a git
> +repository, hence the name).
> +These patches are usually released daily and represent the current state of
> +Linus' tree. They are more experimental than -rc kernels since they are
> +generated automatically and have not been looked over and deemed worthy of
> +-rc status yet. -git patches are not incremental and apply either to a base
> +2.6.x kernel or a base 2.6.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
> +named 2.6.13-rc3-git2 applies to the source of the 2.6.13-rc3 kernel.
> +Here are some examples of how to apply these patches
> +
> +# moving from 2.6.12 to 2.6.12-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 ..
> +$ mv linux-2.6.12 linux-2.6.12-git1    # rename the kernel source dir
> +
> +# moving from 2.6.12-git1 to 2.6.13-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
> +                                       # we now have a 2.6.12 kernel
> +$ patch -p1 < ../patch-2.6.13-rc2      # apply the 2.6.13-rc2 patch
> +                                       # the kernel is now 2.6.13-rc2
> +$ patch -p1 < ../patch-2.6.13-rc2-git3 # apply the 2.6.13-rc2-git3 patch
> +                                       # the kernel is now 2.6.13-rc2-git3
> +$ cd ..
> +$ mv linux-2.6.12-git1 linux-2.6.13-rc2-git3   # rename source dir
> +
> +
> +The -mm kernels
> +---
> + These are experimental kernels released by Andrew Morton. The -mm tree
> +serves as a sort of proving ground for new features and other experimental
> +patches. Once a patch has proved its worth in -mm for a while Andrew pushes
> +it on to Linus for inclusion in mainline. 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 experimental of the branches
> +described in this document. These kernels are not appropriate for use on
> +systems that are supposed to be stable and they a 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 even more so for -mm kernels). These kernels in
> +addition to all the other experimental patches they contain usually also
> +contain any changes in the mainline -git kernels available at the time of
> +release.
> +Testing of -mm kernels is greatly appreciated since the whole point of the
> +tree is to weed out regressions, crashes, data corruption bugs, build
> +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 and I
> +hope you are now crystal clear on how to apply the various patches and help
> +testing the kernel.
> 
> 
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to [email protected]
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
>
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]
  Powered by Linux