科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道Linux下Patch的应用和制作方法介绍(2)

Linux下Patch的应用和制作方法介绍(2)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

Linux下Patch的应用和制作方法介绍(2)

作者:skid 来源:赛迪网技术社区 2007年10月10日

关键字: 方法 Patch Linux 操作系统

  • 评论
  • 分享微博
  • 分享邮件
 

二、为多个文件进行补丁操作

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<

> --------

> 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<

> ---------

> 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.patch

patch –RE –p0 < to-file.patch

多个文件

diff –uNr from-docu to-docu >to-docu.patch

patch –p1 < to-docu.patch

patch –R –p1

-------------------

三、应用

为内核打补丁。前面在创建交叉编译工具链时,其中有一步就是为内核打补丁。当时还不是特别了解,现在很清晰了。参考前面的文章《基于ARM+Linux嵌入式开发的开发工具链的建立》。

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的内容了。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章