openwrt开发使用-制作patch补丁
前言
今天分享的内容是openwrt里面使用patch文件进行自己定制化开发。
作者:良知犹存
转载授权以及围观:欢迎关注微信公众号:羽林君
或者添加作者个人微信:become_me
安装quilt工具
quilt命令具有生成补丁和应用补丁的功能,但它的优势是还可以作为管理补丁的工具。一个比较大的项目可能由不同开发者共同维护,其中很多修改都以补丁的方式提供,例如openwrt,这些补丁可能存在依赖关系。 quilt工具在源代码目录中生成一个patches/目录,里面存放所有可用的补丁,记录了所有patches的先后顺序,并提供了一系列操作这些补丁的命令。 quilt以栈的形式管理补丁,最先打上的补丁位于栈底,最后打上的补丁位于栈顶(top)。打patch的动作称为push,取消补丁的动作称为pop。就如下图所示,项目中有5个patch,最新的patch为e.patch,所以quilt将这个patch放在栈顶,通过维护这样一个结构,quilt可以继续打新patch或按顺序回退patch。
安装
sudo apt-get install quilt
![](https://img-blog.csdnimg.cn/3bdaa87e222b4d6abde8b2d6d0c24c93.png)
这是quilt工具的介绍文档,更详细内容可以看此文: http://www.shakthimaan.com/downloads/glv/quilt-tutorial/quilt-doc.pdf
修改quilt.quiltrc
为了使 quilt 创建的补丁文件适合 Openwrt,需要给 quilt 创建一个配置文件/etc/quilt.quiltrc
,vi /etc/quilt.quiltrc 其内容如下:
QUILT_DIFF_ARGS="--no-timestamps --no-index -p ab --color=auto"
QUILT_REFRESH_ARGS="--no-timestamps --no-index -p ab"
QUILT_PATCH_OPTS="--unified"
QUILT_DIFF_OPTS="-p"
EDITOR="vi"
使用quilt进行制作自定义补丁
首先编译需要修改的包,例如:make package/kernel/mtxx/compile V=s ,这个时候就会单独编译mtxx包,编译生成的文件在build_dir
目录,我们去编译的目录去进行我们的修改。
应用已经存在的补丁
进入之后执行quilt push -a
创建新的补丁文件
quilt new 001-support-add-c hannel-mt76.patch
示例如下:
注 :要是不知道patch增加数字id可以使用这个进行排序确认 find -name *patch| awk -F/ '{print $3}' | sort -n
寻找并排序
![](https://img-blog.csdnimg.cn/949e2f4d8408415eadcd7acd0a706915.png)
编辑要修改的源文件
quilt edit mac80211.c
原有信道基础上增加信道:
CHAN2G(13, 2472),
CHAN2G(14, 2484),
CHAN2G(15, 2485), /* Channel 15 */
CHAN2G(16, 2512), /* Channel 16 */
查看修改后的变化
quilt diff
把变化应用的补丁文件
quilt refresh
![](https://img-blog.csdnimg.cn/44ddda496e8a42b9a4ef465dd0f33b2f.png)
把生成的patch文件复制到package包的patches目录
示例如下:
cp /home/lyn/Documents/lyn_work/openwrt/build_dir/target-mipsel_24kc_musl/linux-ramips_mt7621/mt76-2022-11-12-4bf26073/patches/*patch /home/lyn/Documents/lyn_work/openwrt/package/kernel/mt76/patches
package源目录要是没有patch文件话,建立一个patches文件夹
![](https://img-blog.csdnimg.cn/ed39469fcbe34b3c8bcc250563256457.png)
make package/kernel/mtxx/update V=s
(增量更新) 或者 make package/kernel/mtxx/compile V=s
(重新编译)进行编译
编译完成后去build_dir查看编译的原始文件,这时候看到patch打进来了
这个时候可以用编译好的可执行文件替换到路由器中进行测试,看是否是自己功能是否达到。
结语
这就是我自己在openwrt制作patch补丁使用分享。如果大家有更好的想法和需求,也欢迎大家加我好友交流分享哈。
作者:良知犹存,白天努力工作,晚上原创公号号主。公众号内容除了技术还有些人生感悟,一个认真输出内容的职场老司机,也是一个技术之外丰富生活的人,摄影、音乐 and 篮球。关注我,与我一起同行。
‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧ END ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧
推荐阅读
【3】CPU中的程序是怎么运行起来的 必读
本公众号全部原创干货已整理成一个目录,回复[ 资源 ]即可获得。