OpenWRT Patch 制作与使用

环境:Ubuntu 2404 Server, OpenWRT-23.05

quilt

首先安装 :sudo apt install quilt

为 Quilt - Summary [Savannah] 生成配置文件,使其适用于 OpenWRT。

~/.quiltrc 针对当前用户,/etc/quilt.quiltrc 针对所有用户。这里选择 ~/.quiltrc

cat << EOF > ~/.quiltrc
QUILT_DIFF_ARGS="--no-timestamps --no-index -p ab --color=auto"
QUILT_REFRESH_ARGS="--no-timestamps --no-index -p ab"
QUILT_SERIES_ARGS="--color=auto"
QUILT_PATCH_OPTS="--unified"
QUILT_DIFF_OPTS="-p"
EDITOR="vim"
EOF

EDITOR 用来指定 quilt 用来编辑文件的编辑器,你可以选择别的编辑器,例如 nano。

创建软件包 patch

1 准备代码环境
make package/example/{clean,prepare} V=s QUILT=1

如果是主机端代码,使用:
make package/example/host/{clean,prepare} V=s QUILT=1

2 进入代码目录
cd build_dir/target-*/example-*

3 应用已有 patch
quilt push -a

4 创建新的 patch
quilt new 010-main_code_fix.patch

5 编辑需要修改的文件
quilt edit main.c // 此步可多次进行,修改多个文件

6 查看所有修改
quilt diff

7 确认修改无误,生成 patch
quilt refresh

8 将 patch 更新到 packages 目录
make package/example/update V=s

9 验证 patch 是否正确。编译通过即可。
make package/example/{clean,compile} package/index V=s

下面以开源软件 llibjson-c 为例。可以看到其已经存在 2 个 patch

ubuntu:~/Code/openwrt-23.05$ tree package/libs/libjson-c/
package/libs/libjson-c/
├── Makefile
└── patches
    ├── 001-dont-build-docs.patch
    └── 010-fix-build-with-clang-15.patch

2 directories, 3 files

1、make package/libjson-c/{clean,prepare} V=s QUILT=1

带上 QUILT=1 是告诉编译系统我们是在制作 patch 而不是编译代码。

2、然后进去源码目录 openwrt-23.05/build_dir/target-aarch64_cortex-a53_musl/json-c-0.16。此时源码目录也会有一个 patches 目录,里面存放着已有的 patch。

3、quilt push -a  // 先应用现有的所有 patch

4、quilt series // 查看已有 patch,可以看到有以下 patch

001-dont-build-docs.patch
010-fix-build-with-clang-15.patch

5、quilt new 011-test.patch // 新建一个 patch

6、quilt edit debug.c // 编辑要修改的文件

7、quilt diff // 查看修改

8、quilt refresh // 生成 patch

9、make package/libjson-c/update V=s // 更新 patch,此时 package/libs/libjson-c 就有了我们刚才的 patch

10、make package/libjson-c/{clean,compile} package/index V=s // 验证 patch,如果此步编译未报错,则 patch 无问题。

创建或编辑内核 patch

1 准备内核代码
make target/linux/{clean,prepare} V=s QUILT=1

2 进入内核代码
cd build_dir/target-*/linux-*/linux-*

3 创建 patch,需要确认 patch 的归属
quilt new generic/999-test.patch  // 针对 target/linux/generic/ 目录

quilt new platform/999-test.patch // 针对 target/linux/<arch_name>/ 目录

内核 patch 的命名遵循以下规则:
0xx - upstream backports
1xx - code awaiting upstream merge
2xx - kernel build / config / header patches
3xx - architecture specific patches
4xx - mtd related patches (subsystem and drivers)
5xx - filesystem related patches
6xx - generic network patches
7xx - network / phy driver patches
8xx - other drivers
9xx - uncategorized other patches

4 修改代码
quilt edit <filename>

5 生成 patch 
quilt refresh

6 拷贝 patch
make target/linux/update package/index V=s // 将生成的 patch 从 patches/platform 或者 patches/generic 目录拷贝到 target/linux/<arch_name>/patches-* 或者 target/linux/generic/pending-*  目录


编辑已有 patch

1 准备代码环境
make package/example/{clean,prepare} V=s QUILT=1

如果是主机端代码,使用:
make package/example/host/{clean,prepare} V=s QUILT=1

2 进入代码目录
cd build_dir/target-*/example-*

3 应用要修改的 patch
quilt push 010-main_code_fix.patch

5 编辑需要修改的文件
quilt edit main.c // 此步可多次进行,修改多个文件

6 查看所有修改
quilt diff

7 确认修改无误,生成 patch
quilt refresh

8 将 patch 更新到 packages 目录
make package/example/update V=s

9 验证 patch 是否正确。编译通过即可。
make package/example/{clean,compile} package/index V=s

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/772619.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【LeetCode】十三、分治法:多数元素 + 最大子序列和

文章目录 1、分治法2、leetcode169&#xff1a;多数元素3、leetcode53&#xff1a;最大子序和 1、分治法 分治一般都搭配递归使用&#xff1a; 用分治法的一个应用——归并排序&#xff1a;将一组数不停的一分为二&#xff0c;直到分到每组只有一个数的时候 分到每组只有一个数…

【软件测试】Postman接口测试基本操作

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;薪资嘎嘎涨 Postman-获取验证码 需求&#xff1a;使用Postman访问验证码接口&#xff0c;并查看响应结果…

思看科技募资额骤降:对赌压力下巨额分红,还购买 7项商业房产

《港湾商业观察》施子夫 6月11日&#xff0c;证监会网站披露思看科技&#xff08;杭州&#xff09;股份有限公司&#xff08;以下简称&#xff0c;思看科技&#xff09;的首轮审核问询函回复意见并更新2023年财务数据&#xff0c;继续推进上市进程。 公开信息显示&#xff0c…

Logback日志配置两种方式

SpringBoot 默认使用的是Logback 1. 在resource新建文件logback-spring.xml&#xff0c;配置日志相关信息 <configuration><property name"app.name" value"order-service"/><property name"log.path" value"./logs/"…

鸿蒙小案例-首选项工具类

一个简单的首选项工具类 主要提供方法 初始化 init()方法建议在EntryAbility-》onWindowStageCreate 方法中使用 没多少东西&#xff0c;放一下测试代码 import { PrefUtil } from ./PrefUtil; import { promptAction } from kit.ArkUI;Entry Component struct PrefIndex {St…

强强联合!当RAG遇到长上下文,滑铁卢大学发布LongRAG,效果领先GPT-4 Turbo 50%

过犹不及——《论语先进》 大学考试时&#xff0c;有些老师允许带备cheet sheet&#xff08;忘纸条&#xff09;,上面记着关键公式和定义,帮助我们快速作答提高分数。传统的检索增强生成(RAG)方法也类似,试图找出精准的知识片段来辅助大语言模型(LLM)。 但这种方法其实有问题…

智能井盖采集装置 开启井下安全新篇章

在现代城市的脉络之下&#xff0c;错综复杂的管网系统如同城市的血管&#xff0c;默默支撑着日常生活的有序进行。而管网的监测设备大多都安装在井下&#xff0c;如何给设备供电一直是一个难题&#xff0c;选用市电供电需经过多方审批&#xff0c;选用电池供电需要更换电池包&a…

探索哈希函数:数据完整性的守护者

引言 银行在处理数以百万计的交易时&#xff0c;如何确保每一笔交易都没有出错&#xff1f;快递公司如何跟踪成千上万的包裹&#xff0c;确保每个包裹在运输过程中没有丢失或被替换&#xff1f;医院和诊所为庞大的患者提供有效的医疗保健服务&#xff0c;如何确保每个患者的医疗…

FPGA - 图像灰度化

一&#xff0c;灰度图像概念 灰度数字图像是每个像素只有一个采样颜色的图像。这类图像通常显示为从最暗黑色到最亮的白色的灰度&#xff0c;尽管理论上这个采样可以任何颜色的不同深浅&#xff0c;甚至可以是不同亮度上的不同颜色。灰度图像与黑白图像不同&#xff0c;在计算机…

Redis 7.x 系列【18】事务

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Redis 版本 7.2.5 源码地址&#xff1a;https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 概述2. 命令2.1 MULTI2.2 EXEC2.3 DISCARD2.4 WATCH2.5 UNWATCH 3. 事务中的错误4.…

