如何给OpenWrt的源码打patch
如何给OpenWrt的源码打patch
给package打patch
OpenWrt有成熟的打patch机制,可以直接从服务器download源码,校验后,再结合自己开发的patch,打上,然后编译。
开发环境:基于Ubuntu 14.04 32bit主机,编译demo_board机型。
需要用到quilt工具,安装如下:
sudo apt-get install quilt
安装成功:
$ quilt --help
Usage: quilt [--trace[=verbose]] [--quiltrc=XX] command [-h] ...
quilt --version
Commands are:
add fold new remove top
annotate fork next rename unapplied
applied graph patches revert upgrade
delete grep pop series
diff header previous setup
edit import push shell
files mail refresh snapshot
Global options:
--trace
Runs the command in bash trace mode (-x). For internal debugging.
--quiltrc file
Use the specified configuration file instead of ~/.quiltrc (or
/etc/quilt.quiltrc if ~/.quiltrc does not exist). See the pdf
documentation for details about its possible contents. The
special value "-" causes quilt not to read any configuration
file.
--version
Print the version number and exit immediately.
这里以libnetfilter-queue这个package为例。新增一个打mark接口。
编译指令:
make PRODUCT_NAME=demo_boardv1 package/libnetfilter-queue/{clean,compile,install}
先准备:
make PRODUCT_NAME=demo_boardv1_1 demo_platform_package/libnetfilter-queue/{clean,prepare} QUILT=1
进入源码编译路径:
cd build_dir/target-arm-openwrt-linux-uclibc-demo_boardv1_1/libnetfilter_queue-1.0.2
打上原来的patch,如果有的话:
quilt push -a
如果没有,日志如下:
No series file found
新建一个patch,编号需要是基于现有的patch最大编号再+1的,这里尚没有patch,因此可以命名为001:
$ quilt new 001-app-dd-mark.patch
Patch 001-app-dd-mark.patch is now on top
编辑想要改动的源文件:
$ quilt edit ./include/libnetfilter_queue/linux_nfnetlink_queue.h
如果有其他想修改的文件,可以继续编辑,直到改动完成。
查看修改:
quilt diff
更新改动到patch文件:
quilt refresh
返回到build目录,并更新patch:
make PRODUCT_NAME=demo_boardv1_1 demo_platform_package/libnetfilter-queue/update V=s
成功的日志:
$ make PRODUCT_NAME=demo_boardv1 package/libnetfilter-queue/update V=s
make[1]: Entering directory `/home/demo_platform/platform'
make[2]: Entering directory `/home/demo_platform/platform'
make[3]: Entering directory `/home/demo_platform/platform'
make[3]: Leaving directory `/home/demo_platform/platform'
make[2]: Leaving directory `/home/demo_platform/platform'
make[2]: Entering directory `/home/demo_platform/platform'
make[3]: Entering directory `/home/demo_platform/platform/demo_platform/develop/libnetfilter-queue'
if [ -s "/home/demo_platform/platform/build_dir/target-arm-openwrt-linux-uclibc-demo_boardv1/libnetfilter_queue-1.0.2/patches/series" ]; then (cd "/home/demo_platform/platform/build_dir/target-arm-openwrt-linux-uclibc-demo_boardv1/libnetfilter_queue-1.0.2"; if quilt --quiltrc=- next >/dev/null 2>&1; then quilt --quiltrc=- push -a; else quilt --quiltrc=- top >/dev/null 2>&1; fi ); fi
touch "/home/demo_platform/platform/build_dir/target-arm-openwrt-linux-uclibc-demo_boardv1/libnetfilter_queue-1.0.2/.quilt_checked"
mkdir -p ./patches
rm -f ./patches/* 2>/dev/null >/dev/null
'/home/demo_platform/platform/build_dir/target-arm-openwrt-linux-uclibc-demo_boardv1/libnetfilter_queue-1.0.2/patches/001-app-dd-mark.patch' -> './patches/001-app-dd-mark.patch'
make[3]: Leaving directory `/home/demo_platform/platform/demo_platform/develop/libnetfilter-queue'
make[2]: Leaving directory `/home/demo_platform/platform'
make[1]: Leaving directory `/home/demo_platform/platform'
这个时候patch文件已经在package的源码路径生成了。
# @ cyril in ~/demo_platform/platform/demo_platform/develop/libnetfilter-queue/patches [16:51:35]
$ ls
001-app-test-patch-mark.patch
重新编译即可:
make PRODUCT_NAME=demo_boardv1_1 demo_platform_package/libnetfilter-queue/{clean,compile,install}
给kernel打patch
大同小异。
make target/linux/{clean,prepare} V=s QUILT=1
cd build_dir/target-mipsel_24kc_musl/linux-ramips_mt76x8/linux-4.14.149/
quilt push -a
quilt new platform/666-reboot-softreset-2-hardreset-by-GPIO5.patch
quilt edit kernel/reboot.c
quilt edit 其他文件
quilt diff
quilt refresh
make target/linux/update V=s
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix