diff 命令用法

1、”-u”:表示在比较结果中输出上下文中一些相同的行,这有利于人工定位

2、“-r“:表示递归比较各个子目录下的文件

3、“-N“:将不存在的文件当作空文件

4、“-w“:忽略对空格的比较

5、“-B“:忽略对空行的比较

例如:假设Linux-2.6.22.6目录中是原始的内核,Linux-2.6.22.6_ok目录中是修改后的内核,可以使用以下命令制作补丁文件linux-2.6.22.6_ok.diff(原始目录在前,修改过的目录在后)

diff  –urN -w -B  linux-2.6.22.6  linux-2.6.22.6_ok  >  linux-2.6.22.6.diff

由于linux-2.6.22.6是标准的代码,可以从网上自由下载,要发布的linux-2.6.22.6_ok中所做的修改时,只需要提供补丁文件linux-2.6.22.6_ok.diff(它通常是很小的)

patch 命令被用来打补丁----就是依据补丁文件来修改原始文件。比如对于上面的例子,可以使用以下命令将补丁文件linux-2.6.22.6_ok.diff 应用到原始目录linux-2.6.22.6上去。假设linux-2.6.22.6_ok.diff 和linux-2.6.22.6位于同一个目录下.

cd  linux-2.6.22.6

patch   -p1  <  ../linux-2.6.22.6_ok.diff

patch 命令中最重要的选项是“-pn”: 补丁文件中指明了要修改的文件的路径,“-pn”表示忽略路径中第n个斜线之前的目录。

如何打内核补丁

make kernel_menuconfig 里面存在了打补丁的过程,在更新已打过的patch的话就需要先make clean ,再make menuconfig , 再make kernel_menuconfig, 此时就会打上补丁,那么想更新的话就把原来的补丁删了,再make kernel_menuconfig,然后再把新内核和改动的内核对比,再按照下面的方法打补丁即可

内核打补丁后,需要再运行这个脚本

diff-urNwB build_dir/linux-brcm5830_sxxx-prolin2/linux-3.6.5/drivers/video/backlight/pwm_bl.c pwm_bl.c > drivers-video-backlight-pwm_bl.c.patch

 

补丁里必须在第一行加入diff打补丁命令

diff -urNwB

linux-3.6.5/drivers/video/backlight/pwm_bl.c linux-3.6.5/drivers/video/backlight/pwm_bl.c >

drivers-video-backlight-pwm_bl.c.patch

diff -urNa linux-3.0.56_old linux-3.0.56_new > out.patch

perl spldiff.pl < usb.patch

patch里就可以出现.orig

这是做了拆分补丁的动作

补丁里必须在第一行加入diff打补丁命令

spldiff.pl代码:

 #use warnings;
use strict;
no strict 'refs'; my %seen = ();
my $pf; while (<>) {
if (/^diff\s+\S+\s+.+?\/(\S+)/) {
$pf = $;
$pf =~ s/\//-/g;
unless (exists $seen{"$pf"}) {
open("$pf", ">$pf.patch");
$seen{"$pf"} = ;
}
} else {
s/(^---\s).+?\/(\S+)/$1linux-3.6.\/$.orig/;
s/(^\+\+\+\s).+?\/(\S+)/$1linux-3.6.\/$/;
print {"$pf"} $_;
}
}
make kernel_menuconfig 里面存在了打补丁的过程,在更新已打过的patch的话就需要先make clean ,
再make menuconfig , 再make kernel_menuconfig, 此时就会打上补丁,那么想更新的话就把原来的补丁删了,
再make kernel_menuconfig,然后再把新内核和改动的内核对比,再按照下面的方法打补丁即可 第一步 首先要提取一个干净的内核; svn co ….
cp configs/brcm5830-prolin2-defconfig .config
make menuconfig
进入patch目录下把补丁都删了
make V=s kernel_menuconfig
这样就会在build_dir目录下产生一个干净的linux内核 第二步 产生一个服务器上的原有内核 svn co ….
cp configs/brcm5830-prolin2-defconfig .config
make menuconfig
进入patch目录下把补丁都要保留
make V=s kernel_menuconfig
这样就会在build_dir目录下产生一个有patch提交过的linux内核 第三步 注意: 对比服务器的内核和原来的内核的区别,如果你所需要修改的文件原来的内核中没有,那么直接打补丁即可,如果所要修改的内核文件已经有了补丁,那么就要更新这个补丁即可。 diff -urNa linux-3.0.56_old linux-3.0.56_new > out.patch 打补丁命令 perl spldiff.pl < out.patch 拆分补丁,生成你所需要的补丁
欢迎交流
如有转载请注明出处

新浪博客:http://blog.sina.com.cn/u/2049150530
博客园:http://www.cnblogs.com/sky-heaven/
知乎:http://www.zhihu.com/people/zhang-bing-hua

