Applying a patch or diff may sound complex, but it is relativily trival. This will provide a brief introduction. There is a more detailed article at the Linux Journal web site.
The detail below assume that you have a recent diff
and patch
utility installed on your machine. If you do not, see:
When you would like to submitting_a_patch some modifications, or changes, that you believe should be included into the mainline project, you must submit a patch. After creating a patch, you are ready to submit it to the project.
Each project has it's own coding style - which must be followed. Patches which do not meeting the coding style defined by the mainline project will be rejected without being reviewed.
When submitting a change that you have created, the diff
utility is used. It is normally used as:
diff -Naur olddir newdir > dir.patch
this will create a patch file between the old dir and the new dir.
The first step in creating a diff is to ensure that the files that you want added are under version control.
rgetz@pinky:~/blackfin-trunk/uclinux-dist/linux-2.6.x> svn status ? svn-commit.2.tmp ? svn-commit.3.tmp ? svn-commit.tmp M include/asm-blackfin/entry.h ? arch/blackfin/kernel/.setup.c.swp M arch/blackfin/kernel/traps.c M arch/blackfin/mach-common/entry.S M drivers/video/fbmem.c
You should not have any files that are labeled with a ?
which you want to include as part of the patch.
The status fields are:
A
: AddedC
: ConflictedD
: DeletedI
: IgnoredM
: ModifiedR
: ReplacedX
: item is unversioned, but is used by an externals definition?
: item is not under version control!
: item is missing (removed by non-svn command) or incomplete~
: versioned item obstructed by some item of a different kind
You can add files to version control with the svn add
command. Once this is done, you can create the patch with:
rgetz@pinky:~/blackfin-trunk/uclinux-dist/linux-2.6.x> svn diff > patchname.diff
For more information about svn, see svn information.
patch -p0 <dir.patch patch -p1 <dir.patch
--dry-run
flag. This will print the results of applying the patches without actually changing any files.
No files will be changed, due to adding the --dry-run
flag, bug we can ensure we have the correct prefix set (-p
num
)
rgetz@pinky:~/blackfin-release/uClinux-dist/linux-2.6.x> patch linux-2.6.x/ -p1 --dry-run < ../bfin_patch/kgdb_patch/kgdb_bfin_linux-2.6.x.patch patching file linux-2.6.x/ patching file arch/blackfin/Kconfig Hunk #1 succeeded at 908 (offset 94 lines). patching file arch/blackfin/kernel/Makefile patching file arch/blackfin/kernel/kgdb.c patching file arch/blackfin/kernel/kgdb_test.c patching file drivers/net/Makefile patching file drivers/net/kgdb_eth.c patching file drivers/serial/Kconfig patching file drivers/serial/Makefile patching file drivers/serial/bfin_5xx.c patching file drivers/serial/kgdb_bfin_uart.c patching file include/asm-blackfin/kgdb.h patching file include/linux/debugger.h patching file include/linux/kgdb.h patching file kernel/Kconfig.kgdb patching file kernel/Makefile patching file kernel/kgdb.c patching file kernel/sched.c Hunk #2 succeeded at 6867 (offset 5 lines). patching file net/core/netpoll.c
diffstat dir.patch
example:
rgetz@pinky:~/blackfin-release/uClinux-dist/linux-2.6.x> diffstat ../bfin_patch/kgdb_patch/kgdb_bfin_linux-2.6.x.patch Documentation/blackfin/kgdb_bfin.txt | 151 +++ arch/blackfin/Kconfig | 2 arch/blackfin/kernel/Makefile | 2 arch/blackfin/kernel/kgdb.c | 453 ++++++++++ arch/blackfin/kernel/kgdb_test.c | 112 ++ drivers/net/Makefile | 1 drivers/net/kgdb_eth.c | 160 +++ drivers/serial/Kconfig | 2 drivers/serial/Makefile | 1 drivers/serial/bfin_5xx.c | 105 ++ drivers/serial/kgdb_bfin_uart.c | 92 ++ include/asm-blackfin/kgdb.h | 183 ++++ include/linux/debugger.h | 59 + include/linux/kgdb.h | 185 ++++ kernel/Kconfig.kgdb | 70 + kernel/Makefile | 1 kernel/kgdb.c | 1519 +++++++++++++++++++++++++++++++++++ kernel/sched.c | 4 net/core/netpoll.c | 1 19 files changed, 3102 insertions(+), 1 deletion(-)
Complete Table of Contents/Topics