• patch 生成合入补丁


    1. 生成补丁

    通过diff命令,可以为两个的目录生成差异补丁,这样,可以对于文件夹文件的修改,我们可以得到一个修改操作的补丁文件。

    针对两个文件生成补丁,需要保证两个目录的顶层路径的深度是一致的。默认情况下一般是无法达到这个要求的,因此最好是使用软链接来实现这个需求。

    如下两个目录,目录1:/media/data2/quectel/r12/cn_kj_r12a07/ql-ol-kernel/ ,目录2:/tmp/sdk/cn_kj_r12a07/ql-ol-kernel/ 。可以将其中一个目录软链接到另一个目录的同级目录,也可以把两个目录都进行软链接,软链接到同一个目录下即可。

    mkdir patch
    ln -s /media/data2/quectel/r12/cn_kj_r12a07/ql-ol-kernel/ patch/new 
    ln -s /tmp/sdk/cn_kj_r12a07/ql-ol-kernel/ patch/old
    
    • 1
    • 2
    • 3

    满足上述要求后,就可以生成补丁了。由于需要对比的目录文件数量非常多,如果是完全比较是非常慢的,如果只是少量的修改,并且我们是知道具体路径的,那么,我们不需要完全对比这两个目录,只读取我们修改的目录即可。

    这里我修改了三个目录的东西:arch/arm/boot/dts/qcomdriverssound。因此,我之对比这三个路径即可。

    cd patch 
    diff -Naur old/arch/arm/boot/dts/qcom new/arch/arm/boot/dts/qcom > gpio-export.diff
    diff -Naur old/drivers new/drivers >> gpio-export.diff
    diff -Naur old/sound new/sound >> gpio-export.diff
    
    • 1
    • 2
    • 3
    • 4

    -N:把不存在的文件当成空文件处理。

    -a: 把所有文件当成文本文件进行处理。

    -u: 对比差异输出时,附带差异前后三行的内容。

    -r: 递归比较所有子目录。不使用这个参数会导致diff对比时会直接忽略跳过符号链接。

    注意:这里需要保证生成补丁中的,对比文件路径的顶层路径是一致的,这样合并时,放到顶层目录下去,才能找到对应的文件。

    这样,针对 gpio-export 的修改,就生成了一个完整的内核补丁了。

    2. 合入补丁

    针对上述操作,已经针对最开始的文件夹,生成了我们修改后产生的补丁文件。这个时候,如果是要把这个补丁应用到之前的文件夹中,就通过patch命令来实现。

    gpio-export.diff 复制到 /tmp/sdk/cn_kj_r12a07/ql-ol-kernel/ 路径下,然后执行:

    cp gpio-export.diff /tmp/sdk/cn_kj_r12a07/ql-ol-kernel/
    patch -p1 < gpio-export.diff
    
    • 1
    • 2

    即可合入补丁:

    $ patch -p1 < gpio_export.diff 
    patching file drivers/gpio/gpiolib-legacy.c
    patching file drivers/gpio/gpiolib-of.c
    patching file drivers/gpio/gpiolib-sysfs.c
    patching file arch/arm/boot/dts/qcom/mdm9607-mtp.dtsi
    patching file arch/arm/boot/dts/qcom/mdm9607.dtsi
    patching file sound/soc/soc-jack.c
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    -p1: 合入时,查找文件时,忽略地一层目录。即针对 .diff 文件中的 new/sound/soc/soc-jack.c 文件路径,查找这个文件时,要删掉 new/ 前缀,把路径当成 sound/soc/soc-jack.c 处理。这里可以补丁放到 new/sound/soc 路径下,参数使用 -p3 ,忽略3层路径。即可以使用参数 -pn,n是需要忽略的目录层数。

    当然,也可以不讲 .diff 文件放到对比目录下,直接制定路径也可以OK的。

    需要撤销如何补丁,只需要执行:

    patch -p1 -RE < /media/data2/quectel/r12/patch/gpio-export.diff 
    
    • 1

    -R:针对补丁,还原修改。即合入补丁后,可以通过这个参数撤销合入的补丁。

    -E:删除合入补丁后的空文件。

  • 相关阅读:
    【云原生】第十篇--Docker主机集群化方案 Docker Swarm
    Linux常用命令
    基于lstm DNN的多变量单变量时间预测项目-完整数据+代码
    SoildNet: Soiling Degradation Detection inAutonomous Driving 个人理解
    keil报错:Flash Download failed - Could not load file‘..\..\Output\Template.axf
    从0到1配置TensorRT环境
    [Vue] 31.混入与自定义指令:编写自定义指令(2)
    vue3 Cesium 离线地图
    爬虫入门到精通_框架篇18(Scrapy中选择器用法)_sector,xpath,css,re
    个人网站建设方案书
  • 原文地址:https://blog.csdn.net/duapple/article/details/134463127