如何制作LINUX的patch文件及如何打patch

对某个版本的Linux内核做了修改以后,如果希望发布出去给别人用,那么就需要制作针对此版本的patch文件。
patch文件也叫补丁,就是一个文本文档,这个文档包含了在两个不同版本的源代码树之间的变化。
补丁是通过diff应用程序来创建的。
为了正确地打上一个补丁,你需要知道这个补丁是从哪个基础版本产生出来的以及这个补丁将要把
目前的源代码树变化到什么新的版本。这些信息或者会出现在补丁文件的原数据中,或者可能从文件名中推断出来。

1,如何制作补丁patch文件 
 
   比如基于kernel内核 做了修改,修改了LCD代码,修改前的内容放在文件夹kernel下,修改后的内容放在文件夹kernel_new下,那么制作patch文件的命令为
   zhenwx-desktop:~/sourcecode/$diff -Naur kernel/    kernel_new/ > zwx-lcd.patch
 
   当前目录为   /home/zhenwx/sourcecode/,该目录有原来修改前的内核kernel目录和修改后的目录kernel_new
   执行命令为  diff -Naur kernel/    kernel_new/ > zwx-lcd.patch
   diff命令就会对比kernel和kernel_new目录的文件,产生patch文件zwx-lcd.patch
   这时就 可以把zwx-lcd.patch发布到网上。
   这个patch文件是描述文件的路径信息和将第几行内容删除,在第几行添加内容,删除用减号,添加用加号
  
 2,怎样打补丁patch和卸载补丁patch
    可以使用patch程序来打一个补丁。patch程序读取一个diff(或者patch)文件,然后把文件中
    描述的变化内容应用到代码树上。
    Linux内核中的补丁是相对于保存内核源代码目录的父目录而生成的。
    这就意味着:patch文件中的文件路径包含了它所基于的内核源文件目录的名字(或者像是"a/"和"b/"
    之类的其它名字)。
    由于这很可能和你本地机器上的内核源代码目录的名字不匹配。你应该切换到你的内核源代码目录,并且在打补丁的时候去掉patch
    中文件名字路径的第一个分量(patch命令的-p1参数可以完成这个任务)。
    为了卸载掉一个以前已经打上的补丁,使用-R参数来打补丁。
    于是,如果你使用如下的命令来打补丁:
     patch -p1

