OpenWrt 快速打patch 与快速编译

本文介绍了在调试Linux内核时如何在OpenWrt中快速打patch和编译。方法1使用OpenWrt官方patch工具quilt,但当改动较大时效率较低。方法2利用diff生成patch,通过不makeclean直接更新patch来节省编译时间。通过修改patch应用路径和使用quiltpop/fquiltpush-a,可以只编译改动过的文件,显著提高了编译效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

OpenWrt 快速打patch 与快速编译

场景

我最近在调试linux 内核代码,需要打patch

方法1.OpenWrt 官方patch方法

  • make target/linux/{clean,prepare} QUILT=1
  • cd build_dir/target_xxx/linux-xx
  • quilt push -a
  • quilt new xx
  • quilt edit xx
  • quilt refresh
  • cd openwrt ; make target/linux/{update,install}

该方法有明显缺点

  • 仅适用于改动较少的情况
  • 改动代码行数多,改动文件数量多时,用quilt edit 逐个去编辑修改就很费力费时

当改动较多时,如何快速打patch呢 ?

方法2.使用 diff 快速生成 patch

diff -uNr dir_old dir_new 可以对比整个目录差异

可以将 quilt push -a 后的 linux 目录复制到 /opt/linux.old , 再复制一份 /opt/linux.new

cp build_dir/target_xxx/linux-xx -af /opt/linux-xx.old
cp build_dir/target_xxx/linux-xx -af /opt/linux-xx.new

在 /opt/linux-xx.new 上编译修改,可以放心用 sorceinsight 和 beyongcompare 等进行编辑,比 quilt edit 来的方便

改完后将补丁写入 target/linux/xx/patches

cd /opt
diff -uNr  linux-xx.old linux-xx.new > target/linux/xx/patches/xx-new.patches

打完补丁后,重新 make clean 能生效

make target/linux/{clean,install}

但也有个问题,就是 make target/linux/{clean,install} 因为要clean , 重编整个kernel 需要花很长时间。

如何改进呢?

2.1 如何快速重编

需要一种办法,不 make clean 也能让patch 生效

改进如下

diff -uNr  linux-xx.old linux-xx.new > target/linux/xx/patches/xx-new.patches
改为
diff -uNr  linux-xx.old linux-xx.new > build_dir/target_xx/linux-xx/linux-x.x.x/patches/platform/xx-new.patches
quilt pop -f
quilt push -a

这样使 new.patches 生效

然后

make target/linux/install V=s -j5

这样可以看到只有新打补丁的那几个文件会重编,这样大大节省了编译时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值