物联网平台产品介绍

中服云物联网平台在功能、性能、易用性方面有较大的提升&#xff0c;成为业界领先的工业物联网平台。主要包含8大能力&#xff1a;数据采集与控制、基础物联组件集、快速开发工具集、数据集管理、数据处理与分析、平台配置管理、手机端小程序、二次开发接口。 产品配图&#x…

EDUSRC-我与xx职院的爱恨情仇(教育漏洞挖掘)

一、人生中的第一个漏洞 2024.1月的时候&#xff0c;当时看朋友挖到了一个名校的漏洞&#xff0c;特别羡慕&#xff0c;我也想挖&#xff0c;但是当时什么都不会&#xff0c;就只好在网上搜edusrc挖掘思路、edusrc挖掘教程等等&#xff0c;边学边挖&#xff0c;边挖边学。 一开…

电源管理芯片PMIC的编程

1.概述 市面上的高端PMIC芯片&#xff0c;功能都非常丰富&#xff0c;输出电压可调节、故障监控、启动配置、MCU认证等&#xff0c;用户可以根据项目实际需求&#xff0c;进行灵活的配置&#xff0c;让PMIC芯片的功能最大限度的满足项目需求。 PMIC芯片通常支持多种编程接口&a…

IMU用于仿生水下机器人姿态估计

近期&#xff0c;自中国农业大学的研究团队从海豚身上汲取灵感&#xff0c;成功研发出一种创新性的双腱驱动机器人海豚尾鳍。这项创新性的设计不仅能够实现全方向运动&#xff0c;还能精细地模拟海豚的推力特性&#xff0c;揭示了其背后隐藏的力学秘密。 这款机器人尾鳍设计独特…

深入编译与体验开源车载Linux操作系统AGL

随着汽车行业的智能化和互联化趋势日益明显&#xff0c;车载系统作为汽车的重要组成部分&#xff0c;其性能和功能也受到了越来越多的关注。Linux作为一款开源的操作系统&#xff0c;具有稳定性高、安全性强、可定制性好等优点&#xff0c;因此成为了车载系统领域的热门选择。 …

Aavegotchi的Gotchiverse新地图: 沉睡的野兽即将苏醒!

Gotchi 守护者们&#xff0c;准备好了&#xff0c;因为我们要大开杀戒了&#xff01; 加入我们吧&#xff08;后果自负&#xff01;&#xff09;&#xff0c;我们将深入Gotchiverse&#xff0c;前往奥姆夫山--我们虚拟世界中所有 FOMO 的炽热源头。 请继续阅读&#xff0c;了解…

户用分布式光伏项目开发模式

随着全球对可再生能源的重视和技术的不断进步&#xff0c;分布式光伏发电作为一种清洁、高效、可再生的能源形式&#xff0c;正逐渐成为新能源发展的重要方向。户用分布式光伏项目&#xff0c;作为分布式光伏发电的重要组成部分&#xff0c;其开发模式对于推动光伏产业的普及与…

python怎么样将一段程序无效掉

1、python中可以用注释屏蔽一段语句&#xff0c;具体方法如下&#xff0c;首先打开一段python的示例程序&#xff1a; 2、然后单行注释的方法是在语句前面加上#&#xff0c;程序运行后添加注释的地方的语句会被自动跳过&#xff0c;这里可以看到将打印变量a的语句添加注释就没有…

动态校验列表数据方案

背景&#xff1a;当select 选择A 的时候是必填&#xff0c;选B的时候是非必填 那么我们需要监听 selec 变化时候对 列表的 :edit-rules“validRulesList” 进行重新赋值必填校验的true, &#xff08;跟对列表内上传文件&#xff0c;对列表文件进行赋值名字一样道理&#xff0c;…

Kubernetes云原生存储解决方案openebs部署实践-4.0.1版本(helm部署)

Kubernetes云原生存储解决方案openebs部署实践-4.0.1版本&#xff08;helm部署&#xff09; 简介 OpenEBS 是一种开源云原生存储解决方案。OpenEBS 可以将 Kubernetes 工作节点可用的任何存储转化为本地或复制的 Kubernetes 持久卷。OpenEBS 帮助应用和平台团队轻松地部署需要…