前言

今天分享的内容是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

这是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 寻找并排序

编辑要修改的源文件

quilt edit mac80211.c 原有信道基础上增加信道:

 CHAN2G(13, 2472),
 CHAN2G(14, 2484),
 CHAN2G(15, 2485), /* Channel 15 */
 CHAN2G(16, 2512), /* Channel 16 */

查看修改后的变化

quilt diff

把变化应用的补丁文件

quilt refresh

把生成的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文件夹

make package/kernel/mtxx/update V=s(增量更新) 或者 make package/kernel/mtxx/compile V=s (重新编译)进行编译

编译完成后去build_dir查看编译的原始文件,这时候看到patch打进来了

这个时候可以用编译好的可执行文件替换到路由器中进行测试,看是否是自己功能是否达到。

结语

这就是我自己在openwrt制作patch补丁使用分享。如果大家有更好的想法和需求,也欢迎大家加我好友交流分享哈。


作者:良知犹存,白天努力工作,晚上原创公号号主。公众号内容除了技术还有些人生感悟,一个认真输出内容的职场老司机,也是一个技术之外丰富生活的人,摄影、音乐 and 篮球。关注我,与我一起同行。

                              ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧  END  ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧

推荐阅读

【1】jetson nano开发使用的基础详细分享

【2】Linux开发coredump文件分析实战分享

【3】CPU中的程序是怎么运行起来的 必读

【4】cartographer环境建立以及建图测试

【5】设计模式之简单工厂模式、工厂模式、抽象工厂模式的对比

本公众号全部原创干货已整理成一个目录,回复[ 资源 ]即可获得。