那么你可以像下面这样来卸载掉这个补丁:
     patch -R -p1 
  
 例如其他人下载到上面提供的patch文件后,只需在标准的kernel内核目录里执行
 zhenwx-desktop:~/sourcecode/kernel/$
  
 patch -p1<../zwx-lcd.patch
  
  
 这里假设zwx-lcd.patch和kernel文件夹是在同一目录下,且上述命令 在kernel文件夹内执行
 如果在/sourcecode目录下面执行命令
 zhenwx-desktop:~/sourcecode/$
  
 patch -p0<../zwx-lcd.patch
  
  
 linux下patch命令使用详解
  
 linux打补丁命令
  
 功能说明:修补文件。
  
 语  法:patch [-bceEflnNRstTuvZ][-B <备份字首字符串>][-d <工作目录>][-D <标示符号>][-F <监别列数>][-g <控制数值>][-i <修补文件>][-o <输出文件>][-p <剥离层级>][-r <拒绝文件>][-V <备份方式>][-Y <备份字首字符串>][-z <备份字尾字符串>][--backup-if   -mismatch][--binary][--help][--nobackup-if-mismatch][--verbose][原始文件 <修补文件>] 或 path [-p <剥离层级>] < [修补文件]
  
 补充说明:patch指令让用户利用设置修补文件的方式,修改,更新原始文件。倘若一次仅修改一个文件,可直接在指令列中下达指令依序执行。如果配合修补文件的方式则能一次修补大批文件,这也是Linux系统核心的升级方法之一。
  
 参  数:
   -b或--backup  备份每一个原始文件。 
 -B<备份字首字符串>或--prefix=<备份字首字符串>  设置文件备份时,附加在文件名称前面的字首字符串,该字符串可以是路径名称。 
 -c或--context  把修补数据解译成关联性的差异。
   -d<工作目录>或--directory=<工作目录>  设置工作目录。 
 -D<标示符号>或--ifdef=<标示符号>  用指定的符号把改变的地方标示出来。 
 -e或--ed  把修补数据解译成ed指令可用的叙述文件。
   -E或--remove-empty-files  若修补过后输出的文件其内容是一片空白,则移除该文件。
   -f或--force  此参数的效果和指定-t参数类似,但会假设修补数据的版本为新 版本。 
 -F<监别列数>或--fuzz<监别列数>  设置监别列数的最大值。 
 -g<控制数值>或--get=<控制数值>  设置以RSC或SCCS控制修补作业。 
 -i<修补文件>或--input=<修补文件>  读取指定的修补问家你。 
 -l或--ignore-whitespace  忽略修补数据与输入数据的跳格,空格字符。 
 -n或--normal  把修补数据解译成一般性的差异。
   -N或--forward  忽略修补的数据较原始文件的版本更旧,或该版本的修补数据已使 用过。 
 -o<输出文件>或--output=<输出文件>  设置输出文件的名称,修补过的文件会以该名称存放。 
 -p<剥离层级>或--strip=<剥离层级>  设置欲剥离几层路径名称。
   -f<拒绝文件>或--reject-file=<拒绝文件>  设置保存拒绝修补相关信息的文件名称,预设的文件名称为.rej。
   -R或--reverse  假设修补数据是由新旧文件交换位置而产生。 
 -s或--quiet或--silent  不显示指令执行过程,除非发生错误。 
 -t或--batch  自动略过错误,不询问任何问题。 
 -T或--set-time  此参数的效果和指定-Z参数类似,但以本地时间为主。 
 -u或--unified  把修补数据解译成一致化的差异。 
 -v或--version  显示版本信息。 
 -V<备份方式>或--version-control=<备份方式>  用-b参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,这个字符串不仅可用-z参数变更,当使用-V参数指定不同备份方式时,也会产生不同字尾的备份字符串。
   -Y<备份字首字符串>或--basename-prefix=--<备份字首字符串>  设置文件备份时,附加在文件基本名称开头的字首字符串。
   -z<备份字尾字符串>或--suffix=<备份字尾字符串>  此参数的效果和指定-B参数类似,差别在于修补作业使用的路径与文件名若为src/linux/fs/super.c,加上backup/字符串后,文件super.c会备份于/src/linux/fs/backup目录里。
   -Z或--set-utc  把修补过的文件更改,存取时间设为UTC。 
 --backup-if-mismatch  在修补数据不完全吻合,且没有刻意指定要备份文件时,才备份文件。 
 --binary  以二进制模式读写数据,而不通过标准输出设备。 
 --help  在线帮助。 
 --nobackup-if-mismatch  在修补数据不完全吻合,且没有刻意指定要备份文件时,不要备份文件。 
 --verbose  详细显示指令的执行过程。
  
 patch,是打补丁的命令,有很多用法,见帮助#man patch
 -p参数决定了是否使用读出的源文件名的前缀目录信息,不提供-p参数,则忽略所有目录信息,
  patch -p0       (“p”指的是路径,后面的数字表示去掉路径的第几部分。0,表示不去掉,为全路径)
  patch -p1       (“p”后面的数字1,表示去掉前第一个路径,第一个"/"以前的目录,依此类推。
 如/usr/src/linux-2.6.11/Makefile这样的文件名,在提供-p3参数时将使用linux-2.6.11/Makefile作为所要patch的文件。
 
对于刚才举的Linux内核源码LCD升级包的例子,假定源码目录位于/home/zhenwx/sourcecode/kernel中,
 则在当前目录为/home/zhenwx/sourcecode/时使用"patch -p0<../zwx-lcd.patch"可以工作,
 在当前目录为/home/zhenwx/sourcecode/kernel时,使用"patch -p1<../zwx-lcd.patch"也可以正常工作。
 
如果patch文件里面描述的第一级目录和你自己的第一级目录名字不一样,要将第一级的目录去掉,这个方法就派上用场了。
 
比如如果你拿到的patch描述的目录和你的不一样,patch第一行描述的目录信息
 
diff --git a/arch/arm/mach-msm/acpuclock-8064.c b/arch/arm/mach-msm/acpuclock-8064.c
 
但是你的目录既不是a,也不是b,那么你就要将目录的第一层去掉,到你的kernel的路径下面打patch

用-p1参数

转自: http://blog.csdn.net/zhenwenxian/article/details/8393731

如何制作LINUX的patch文件及如何打patch相关推荐

  1. linux内核patch文件夹,如何制作patch文件及如何打patch 附带linux打补丁命令

    对某个版本的Linux内核做了修改以后,如果希望发布出去给别人用,那么就需要制作针对此版本的patch文件.比如基于Linux-2.6.25内核 做了修改,修改后的内容放在文件夹Linux-2.6.2 ...

  2. openwrt patch文件怎么用_openwrt patch

    一: 这几天使用一款电信的4G网卡,发现了一些问题,所以决定打个pitch来解决问题,顺便把patch的生成与使用学习一下 二:安装patch的管理工具quilt 1. sudo apt-get in ...

  3. 制作linux安装镜像文件,制作CentOS 6.5一键自安装ISO镜像光盘 | 聂扬帆博客

    因为工作中需要经常安装系统并且会有一些定制的系统包和软件.定制ISO可以大大减轻运维的负担.本文以Centos 6.5制作为例 一.系统安装包说明 目录树结构 |-- .discinfo |-- .t ...

  4. 用Python解析WinMerge生成的Patch文件

    这个代码是本人第一次用Python写的包含Class的代码. 该解析之前用VBA写过,刚刚学习了五天的Python, 检验一下自己学习的成果,也算给五一长假画上一个分号. 写的比较烂,自己看着都难受. ...

  5. <Linux>使用quilt工具制作补丁(patch)文件

    Linux使用quilt工具制作补丁文件 前言 一.安装quilt工具 二.一个需要被打补丁的文件 三.quilt new命令创建初始补丁文件 四.quilt add命令添加目标文件 五.修改目标文件 ...

  6. 使用和制作patch文件

    使用和制作patch文件 发表时间: 2007-2-13 20:57    作者: superuser    来源: 迷茫人 字体: 小 中 大 | 打印 原文http://www.linuxsir. ...

  7. linux中patch文件的作用------

    linux patch 首先介绍一下diff和patch.在这里不会把man在线文档上所有的选项都介绍一下,那样也没有必要.在99%的时间里,我们只会用到几个选项.所以必须学会这几个选项. 1.dif ...

  8. Linux中patch文件的使用

    因为在u-boot移植过程中,有几处通用文件要修改,如果每次都要手动修改就太麻烦了.制作补丁可以解决这个问题. 学习资料的收集比较简单,方法一类似于这种初级问题网上资料非常丰富,google或者bai ...

  9. linux下patch文件使用

    初识patch还是和Z同事沟通问题时认识的,回想起已经近半年.简单来说,打patch是对文件内容增增减减.由陌生到认识到熟悉,是一件愉快的事. 1. 对单个文件打patch old.txt为原文件,n ...

最新文章

  1. php编写一个学生类_PHP实现简单的学生信息管理系统(web版)
  2. 065_html视频
  3. css3 线条出现动画效果,CSS3实现的线条波浪动画效果
  4. pinctrl虚拟spi的linux驱动,linux内核pinctrl驱动的理解和总结
  5. HTML5 + CSS 左右排版自适应高
  6. C++学习基础三——迭代器基础
  7. for命令linux,linux中的for命令
  8. tableViewcell的删除
  9. java常用类解析五:IO系统File类及文件搜索工具类
  10. [转]BT种子文件格式
  11. Apache 2 移植到Arm开发板
  12. 过程语句 oracle,Oracle 过程控制语句整理
  13. ADT 使用和问题总结
  14. java 整型 二进制_Java中如何得到一个整型数的二进制形式(十进制转化成二进制)...
  15. matlab 函数pdf怎么用_怎么将Word转换成PDF?Word转PDF就得用这个工具
  16. 机器学习面试常用算法知识点梳理总结
  17. 行业解决方案】高速公路供配电监控系统-安科瑞 周莉娜
  18. 导弹发射各项参数计算涉及计算机应用,按计算机用途分类
  19. github下载提速教程
  20. Trinity介绍与使用(一)

热门文章

  1. Mac终端显示 bogon的问题
  2. Python:每日一题001
  3. XCode调试器LLDB
  4. VMware linux虚拟机在线识别新添加磁盘
  5. js实时获取系统当前时间
  6. (转)android四种动画
  7. Python学习笔记:Io编程序列化
  8. CPU寻址范围(寻址空间)一系列问题
  9. CentOS系统NAT共享上网
  10. 5、VTK在图像处理中的应用