【openwrt学习笔记】新patch的制作和旧patch的修改

news/2024/10/18 0:32:57/

目录

    • 一、参考资料
    • 二、使用QUILT工具添加补丁
      • 2.1 添加一个新的补丁
      • 2.2 编辑一个已存在的补丁
      • 2.3 补丁命名规范
      • 2.4 添加或修改内核补丁文件
    • 三、使用diff 打补丁
    • 四、相关问题及解决方法
      • 4.1 make package/package-name/update V=s失败

一、参考资料

Working with patches

二、使用QUILT工具添加补丁

默认已有quilt工具,环境已配置好,此处不赘述

2.1 添加一个新的补丁

(1)准备源目录

make package/example/{clean,prepare} V=s QUILT=1

(2)切换到准备好源码的目录:

cd build_dir/target-*/example-*

(3)应用所有已存在的补丁文件:

quilt push -a

(4)创建一份新的,空的补丁文件

quilt new 010-main_code_fix.patch

(5)添加修改的文件
上述参考资料室直接使用quilt edit命令来修改文件,但是这种方法无论是用vim 和nano用起来都不太方便,而且此时的patch修改已经是基本确认验证过代码了,基本已经有修改好的代码了。
所以这是直接使用

quilt add file_name(涉及的改动文件,都添加进去)

(6)修改文件
使用任意编辑工具皆可。
(7)查看差异

quilt diff

(8)确认无误后,使得patch生成

quilt refresh

此时可以在当前目录下,patch文件中找到生成的patch文件。可复制出来,当做备份。
注释:(trailing whitespace 尾随空格)可能会与这个警告,就是说那一行行末尾有多余空格和tab,可以手动删除再更新,也可以不管。
(9)patch放到编译目录中,使用以下命令重新清除编译,查看是否修改成功,编译无误

make package/example/{clean,compile} V=s

2.2 编辑一个已存在的补丁

(1)开始准备源目录:

make package/example/{clean,prepare} V=s QUILT=1

(2)切换到准备好的源目录中:

cd build_dir/target-*/example-*

(3)列出有效的补丁文件:

quilt series

(4)转到需要编辑的补丁文件

quilt push 010-main_code_fix.patch

(5)(6)(7)(8)(9)同上

2.3 补丁命名规范

所有的补丁文件应该以“NNN-lowercase_shortname.patch”的形式命名,并分成以下几类:
0xx - 上游补丁
1xx - 代码等待上游合并
2xx - 内核构建、配置、头补丁
3xx - 特定架构的补丁
4xx - mtd相关的补丁(子系统和驱动)
5xx - 文件系统相关的补丁
6xx - 通用网络补丁
7xx - 网络层/物理层驱动补丁
8xx - 其他驱动
9xx - 未分类的其他补丁

2.4 添加或修改内核补丁文件

暂时没有用到,也未验证相关是否正确,后面用到再总结补充。

三、使用diff 打补丁

使用diff打补丁,适合于对补丁流程熟悉,并且补丁文件个数不多及目录结构简单的情况,有时候单个文件补丁内容过多不变一个个手动修改时使用本节介绍方法也可以让工作更高效。

相关操作及命令:
(1)修改目标文件,并将该文件重命名为newfile,旧文件假设为oldfile;
(2)执行命令添加补丁内容:

$diff –Nur oldfile newfile > number-destfile.patch 

(3)修改补丁内容,修改文件路径,旧文件为a/xxx/xxx,新文件为b/xxx/xxx,文件路径必须和实际的路径层数相同,a,b代表编译包的名称;
(4)将制作好的number-destfile.patch这个补丁文件放到package/package-name/patches目录中,如果patches目录之前不存在,那么创建一个就可以了;
(5)打补丁工作结束!

四、相关问题及解决方法

题及解决方法

4.1 make package/package-name/update V=s失败

问题原因:目标组件的编译方法Makefile的Prepare节存在问题,缺少“$(call Build/Prepare/Default)”这句。

解决方法: 添加$(call Build/Prepare/Default)这句到Prepare节中,如下:

define Build/Preparemkdir -p $(PKG_BUILD_DIR)$(CP) ./src/* $(PKG_BUILD_DIR)/$(call Build/Prepare/Default)
endef

结果:问题解决


http://www.ppmy.cn/news/1115810.html

相关文章

机器学习练习-决策树

机器学习练习-决策树 代码更新地址:https://github.com/fengdu78/WZU-machine-learning-course 代码修改并注释:黄海广,haiguang2000wzu.edu.cn 1.分类决策树模型是表示基于特征对实例进行分类的树形结构。决策树可以转换成一个if…

Vue小笔记

官网中文手册 常用命令 vue3特性 reactive():函数接收一个复杂数据类型的数据(对象或数组)作为参数,并返回一个响应式代理对象。(响应式数据即当数据发生变化时 UI 也会自动更新) ref():函数接收一个基本数据类型的…

编程(48)----------网页打开的过程

一个网页的打开大致分为以下几步: 1.DNS查询 在进行网络访问过程中, 实际上所访问的是IP地址. 但输入的却仅仅是域名. 因为IP地址过于复杂不利于记忆. 因此, 需要将IP转换成更具有辨识度的域名. 通过输入域名, 以DNS进行转换为IP, 再发起请求. DNS在得到域名后会进行查询, …

【Vue】vue2使用vue-pdf预览pdf文件,预览多页,在线预览方式二,vue页面内预览,无需额外pdfjs包,保姆级教程

系列文章目录 【Vue】vue2预览显示quill富文本内容,vue-quill-editor回显页面,v-html回显富文本内容 【Vue】vue2项目使用swiper轮播图2023年8月21日实战保姆级教程 【Vue】vue2使用pdfjs预览pdf文件,在线预览方式一,pdfjs文件包…

二叉树oj题

目录 层序遍历(一) 题目 思路 代码 层序遍历(二) 题目 思路 代码 根据二叉树创建字符串 题目 思路 代码 二叉树的最近公共祖先 题目 思路 代码 暴力版 队列版 栈版 bs树和双向链表 题目 思路 代码 前序中序序列构建二叉树 题目 思路 代码 中序后序…

深度学习入门:理解神经网络和实践

💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 在本文中,我…

C语言入门Day_22 初识指针

目录 前言: 1.内存地址 2.指针的定义 3.指针的使用 4.易错点 5.思维导图 前言: 之前我们学过变量可以用来存储数据,就像一个盒子里面可以放不同的球一样。 这是一个方便大家理解专业概念的比喻。 在计算机世界里面,数据实…

Python vs C#:首先学习哪种编程语言最好?

进入编码可能很困难。 最艰难的部分? 决定先学什么语言。 当谈到 Python 与 C# 时,可能很难知道在您的决定中要考虑哪些因素。 我们为您提供了有关这些全明星编程语言的所有信息。 什么是 C#? 自 2000 年作为 Microsoft Visual Studio 的一部分开发 C# 以来,它一直是开发人…