Linux下patch文件有什么作用(二)
二、为多个文件进行补丁操作 1、创建测试文件夹 [armlinux@lqm patch]$ mkdir prj0 [armlinux@lqm patch]$ cp test0 prj0 [armlinux@lqm patch]$ ls prj0 test0 test1 test1.patch [armlinux@lqm patch]$ cd prj0/ [armlinux@lqm prj0]$ ls test0 [armlinux@lqm prj0]$ cat >>prj0name<<EOF > -------- > prj0/prj0name > -------- > EOF [armlinux@lqm prj0]$ ls prj0name test0 [armlinux@lqm prj0]$ cat prj0name -------- prj0/prj0name -------- [armlinux@lqm prj0]$ cd .. [armlinux@lqm patch]$ mkdir prj1 [armlinux@lqm patch]$ cp test1 prj1 [armlinux@lqm patch]$ cd prj1 [armlinux@lqm prj1]$ cat >>prj1name<<EOF > --------- > prj1/prj1name > --------- > EOF [armlinux@lqm prj1]$ cat prj1name --------- prj1/prj1name --------- [armlinux@lqm prj1]$ cd .. 2、创建补丁 [armlinux@lqm patch]$ diff -uNr prj0 prj1 > prj1.patch [armlinux@lqm patch]$ more prj1.patch diff -uNr prj0/prj0name prj1/prj0name --- prj0/prj0name 2006-08-18 09:25:11.000000000 +0800 +++ prj1/ prj0name 1970-01-01 08:00:00.000000000 +0800 @@ -1,3 +0,0 @@ --------- -prj0/prj0name --------- diff -uNr prj0/prj1name prj1/prj1name --- prj0/prj1name 1970-01-01 08:00:00.000000000 +0800 +++ prj1/prj1name 2006-08-18 09:26:36.000000000 +0800 @@ -0,0 +1,3 @@ +--------- +prj1/prj1name +--------- diff -uNr prj0/test0 prj1/test0 --- prj0/test0 2006-08-18 09:23:53.000000000 +0800 +++ prj1/test0 1970-01-01 08:00:00.000000000 +0800 @@ -1,3 +0,0 @@ -111111 -111111 -111111 diff -uNr prj0/test1 prj1/test1 --- prj0/test1 1970-01-01 08:00:00.000000000 +0800 +++ prj1/test1 2006-08-18 09:26:00.000000000 +0800 @@ -0,0 +1,4 @@ +222222 +111111 +222222 +111111 [armlinux@lqm patch]$ ls prj0 prj1 prj1.patch test0 test1 test1.patch [armlinux@lqm patch]$ cp prj1.patch ./prj0 [armlinux@lqm patch]$ cd prj0 [armlinux@lqm prj0]$ patch -p1 < prj1.patch patching file prj0name patching file prj1name patching file test0 patching file test1 [armlinux@lqm prj0]$ ls prj1name prj1.patch test1 [armlinux@lqm prj0]$ patch -R -p1 < prj1.patch patching file prj0name patching file prj1name patching file test0 patching file test1 [armlinux@lqm prj0]$ ls prj0name prj1.patch test0 ------------------- 总结一下: 单个文件 diff –uN from-file to-file >to-file.patch patch –p0 < to-file.p atch patch –RE –p0 < to-file.patch 多个文件 diff –uNr from-docu to-docu >to-docu.patch patch –p1 < to-docu.patch patch –R –p1 <to-docu.patch ------------------- 三、应用 为内核打补丁。前面在创建交叉编译工具链时,其中有一步就是为内核打补丁。当时还不是特别了解,现在很清晰了。 1、首先是解压,因为发布的补丁文件都是使用gzip压缩的。 $gunzip ../setup-dir/ patch-2.4.21-rmk1.gz 2、然后进入你的内核源代码目录 $cd linux-2.4.21 3、打补丁 $patch –p1 < ../../setup-dir/patch-2.4.21-rmk1 打完补丁后,需要检查一下有没有拒绝执行的文件,即检查.rej文件的存在。使用命令: $find . -name *.rej 如果发现,会将其输出到标准输出终端,默认屏幕。当然,你也可以采用重定向,输出到指定文件,比如reject。 $fine . -name *.rej >reject 然后可以查看reject的内容了。 |