diff 命令用法--如何打补丁【原创--学习笔记】的更多相关文章

  1. linux中diff命令用法

    diff 命 令是 linux上非常重要的工具,用于比较文件的内容,特别是比较两个版本不同的文件以找到改动的地方.diff在命令行中打印每一个行的改动.最新版 本的diff还支持二进制文件.diff程 ...

  2. Linux下diff命令用法详解

    大家好,我是良许. 我们在平时工作的时候,经常要知道两个文件之间,以及同个文件不同版本之间有何异同点.在 Windows 下,有 beyond compare 这个好用的工具,而在 Linux 下,也 ...

  3. 热更新应用--热补丁Hotfix学习笔记

    一.热补丁简介 热补丁主要是用于将纯C#工程在不重做的情况下通过打补丁的形式改造成具备lua热更新功能工程,主要是让原来脚本中Start函数和Update函数等函数代码块重定向到lua代码. 二.第一 ...

  4. 使用diff制作补丁【学习笔记】

    源文件:main.c #include <stdio.h> int main() { printf("hello"); } 修改之后的文件: main1.c #incl ...

  5. git diff 命令用法

    理解git diff的前提,首先要理解git中工作区,暂存区,本地版本库的概念,如果头脑中有这些概念,接着往下读. git diff test.c 用来查看工作区和暂存区中test.c文件的区别. g ...

  6. [ 原创 ]学习笔记-三种向ListView中填充简单文本的方法

    Android 中ListView是很重要的一块内容 掌握ListView的基本用法 对学习安卓起着举足轻重的作用 今天就介绍一下三种向ListView 填充简单文本的方法 填充其他数据类型的用法之后 ...

  7. [ 原创 ]学习笔记-Android 中关于Cursor类的介绍

    此博文转载自:http://www.cnblogs.com/TerryBlog/archive/2010/07/05/1771459.html 主讲Cursor的用法 使用过 SQLite 数据库的童 ...

  8. [ 原创 ]学习笔记-Android中隐式Intent 的使用

    Android中Intent的使用分为显示Intent和隐式Intent 之前已经介绍过显示Intent的用法了,今天来介绍一下隐式Intent的用法. 当我们在使用一款软件时,如果需要从该软件内部开 ...

  9. sed命令替换文件的内容【学习笔记】

    sed -i "s/line/Line/g" `grep "line" -rl /home//zhuangzebin/`

随机推荐

  1. NOIP2012题解

    NOIP2012题解 Day1 Vigenère 密码 vigenere 直接模拟就好了,对于那张表找找规律就很短了. #include<iostream> #include<cst ...

  2. 机器学习&深度学习资料收集

    缘由 以下博客都是我在学习过程中看到的一些知识讲解非常好的博文,就不转载了,直接给出链接方便以后重复访问.有了自己的理解之后再重新整理资料发布吧 : ) sklearn系列 http://www.cn ...

  3. Elasticsearch 常见问题的解决思路

    本文为es性能监控基础的扩展,大家可以先看下性能监控基础,熟悉下es的基本原理.为翻译性质文档,感谢原作者,原始文档地址 类似于汽车的运行方式,Elasticsearch旨在让用户快速上手和运行,而无 ...

  4. 使用android快速开发框架afinal的FinalDb操作android数据库

    http://my.oschina.net/yangfuhai/blog/87459 今天给大家介绍下#afinal#来操作android的数据库sqlite. #afinal#是一个android的 ...

  5. 【洛谷P1854】花店橱窗 线性dp+路径输出

    题目大意:给定 N 个数字,编号分别从 1 - N,M 个位置,N 个数字按照相对大小顺序放在 M 个位置里,每个数放在每个位置上有一个对答案的贡献值,求一种摆放方式使得贡献值最大. 题解:一道典型的 ...

  6. (转)git中关于fetch的使用

    将远程仓库的分支及分支最新版本代码拉取到本地: 命令:git fetch 该命令执行后,不会将拉取的分支的最新代码合并到当前分支,仅仅是拉取/下载下来到本地仓库中. 首先,我们使用git branch ...

  7. Java: String.split(....); 结果很意外

    String txt = "join|公共聊天室||"; String[] paras = txt.splite("\\|"); String t1 = par ...

  8. Apache的ProxyPass简单使用

    转: Apache的ProxyPass简单使用 置顶 2017年08月14日 18:54:33 师太,老衲把持不住了 阅读数:11164   http://mtnt2008.iteye.com/blo ...

  9. Apache Solr 初级教程(介绍、安装部署、Java接口、中文分词)

    Python爬虫视频教程零基础小白到scrapy爬虫高手-轻松入门 https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.482434a6E ...

  10. Redis危险命令重命名、禁用

    Redis的危险命令主要有: flushdb,清空数据库 flushall,清空所有记录,数据库 config,客户端连接后可配置服务器 keys,客户端连接后可查看所有存在的键 作为服务端的redi ...