summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <mchehab@s-opensource.com>2016-09-19 07:07:41 -0400
committerJonathan Corbet <corbet@lwn.net>2016-09-20 20:34:57 -0400
commit330ae7e99d44c7a591c0a15353b12d5b83d97f70 (patch)
tree707e9b14add9d2f184c36a32ca79083ce1782c2a
parent9299c3e92c30a25350b4c270a4173ab24944fa0d (diff)
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>
-rw-r--r--Documentation/applying-patches.txt255
1 files changed, 110 insertions, 145 deletions
diff --git a/Documentation/applying-patches.txt b/Documentation/applying-patches.txt
index 573eb3bee19e..0e873dbf5566 100644
--- a/Documentation/applying-patches.txt
+++ b/Documentation/applying-patches.txt
@@ -6,7 +6,7 @@ Original by:
6 Jesper Juhl, August 2005 6 Jesper Juhl, August 2005
7 7
8Last update: 8Last update:
9 2006-01-05 9 2016-09-14
10 10
11 11
12A frequently asked question on the Linux Kernel Mailing List is how to apply 12A frequently asked question on the Linux Kernel Mailing List is how to apply
@@ -90,23 +90,23 @@ this:
90 90
91 patch -p1 -i path/to/patch-x.y.z 91 patch -p1 -i path/to/patch-x.y.z
92 92
93If your patch file is compressed with gzip or bzip2 and you don't want to 93If your patch file is compressed with gzip or xz and you don't want to
94uncompress it before applying it, then you can feed it to patch like this 94uncompress it before applying it, then you can feed it to patch like this
95instead: 95instead:
96 96
97:: 97::
98 98
99 zcat path/to/patch-x.y.z.gz | patch -p1 99 xzcat path/to/patch-x.y.z.xz | patch -p1
100 bzcat path/to/patch-x.y.z.bz2 | patch -p1 100 bzcat path/to/patch-x.y.z.gz | patch -p1
101 101
102If you wish to uncompress the patch file by hand first before applying it 102If you wish to uncompress the patch file by hand first before applying it
103(what I assume you've done in the examples below), then you simply run 103(what I assume you've done in the examples below), then you simply run
104gunzip or bunzip2 on the file -- like this: 104gunzip or xz on the file -- like this:
105 105
106:: 106::
107 107
108 gunzip patch-x.y.z.gz 108 gunzip patch-x.y.z.gz
109 bunzip2 patch-x.y.z.bz2 109 xz -d patch-x.y.z.xz
110 110
111Which will leave you with a plain text patch-x.y.z file that you can feed to 111Which will leave you with a plain text patch-x.y.z file that you can feed to
112patch via stdin or the ``-i`` argument, as you prefer. 112patch 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
226generate a patch representing the differences between two patches and then 226generate a patch representing the differences between two patches and then
227apply the result. 227apply the result.
228 228
229This will let you move from something like 2.6.12.2 to 2.6.12.3 in a single 229This will let you move from something like 4.7.2 to 4.7.3 in a single
230step. The -z flag to interdiff will even let you feed it patches in gzip or 230step. The -z flag to interdiff will even let you feed it patches in gzip or
231bzip2 compressed form directly without the use of zcat or bzcat or manual 231bzip2 compressed form directly without the use of zcat or bzcat or manual
232decompression. 232decompression.
233 233
234Here's how you'd go from 2.6.12.2 to 2.6.12.3 in a single step: 234Here's how you'd go from 4.7.2 to 4.7.3 in a single step:
235 235
236:: 236::
237 237
238 interdiff -z ../patch-2.6.12.2.bz2 ../patch-2.6.12.3.gz | patch -p1 238 interdiff -z ../patch-4.7.2.gz ../patch-4.7.3.gz | patch -p1
239 239
240Although interdiff may save you a step or two you are generally advised to 240Although interdiff may save you a step or two you are generally advised to
241do the additional steps since interdiff can get things wrong in some cases. 241do the additional steps since interdiff can get things wrong in some cases.
@@ -257,21 +257,13 @@ The patches are available at http://kernel.org/
257Most recent patches are linked from the front page, but they also have 257Most recent patches are linked from the front page, but they also have
258specific homes. 258specific homes.
259 259
260The 2.6.x.y (-stable) and 2.6.x patches live at 260The 4.x.y (-stable) and 4.x patches live at
261 261
262 ftp://ftp.kernel.org/pub/linux/kernel/v2.6/ 262 ftp://ftp.kernel.org/pub/linux/kernel/v4.x/
263 263
264The -rc patches live at 264The -rc patches live at
265 265
266 ftp://ftp.kernel.org/pub/linux/kernel/v2.6/testing/ 266 ftp://ftp.kernel.org/pub/linux/kernel/v4.x/testing/
267
268The -git patches live at
269
270 ftp://ftp.kernel.org/pub/linux/kernel/v2.6/snapshots/
271
272The -mm kernels live at
273
274 ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/
275 267
276In place of ``ftp.kernel.org`` you can use ``ftp.cc.kernel.org``, where cc is a 268In place of ``ftp.kernel.org`` you can use ``ftp.cc.kernel.org``, where cc is a
277country code. This way you'll be downloading from a mirror site that's most 269country 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 --
280these are good things, so do use mirrors when possible. 272these are good things, so do use mirrors when possible.
281 273
282 274
283The 2.6.x kernels 275The 4.x kernels
284================= 276===============
285 277
286These are the base stable releases released by Linus. The highest numbered 278These are the base stable releases released by Linus. The highest numbered
287release is the most recent. 279release is the most recent.
288 280
289If regressions or other serious flaws are found, then a -stable fix patch 281If regressions or other serious flaws are found, then a -stable fix patch
290will be released (see below) on top of this base. Once a new 2.6.x base 282will be released (see below) on top of this base. Once a new 4.x base
291kernel is released, a patch is made available that is a delta between the 283kernel is released, a patch is made available that is a delta between the
292previous 2.6.x kernel and the new one. 284previous 4.x kernel and the new one.
293 285
294To apply a patch moving from 2.6.11 to 2.6.12, you'd do the following (note 286To apply a patch moving from 4.6 to 4.7, you'd do the following (note
295that such patches do **NOT** apply on top of 2.6.x.y kernels but on top of the 287that such patches do **NOT** apply on top of 4.x.y kernels but on top of the
296base 2.6.x kernel -- if you need to move from 2.6.x.y to 2.6.x+1 you need to 288base 4.x kernel -- if you need to move from 4.x.y to 4.x+1 you need to
297first revert the 2.6.x.y patch). 289first revert the 4.x.y patch).
298 290
299Here are some examples: 291Here are some examples:
300 292
301:: 293::
302 294
303 # moving from 2.6.11 to 2.6.12 295 # moving from 4.6 to 4.7
304 $ cd ~/linux-2.6.11 # change to kernel source dir 296
305 $ patch -p1 < ../patch-2.6.12 # apply the 2.6.12 patch 297 $ cd ~/linux-4.6 # change to kernel source dir
298 $ patch -p1 < ../patch-4.7 # apply the 4.7 patch
306 $ cd .. 299 $ cd ..
307 $ mv linux-2.6.11 linux-2.6.12 # rename source dir 300 $ mv linux-4.6 linux-4.7 # rename source dir
308 301
309 # moving from 2.6.11.1 to 2.6.12 302 # moving from 4.6.1 to 4.7
310 $ cd ~/linux-2.6.11.1 # change to kernel source dir 303
311 $ patch -p1 -R < ../patch-2.6.11.1 # revert the 2.6.11.1 patch 304 $ cd ~/linux-4.6.1 # change to kernel source dir
312 # source dir is now 2.6.11 305 $ patch -p1 -R < ../patch-4.6.1 # revert the 4.6.1 patch
313 $ patch -p1 < ../patch-2.6.12 # apply new 2.6.12 patch 306 # source dir is now 4.6
307 $ patch -p1 < ../patch-4.7 # apply new 4.7 patch
314 $ cd .. 308 $ cd ..
315 $ mv linux-2.6.11.1 linux-2.6.12 # rename source dir 309 $ mv linux-4.6.1 linux-4.7 # rename source dir
316 310
317 311
318The 2.6.x.y kernels 312The 4.x.y kernels
319=================== 313=================
320 314
321Kernels with 4-digit versions are -stable kernels. They contain small(ish) 315Kernels with 3-digit versions are -stable kernels. They contain small(ish)
322critical fixes for security problems or significant regressions discovered 316critical fixes for security problems or significant regressions discovered
323in a given 2.6.x kernel. 317in a given 4.x kernel.
324 318
325This is the recommended branch for users who want the most recent stable 319This is the recommended branch for users who want the most recent stable
326kernel and are not interested in helping test development/experimental 320kernel and are not interested in helping test development/experimental
327versions. 321versions.
328 322
329If no 2.6.x.y kernel is available, then the highest numbered 2.6.x kernel is 323If no 4.x.y kernel is available, then the highest numbered 4.x kernel is
330the current stable kernel. 324the current stable kernel.
331 325
332.. note:: 326.. note::
@@ -334,25 +328,25 @@ the current stable kernel.
334 The -stable team usually do make incremental patches available as well 328 The -stable team usually do make incremental patches available as well
335 as patches against the latest mainline release, but I only cover the 329 as patches against the latest mainline release, but I only cover the
336 non-incremental ones below. The incremental ones can be found at 330 non-incremental ones below. The incremental ones can be found at
337 ftp://ftp.kernel.org/pub/linux/kernel/v2.6/incr/ 331 ftp://ftp.kernel.org/pub/linux/kernel/v4.x/incr/
338 332
339These patches are not incremental, meaning that for example the 2.6.12.3 333These patches are not incremental, meaning that for example the 4.7.3
340patch does not apply on top of the 2.6.12.2 kernel source, but rather on top 334patch does not apply on top of the 4.7.2 kernel source, but rather on top
341of the base 2.6.12 kernel source. 335of the base 4.7 kernel source.
342 336
343So, in order to apply the 2.6.12.3 patch to your existing 2.6.12.2 kernel 337So, in order to apply the 4.7.3 patch to your existing 4.7.2 kernel
344source you have to first back out the 2.6.12.2 patch (so you are left with a 338source you have to first back out the 4.7.2 patch (so you are left with a
345base 2.6.12 kernel source) and then apply the new 2.6.12.3 patch. 339base 4.7 kernel source) and then apply the new 4.7.3 patch.
346 340
347Here's a small example: 341Here's a small example:
348 342
349:: 343::
350 344
351 $ cd ~/linux-2.6.12.2 # change to the kernel source dir 345 $ cd ~/linux-4.7.2 # change to the kernel source dir
352 $ patch -p1 -R < ../patch-2.6.12.2 # revert the 2.6.12.2 patch 346 $ patch -p1 -R < ../patch-4.7.2 # revert the 4.7.2 patch
353 $ patch -p1 < ../patch-2.6.12.3 # apply the new 2.6.12.3 patch 347 $ patch -p1 < ../patch-4.7.3 # apply the new 4.7.3 patch
354 $ cd .. 348 $ cd ..
355 $ mv linux-2.6.12.2 linux-2.6.12.3 # rename the kernel source dir 349 $ mv linux-4.7.2 linux-4.7.3 # rename the kernel source dir
356 350
357The -rc kernels 351The -rc kernels
358=============== 352===============
@@ -371,37 +365,40 @@ This is a good branch to run for people who want to help out testing
371development kernels but do not want to run some of the really experimental 365development kernels but do not want to run some of the really experimental
372stuff (such people should see the sections about -git and -mm kernels below). 366stuff (such people should see the sections about -git and -mm kernels below).
373 367
374The -rc patches are not incremental, they apply to a base 2.6.x kernel, just 368The -rc patches are not incremental, they apply to a base 4.x kernel, just
375like the 2.6.x.y patches described above. The kernel version before the -rcN 369like the 4.x.y patches described above. The kernel version before the -rcN
376suffix denotes the version of the kernel that this -rc kernel will eventually 370suffix denotes the version of the kernel that this -rc kernel will eventually
377turn into. 371turn into.
378 372
379So, 2.6.13-rc5 means that this is the fifth release candidate for the 2.6.13 373So, 4.8-rc5 means that this is the fifth release candidate for the 4.8
380kernel and the patch should be applied on top of the 2.6.12 kernel source. 374kernel and the patch should be applied on top of the 4.7 kernel source.
381 375
382Here are 3 examples of how to apply these patches: 376Here are 3 examples of how to apply these patches:
383 377
384:: 378::
385 379
386 # first an example of moving from 2.6.12 to 2.6.13-rc3 380 # first an example of moving from 4.7 to 4.8-rc3
387 $ cd ~/linux-2.6.12 # change to the 2.6.12 source dir 381
388 $ patch -p1 < ../patch-2.6.13-rc3 # apply the 2.6.13-rc3 patch 382 $ cd ~/linux-4.7 # change to the 4.7 source dir
383 $ patch -p1 < ../patch-4.8-rc3 # apply the 4.8-rc3 patch
389 $ cd .. 384 $ cd ..
390 $ mv linux-2.6.12 linux-2.6.13-rc3 # rename the source dir 385 $ mv linux-4.7 linux-4.8-rc3 # rename the source dir
391 386
392 # now let's move from 2.6.13-rc3 to 2.6.13-rc5 387 # now let's move from 4.8-rc3 to 4.8-rc5
393 $ cd ~/linux-2.6.13-rc3 # change to the 2.6.13-rc3 dir 388
394 $ patch -p1 -R < ../patch-2.6.13-rc3 # revert the 2.6.13-rc3 patch 389 $ cd ~/linux-4.8-rc3 # change to the 4.8-rc3 dir
395 $ patch -p1 < ../patch-2.6.13-rc5 # apply the new 2.6.13-rc5 patch 390 $ patch -p1 -R < ../patch-4.8-rc3 # revert the 4.8-rc3 patch
391 $ patch -p1 < ../patch-4.8-rc5 # apply the new 4.8-rc5 patch
396 $ cd .. 392 $ cd ..
397 $ mv linux-2.6.13-rc3 linux-2.6.13-rc5 # rename the source dir 393 $ mv linux-4.8-rc3 linux-4.8-rc5 # rename the source dir
394
395 # finally let's try and move from 4.7.3 to 4.8-rc5
398 396
399 # finally let's try and move from 2.6.12.3 to 2.6.13-rc5 397 $ cd ~/linux-4.7.3 # change to the kernel source dir
400 $ cd ~/linux-2.6.12.3 # change to the kernel source dir 398 $ patch -p1 -R < ../patch-4.7.3 # revert the 4.7.3 patch
401 $ patch -p1 -R < ../patch-2.6.12.3 # revert the 2.6.12.3 patch 399 $ patch -p1 < ../patch-4.8-rc5 # apply new 4.8-rc5 patch
402 $ patch -p1 < ../patch-2.6.13-rc5 # apply new 2.6.13-rc5 patch
403 $ cd .. 400 $ cd ..
404 $ mv linux-2.6.12.3 linux-2.6.13-rc5 # rename the kernel source dir 401 $ mv linux-4.7.3 linux-4.8-rc5 # rename the kernel source dir
405 402
406 403
407The -git kernels 404The -git kernels
@@ -415,100 +412,68 @@ Linus's tree. They are more experimental than -rc kernels since they are
415generated automatically without even a cursory glance to see if they are 412generated automatically without even a cursory glance to see if they are
416sane. 413sane.
417 414
418-git patches are not incremental and apply either to a base 2.6.x kernel or 415-git patches are not incremental and apply either to a base 4.x kernel or
419a base 2.6.x-rc kernel -- you can see which from their name. 416a base 4.x-rc kernel -- you can see which from their name.
420A patch named 2.6.12-git1 applies to the 2.6.12 kernel source and a patch 417A patch named 4.7-git1 applies to the 4.7 kernel source and a patch
421named 2.6.13-rc3-git2 applies to the source of the 2.6.13-rc3 kernel. 418named 4.8-rc3-git2 applies to the source of the 4.8-rc3 kernel.
422 419
423Here are some examples of how to apply these patches: 420Here are some examples of how to apply these patches:
424 421
425:: 422::
426 423
427 # moving from 2.6.12 to 2.6.12-git1 424 # moving from 4.7 to 4.7-git1
428 $ cd ~/linux-2.6.12 # change to the kernel source dir
429 $ patch -p1 < ../patch-2.6.12-git1 # apply the 2.6.12-git1 patch
430 $ cd ..
431 $ mv linux-2.6.12 linux-2.6.12-git1 # rename the kernel source dir
432
433 # moving from 2.6.12-git1 to 2.6.13-rc2-git3
434 $ cd ~/linux-2.6.12-git1 # change to the kernel source dir
435 $ patch -p1 -R < ../patch-2.6.12-git1 # revert the 2.6.12-git1 patch
436 # we now have a 2.6.12 kernel
437 $ patch -p1 < ../patch-2.6.13-rc2 # apply the 2.6.13-rc2 patch
438 # the kernel is now 2.6.13-rc2
439 $ patch -p1 < ../patch-2.6.13-rc2-git3 # apply the 2.6.13-rc2-git3 patch
440 # the kernel is now 2.6.13-rc2-git3
441 $ cd ..
442 $ mv linux-2.6.12-git1 linux-2.6.13-rc2-git3 # rename source dir
443 425
426 $ cd ~/linux-4.7 # change to the kernel source dir
427 $ patch -p1 < ../patch-4.7-git1 # apply the 4.7-git1 patch
428 $ cd ..
429 $ mv linux-4.7 linux-4.7-git1 # rename the kernel source dir
444 430
445The -mm kernels 431 # moving from 4.7-git1 to 4.8-rc2-git3
446===============
447 432
448These are experimental kernels released by Andrew Morton. 433 $ cd ~/linux-4.7-git1 # change to the kernel source dir
434 $ patch -p1 -R < ../patch-4.7-git1 # revert the 4.7-git1 patch
435 # we now have a 4.7 kernel
436 $ patch -p1 < ../patch-4.8-rc2 # apply the 4.8-rc2 patch
437 # the kernel is now 4.8-rc2
438 $ patch -p1 < ../patch-4.8-rc2-git3 # apply the 4.8-rc2-git3 patch
439 # the kernel is now 4.8-rc2-git3
440 $ cd ..
441 $ mv linux-4.7-git1 linux-4.8-rc2-git3 # rename source dir
449 442
450The -mm tree serves as a sort of proving ground for new features and other
451experimental patches.
452 443
453Once a patch has proved its worth in -mm for a while Andrew pushes it on to 444The -mm patches and the linux-next tree
454Linus for inclusion in mainline. 445=======================================
455 446
456Although it's encouraged that patches flow to Linus via the -mm tree, this 447The -mm patches are experimental patches released by Andrew Morton.
457is not always enforced.
458 448
459Subsystem maintainers (or individuals) sometimes push their patches directly 449In the past, -mm tree were used to also test subsystem patches, but this
460to Linus, even though (or after) they have been merged and tested in -mm (or 450function is now done via the
461sometimes even without prior testing in -mm). 451:ref:`linux-next <https://www.kernel.org/doc/man-pages/linux-next.html>`
452tree. The Subsystem maintainers push their patches first to linux-next,
453and, during the merge window, sends them directly to Linus.
462 454
463You should generally strive to get your patches into mainline via -mm to 455The -mm patches serve as a sort of proving ground for new features and other
464ensure maximum testing. 456experimental patches that aren't merged via a subsystem tree.
457Once such patches has proved its worth in -mm for a while Andrew pushes
458it on to Linus for inclusion in mainline.
465 459
466This branch is in constant flux and contains many experimental features, a 460The linux-next tree is daily updated, and includes the -mm patches.
461Both are in constant flux and contains many experimental features, a
467lot of debugging patches not appropriate for mainline etc., and is the most 462lot of debugging patches not appropriate for mainline etc., and is the most
468experimental of the branches described in this document. 463experimental of the branches described in this document.
469 464
470These kernels are not appropriate for use on systems that are supposed to be 465These patches are not appropriate for use on systems that are supposed to be
471stable and they are more risky to run than any of the other branches (make 466stable and they are more risky to run than any of the other branches (make
472sure you have up-to-date backups -- that goes for any experimental kernel but 467sure you have up-to-date backups -- that goes for any experimental kernel but
473even more so for -mm kernels). 468even more so for -mm patches or using a Kernel from the linux-next tree).
474
475These kernels in addition to all the other experimental patches they contain
476usually also contain any changes in the mainline -git kernels available at
477the time of release.
478
479Testing of -mm kernels is greatly appreciated since the whole point of the
480tree is to weed out regressions, crashes, data corruption bugs, build
481breakage (and any other bug in general) before changes are merged into the
482more stable mainline Linus tree.
483
484But testers of -mm should be aware that breakage in this tree is more common
485than in any other tree.
486 469
487The -mm kernels are not released on a fixed schedule, but usually a few -mm 470Testing of -mm patches and linux-next is greatly appreciated since the whole
488kernels are released in between each -rc kernel (1 to 3 is common). 471point of those are to weed out regressions, crashes, data corruption bugs,
472build breakage (and any other bug in general) before changes are merged into
473the more stable mainline Linus tree.
489 474
490The -mm kernels apply to either a base 2.6.x kernel (when no -rc kernels 475But testers of -mm and linux-next should be aware that breakages are
491have been released yet) or to a Linus -rc kernel. 476more common than in any other tree.
492
493Here are some examples of applying the -mm patches:
494
495::
496
497 # moving from 2.6.12 to 2.6.12-mm1
498 $ cd ~/linux-2.6.12 # change to the 2.6.12 source dir
499 $ patch -p1 < ../2.6.12-mm1 # apply the 2.6.12-mm1 patch
500 $ cd ..
501 $ mv linux-2.6.12 linux-2.6.12-mm1 # rename the source appropriately
502
503 # moving from 2.6.12-mm1 to 2.6.13-rc3-mm3
504 $ cd ~/linux-2.6.12-mm1
505 $ patch -p1 -R < ../2.6.12-mm1 # revert the 2.6.12-mm1 patch
506 # we now have a 2.6.12 source
507 $ patch -p1 < ../patch-2.6.13-rc3 # apply the 2.6.13-rc3 patch
508 # we now have a 2.6.13-rc3 source
509 $ patch -p1 < ../2.6.13-rc3-mm3 # apply the 2.6.13-rc3-mm3 patch
510 $ cd ..
511 $ mv linux-2.6.12-mm1 linux-2.6.13-rc3-mm3 # rename the source dir
512 477
513 478
514This concludes this list of explanations of the various kernel trees. 479This concludes this list of explanations of the various kernel trees.