Lines Matching +full:in +full:- +full:kernel

3 Applying Patches To The Linux Kernel
11 This document is obsolete. In most cases, rather than using ``patch``
14 A frequently asked question on the Linux Kernel Mailing List is how to apply
15 a patch to the kernel or, more specifically, what base kernel a patch for
19 In addition to explaining how to apply and revert patches, a brief
20 description of the different kernel trees (and examples of how to apply
33 should both be present in the patch file metadata or be possible to deduce
41 (or patch) file and makes the changes to the source tree described in it.
43 Patches for the Linux kernel are generated relative to the parent directory
44 holding the kernel source dir.
47 kernel source directories it was generated against (or some other directory
50 Since this is unlikely to match the name of the kernel source dir on your
52 unlabeled patch was generated against) you should change into your kernel
54 in the patch file when applying it (the ``-p1`` argument to ``patch`` does
57 To revert a previously applied patch, use the -R argument to patch.
60 patch -p1 < ../patch-x.y.z
64 patch -R -p1 < ../patch-x.y.z
71 done in several different ways.
73 In all the examples below I feed the file (in uncompressed form) to patch
76 patch -p1 < path/to/patch-x.y.z
82 Patch can also get the name of the file to use via the -i argument, like
85 patch -p1 -i path/to/patch-x.y.z
91 xzcat path/to/patch-x.y.z.xz | patch -p1
92 bzcat path/to/patch-x.y.z.gz | patch -p1
95 (what I assume you've done in the examples below), then you simply run
96 gunzip or xz on the file -- like this::
98 gunzip patch-x.y.z.gz
99 xz -d patch-x.y.z.xz
101 Which will leave you with a plain text patch-x.y.z file that you can feed to
102 patch via stdin or the ``-i`` argument, as you prefer.
104 A few other nice arguments for patch are ``-s`` which causes patch to be silent
106 screen too fast, and ``--dry-run`` which causes patch to just print a listing of
107 what would happen, but doesn't actually make any changes. Finally ``--verbose``
115 file in different ways.
118 around the bits being modified matches the context provided in the patch are
128 a change in the middle of the file but for some reasons a few lines have
129 been added or removed near the beginning of the file. In that case
144 If you don't have any third-party patches applied to your kernel source, but
145 only patches from kernel.org and you apply the patches in the correct order,
149 patch file is corrupted in some way. In that case you should probably try
150 re-downloading the patch and if things are still not OK then you'd be advised
151 to start with a fresh tree downloaded in full from kernel.org.
156 find a file to be patched. Most likely you forgot to specify -p1 or you are
157 in the wrong directory. Less often, you'll find patches that need to be
158 applied with ``-p0`` instead of ``-p1`` (reading the patch file should reveal if
159 this is the case -- if so, then this is an error by the person who created
164 of the change (in this example it needed to move 7 lines from where it
171 different kernel version than the one you are trying to patch.
179 If you get ``Reversed (or previously applied) patch detected! Assume -R? [n]``
180 then patch detected that the change contained in the patch seems to have
183 If you actually did apply this patch previously and you just re-applied it
184 in error, then just say [n]o and abort this patch. If you applied this patch
185 previously and actually intended to revert it, but forgot to specify -R,
189 destination directories when creating the patch, and in that case reverting
190 the patch will in fact apply it.
192 A message similar to ``patch: **** unexpected end of file in patch`` or
193 ``patch unexpectedly ends in middle of line`` means that patch could make no
202 a patch from kernel.org to the correct version of an unmodified source tree.
203 So if you get these errors with kernel.org patches then you should probably
205 to start over with a fresh download of a full kernel tree and the patch you
219 This will let you move from something like 5.7.2 to 5.7.3 in a single
220 step. The -z flag to interdiff will even let you feed it patches in gzip or
224 Here's how you'd go from 5.7.2 to 5.7.3 in a single step::
226 interdiff -z ../patch-5.7.2.gz ../patch-5.7.3.gz | patch -p1
229 do the additional steps since interdiff can get things wrong in some cases.
235 patch; lsdiff, which displays a short listing of affected files in a patch
244 The patches are available at https://kernel.org/
248 The 5.x.y (-stable) and 5.x patches live at
250 https://www.kernel.org/pub/linux/kernel/v5.x/
254 https://www.kernel.org/pub/linux/kernel/v5.x/incr/
256 The -rc patches are not stored on the webserver but are generated on
259 https://git.kernel.org/torvalds/p/v5.1-rc1/v5.0
261 The stable -rc patches live at
263 https://www.kernel.org/pub/linux/kernel/v5.x/stable-review/
272 If regressions or other serious flaws are found, then a -stable fix patch
274 kernel is released, a patch is made available that is a delta between the
275 previous 5.x kernel and the new one.
279 base 5.x kernel -- if you need to move from 5.x.y to 5.x+1 you need to
286 $ cd ~/linux-5.6 # change to kernel source dir
287 $ patch -p1 < ../patch-5.7 # apply the 5.7 patch
289 $ mv linux-5.6 linux-5.7 # rename source dir
293 $ cd ~/linux-5.6.1 # change to kernel source dir
294 $ patch -p1 -R < ../patch-5.6.1 # revert the 5.6.1 patch
296 $ patch -p1 < ../patch-5.7 # apply new 5.7 patch
298 $ mv linux-5.6.1 linux-5.7 # rename source dir
304 Kernels with 3-digit versions are -stable kernels. They contain small(ish)
306 in a given 5.x kernel.
309 kernel and are not interested in helping test development/experimental
312 If no 5.x.y kernel is available, then the highest numbered 5.x kernel is
313 the current stable kernel.
315 The -stable team provides normal as well as incremental patches. Below is
322 patch does not apply on top of the 5.7.2 kernel source, but rather on top
323 of the base 5.7 kernel source.
325 So, in order to apply the 5.7.3 patch to your existing 5.7.2 kernel
327 base 5.7 kernel source) and then apply the new 5.7.3 patch.
331 $ cd ~/linux-5.7.2 # change to the kernel source dir
332 $ patch -p1 -R < ../patch-5.7.2 # revert the 5.7.2 patch
333 $ patch -p1 < ../patch-5.7.3 # apply the new 5.7.3 patch
335 $ mv linux-5.7.2 linux-5.7.3 # rename the kernel source dir
341 of base 5.x kernel, they are applied on top of previous stable kernel
342 (5.x.y-1).
346 $ cd ~/linux-5.7.2 # change to the kernel source dir
347 $ patch -p1 < ../patch-5.7.2-3 # apply the new 5.7.3 patch
349 $ mv linux-5.7.2 linux-5.7.3 # rename the kernel source dir
352 The -rc kernels
355 These are release-candidate kernels. These are development kernels released
356 by Linus whenever he deems the current git (the kernel's source management
357 tool) tree to be in a reasonably sane state adequate for testing.
362 stable kernel, so it is important that it be tested by as many people as
367 stuff (such people should see the sections about -next and -mm kernels below).
369 The -rc patches are not incremental, they apply to a base 5.x kernel, just
370 like the 5.x.y patches described above. The kernel version before the -rcN
371 suffix denotes the version of the kernel that this -rc kernel will eventually
374 So, 5.8-rc5 means that this is the fifth release candidate for the 5.8
375 kernel and the patch should be applied on top of the 5.7 kernel source.
379 # first an example of moving from 5.7 to 5.8-rc3
381 $ cd ~/linux-5.7 # change to the 5.7 source dir
382 $ patch -p1 < ../patch-5.8-rc3 # apply the 5.8-rc3 patch
384 $ mv linux-5.7 linux-5.8-rc3 # rename the source dir
386 # now let's move from 5.8-rc3 to 5.8-rc5
388 $ cd ~/linux-5.8-rc3 # change to the 5.8-rc3 dir
389 $ patch -p1 -R < ../patch-5.8-rc3 # revert the 5.8-rc3 patch
390 $ patch -p1 < ../patch-5.8-rc5 # apply the new 5.8-rc5 patch
392 $ mv linux-5.8-rc3 linux-5.8-rc5 # rename the source dir
394 # finally let's try and move from 5.7.3 to 5.8-rc5
396 $ cd ~/linux-5.7.3 # change to the kernel source dir
397 $ patch -p1 -R < ../patch-5.7.3 # revert the 5.7.3 patch
398 $ patch -p1 < ../patch-5.8-rc5 # apply new 5.8-rc5 patch
400 $ mv linux-5.7.3 linux-5.8-rc5 # rename the kernel source dir
403 The -mm patches and the linux-next tree
406 The -mm patches are experimental patches released by Andrew Morton.
408 In the past, -mm tree were used to also test subsystem patches, but this
410 `linux-next` (https://www.kernel.org/doc/man-pages/linux-next.html)
411 tree. The Subsystem maintainers push their patches first to linux-next,
414 The -mm patches serve as a sort of proving ground for new features and other
416 Once such patches has proved its worth in -mm for a while Andrew pushes
417 it on to Linus for inclusion in mainline.
419 The linux-next tree is daily updated, and includes the -mm patches.
420 Both are in constant flux and contains many experimental features, a
422 experimental of the branches described in this document.
426 sure you have up-to-date backups -- that goes for any experimental kernel but
427 even more so for -mm patches or using a Kernel from the linux-next tree).
429 Testing of -mm patches and linux-next is greatly appreciated since the whole
431 build breakage (and any other bug in general) before changes are merged into
434 But testers of -mm and linux-next should be aware that breakages are
435 more common than in any other tree.
438 This concludes this list of explanations of the various kernel trees.
440 the kernel.