linux下生成补丁文件的几种方式

​ 平时构建用buildroot,openwrt,在openwrt下,官方文档介绍的是使用quilt生成补丁文件,在buildroot下好像并没有太详细的介绍。不过生成补丁和你所使用的构建框架并没很大的联系,一般来说,有3种方式,diff,quilt, git。

1. 使用diff生成补丁文件

​ 其实quilt和git应该也是基于diff/patch这2个命令来生成和打补丁的,无非是多了额外的一些管理功能。因此,直接使用diff是最原始的方式,简单有效,但是面对一些package里面自带了大量的补丁时,会比较繁琐,因为你生成你自己的补丁前,需要先逐一打完前面已存在的补丁,然后才能生成你自己的补丁。

​ 这里已buildroot为例说明过程:

  • 首先source, extract包的源码,然后打上已存在的补丁,dirclean是清理之前的编译目录,非必要,视情况而定。

    make opencv3-{dirclean,source,extract,patch}
    
  • 然后进入buildroot的编译目录通常在output/your_platform/build下

    cd output/rockchip_rk3568/build/
    
  • 备份经过source, extract,patch 3个步骤后的编译目录

    cp -r opencv3-3.4.12 opencv3-3.4.12_bak
    
  • 修改你自己的内容

  • 使用diff生成patch

    diff -purN opencv3-3.4.12_bak/ opencv3-3.4.12 > ../../../package/opencv3/001_fix_cap_gstreamer_get_duration.patch
    

    这里直接生成到了包目录。需要特别注意的是2个目录的顺序一定别搞错了,前面一个是未做改动前的也就是opencv3-3.4.12_bak/,后一个目录是你改动后的,否则打补丁时会失败,因为搞反了。

  • 验证

    make opencv3-{dirclean,source,extract,patch}
    

    可以看到类似如下提示:

    Applying 001_fix_cap_gstreamer_get_duration.patch using patch: 
    patching file modules/videoio/src/cap_gstreamer.cpp
    

2.使用quilt

​ quilt工具实际上是一个shell脚本,他以栈的形式管理补丁。一般的linux发行版都自带了diff,但是quilt一般没安装。

安装:

sudo apt install quilt -y

​ 过程:

  • 同样打上已存在补丁

    make opencv3-{dirclean,source,extract,patch}
    
  • 进入包编译目录

    cd output/rockchip_rk3568/build/opencv3-3.4.12
    
  • 创建补丁

    quilt new 001_fix_cap_gstreamer_get_duration.patch
    

    此时会在同级目录下生成一个patches的目录,里面有个series文件,包含了你创建的补丁名

  • 修改源码

    quilt edit file_you_want_modify
    
  • 将补丁刷到补丁文件

    quilt refresh
    

    此时补丁文件就生成到了patches目录下,拷贝此文件到包的目录里面。

3.使用git

posted @ 2023-02-03 17:53  thammer  阅读(696)  评论(0编辑  收藏  举报