内核打补丁

原创:kylin_zeng ; http://blog.chinaunix.net/uid/23795897.html
一、文件系统对内核打补丁:
yaffs2要先进行对kernel打补丁是为了能让kernel支持yaffs2文件系统,如果kernel已经支持了。那么应该是应该就不用打补丁了。 
格式:./patch-ker.sh   c  m  linux-tree(内核源代码路径) 

二、内核给内核自己打补丁:
当我们如文件系统已经给kernel打了补丁,还有内核做了很多的修改了。比如最新源代码的v1.0版本的kernel_v1.0 已经修改好了成kernel_v1.1 版本, 那么我们可以制作补丁:
1)先把.config备份成.config_ok
2)  diff    -urN   kernel_v1.0   kernel_v1.1   > kernel.patch  //这时就产生了一个kernel.patch补丁。
3)patch   -p1  < kernel.patch  //对kernel_v1.0打上补丁
4)  cp  .config_ok  .config 
5)  make   uImage   // 此时kernel_v1.0编译出来的uImage就和kernel_v1.1编译出来的一样了。


以下转载:http://blog.csdn.net/kl222/article/details/8471439
  • 制作补丁
  • 制作补丁有两种方式:

    1. git diff

      我们可以首先用git diff制作一个patch。本文示例的工作目录里最初有一个文件a,内容是“This is the file a.”,放置在master分支中。为了修改代码,我们一般的做法是建立一个新分支:

      sweetdum@sweetdum-ASUS:~/GitEx$ git branch Fix
      sweetdum@sweetdum-ASUS:~/GitEx$ git checkout Fix
      Switched to branch 'Fix'

      接下来我们在a文件里面追加一行,然后执行git diff。
      sweetdum@sweetdum-ASUS:~/GitEx$ echo 'Fix!!!'>>a
      sweetdum@sweetdum-ASUS:~/GitEx$ git diff
      diff --git a/a b/a
      index 4add65f..0d295ac 100644
      --- a/a
      +++ b/a
      @@ -1 +1,2 @@
      This is the file a.
      +Fix!!!

      我们看到了Git diff的输出,这是一个非常典型的Patch式diff。这样我们可以直接把这个输出变为一个Patch:
      sweetdum@sweetdum-ASUS:~/GitEx$ git commit -a -m "Fix"
      [Fix b88c46b] Fix
      1 files changed, 1 insertions(+), 0 deletions(-)
      sweetdum@sweetdum-ASUS:~/GitEx$ git diff master > patch
      sweetdum@sweetdum-ASUS:~/GitEx$ git checkout master
      Switched to branch 'master'

      当然,用这种方法,你不用提交,也可以直接导出patch

      git diff > patch

       

      我们现在有一个patch文件,并且签出了master,接下来我们可以使用git apply来应用这个patch。当然了,实际应用中,我们不会这样在一个分支建patch,到另一个分支去应用,因为只有merge一下就好了。我们现 在权当没有这个Fix分支。一般情况下,为了保护master,我们会建立一个专门处理新交来的patch的分支:

      sweetdum@sweetdum-ASUS:~/GitEx$ git branch PATCH
      sweetdum@sweetdum-ASUS:~/GitEx$ git checkout PATCH
      Switched to branch 'PATCH'
      sweetdum@sweetdum-ASUS:~/GitEx$ git apply patch
      sweetdum@sweetdum-ASUS:~/GitEx$ git commit -a -m "Patch Apply"
      [PATCH 9740af8] Patch Apply
      1 files changed, 1 insertions(+), 0 deletions(-)

      看,现在我们在PATCH分支中应用了这个补丁,我们可以把PATCH分支和Fix比对一下,结果肯定是什么也没有,说明PATCH分支和Fix分支完全一样。patch应用成功。即使有多个文件git diff 也能生成一个patch。


    2. git format-patch

    我们同样用上面那个例子的工作目录,这次,我们在Fix分支中的a添加了新行之后,用git format-patch生成一个patch。
    sweetdum@sweetdum-ASUS:~/GitEx$ git checkout Fix
    Switched to branch 'Fix'
    sweetdum@sweetdum-ASUS:~/GitEx$ echo 'Fix!!!'>>a
    sweetdum@sweetdum-ASUS:~/GitEx$ git commit -a -m "Fix1"
    [Fix 6991743] Fix1
    1 files changed, 1 insertions(+), 0 deletions(-)
    sweetdum@sweetdum-ASUS:~/GitEx$ git format-patch -M master
    0001-Fix1.patch

    git format-patch的-M选项表示这个patch要和那个分支比对。现在它生成了一个patch文件,我们看看那是什么:

    sweetdum@sweetdum-ASUS:~/GitEx$ cat 0001-Fix1.patch
    From 6991743354857c9a6909a253e859e886165b0d90 Mon Sep 17 00:00:00 2001
    From: Sweetdumplings <linmx0130@163.com>
    Date: Mon, 29 Aug 2011 14:06:12 +0800
    Subject: [PATCH] Fix1

    ---
    a |    1 +
    1 files changed, 1 insertions(+), 0 deletions(-)

    diff --git a/a b/a
    index 4add65f..0d295ac 100644
    --- a/a
    +++ b/a
    @@ -1 +1,2 @@
    This is the file a.
    +Fix!!!
    --
    1.7.4.1

    看,这次多了好多东西,不仅有diff的信息,还有提交者,时间等等,仔细一看你会发现,这是个E-mail的文件,你可以直接用git send-email发送它!

    git send-email用法:http://www.kernel.org/pub/software/scm/git/docs/git-send-email.html

    中文:http://www.cnblogs.com/wwang/archive/2011/04/01/1951742.html

    这种patch,我们要用git am来应用。

    sweetdum@sweetdum-ASUS:~/GitEx$ git checkout master
    Switched to branch 'master'
    sweetdum@sweetdum-ASUS:~/GitEx$ git branch PATCH
    sweetdum@sweetdum-ASUS:~/GitEx$ git checkout PATCH
    sweetdum@sweetdum-ASUS:~/GitEx$ git am 0001-Fix1.patch
    Applying: Fix1
    sweetdum@sweetdum-ASUS:~/GitEx$ git commit -a -m "PATCH apply"

    在提交了补丁之后,我们可以再看看目前文件a的情况:

    sweetdum@sweetdum-ASUS:~/GitEx$ cat a
    This is the file a.
    Fix!!!

    果然,多了一个Fix!!!

    不过要注意的是,如果master与Fix分支中间有多次提交,它会针对每次提交生成一个patch。



<script>window._bd_share_config={"common":{"bdsnskey":{},"bdtext":"","bdmini":"2","bdminilist":false,"bdpic":"","bdstyle":"0","bdsize":"16"},"share":{}};with(document)0[(getelementsbytagname('head')[0]||body).appendchild(createelement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new date()/36e5)];</script>
阅读(91) | 评论(0) | 转发(0) |
0

上一篇:tar命令

下一篇:制作linux启动的ppm图片

给主人留下些什么吧!~~
评论热议
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值