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

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

这里我修改了三个目录的东西: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

-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

即可合入补丁:

$ 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

-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 

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值