内核补丁 — OpenWRT

2023-11-13

  目前本人遇到过两种情况的内核补丁,一种是 build_dri目录中内核文件夹下存在 patches目录,另外一种是内核目录下不存在 patches目录的。第一种情况可以直接在内核目录下使用 quilt命令进行新建和保存补丁;而第二种情况无法进行直接保存补丁文件使 make clean && make V=99后生效。下面提供了两种情况下的打补丁操作。

一、方式一(内核目录存在patches文件)

  (CPU平台:ar9531     内核版本:3.3.8)
  若目录 “build_dir/linux-ar71xx_generic/linux-3.3.8/”(本机编译后内核路径)下存在 patches目录,且该 patches/platform/目录下存放着很多的补丁,则可以使用以下方式进行给内核打补丁修改内核文件。
  修改直接修改“build_dir/linux-ar71xx_generic/linux-3.3.8/” 内核文件,不 clean操作下直接编译代码,待验证修改功能没有问题后,再讲修改的文件备份到其它路径,以备打补丁时对比修改之处。例如修改了 “drivers/usb/serial/option.c” 文件,先将 option.c文件备份起来,然后按照下面步骤操作打补丁。

1、清除恢复内核代码
  cd qsdk/
  make target/linux/clean && make target/linux/prepare V=99
  cd build_dir/linux-ar71xx_generic/linux-3.3.8/

2、新建 patch
  quilt new platform/9999-test.patch   // 暂时不生成文件
  quilt top   // 查看当前最上层 patch

3、补丁文件与代码文件进行关联(可忽略)
  格式: quilt add [-P xx.patch] 1.c 2.c 3.c
  quilt add drivers/usb/serial/option.c
  若没有指定patch,文件 option.c会关联最顶上的 patch。

4、编辑内核文件
  quilt edit drivers/usb/serial/option.c
  修改时可使用 “Shift+G” 选项来跳转到第n行去修改内容,“Ctrl+X” 退出并“Y”保存修改。
  修改后若直接打开 option.c文件可以看到刚修改的内容。

5、生成补丁文件
  quilt refresh
  命令执行完后回生成 “patches/platform/9999-test.patch” 文件,该文件可以直接 cat查看。

6、应用 patch
  cd qsdk/
  make target/linux/update V=99
  应用后 “qsdk/target/linux/ar71xx/patches-3.3/” 下会生成 9999-test.patch补丁文件。

7、测试
  make target/linux/clean && make target/linux/prepare V=99
  测试可发现clean后重新生成的内核代码 option.c文件中已经有了新添加的内容。


二、方式二(内核目录不存在patches文件)

  (CPU平台:mt7621     内核版本:4.14.133)
  若目录 “build_dir/target-mipsel_24kc_musl/linux-ramips_mt7621/linux-4.14.133”(本机编译后内核路径)下不存在 patches目录,则无法使用方式一中的方式进行修改内核,可以使用下面方式进行给内核打补丁。

1、新建补丁文件
(1)、新建补丁文件
  quilt new platform/9999-test.patch
  改指令会在 linux-4.14.133/目录下生成 patches/series文件,还未生成补丁文件。

(2)、编辑内核文件
  quilt edit drivers/usb/serial/option.c
  修改时可使用 “Shift+G” 选项来跳转到第n行去修改内容,“Ctrl+X” 退出并“Y”保存修改。
  修改后若直接打开 option.c文件可以看到刚修改的内容。

(3)、生成补丁文件
  quilt refresh
  命令执行完后回生成 “patches/platform/9999-test.patch” 文件,该文件可以直接 cat查看。

(4)、保存补丁文件
  将生成的补丁文件 “patches/platform/9999-test.patch” 拷贝到原始内核代码目录下的
  补丁文件夹 “target/linux/ramips/patches-4.14/” 目录下,该目录存放所有补丁文件。

(5)、验证补丁
  make target/linux/clean && make target/linux/prepare V=99
  执行完成后进入 “build_dir/target-mipsel_24kc_musl/linux-ramips_mt7621/linux-4.14.133”
  目录下查看 option.c文件内容仍然是修改后的文件。该目录下的patches文件夹已被清除。


2、修改旧补丁文件
(1)、移除补丁文件
  将 “target/linux/ramips/patches-4.14/” 目录下的补丁文件 “9999-test.patch” 剪切到其它路径下备份保存(比如 “qsdk/package/tmp/”)。然后执行 “make target/linux/clean && make target/linux/prepare V=99” 更新内核代码。

(2)、使用旧补丁
  cd build_dir/target-mipsel_24kc_musl/linux-ramips_mt7621/linux-4.14.133/
  mkdir patches && mkdir patches/platform
  将备份的 “9999-test.patch” 补丁文件拷贝到 patches/platform/ 目录下
  vi patches/series 写入内容 “platform/9999-test.patch”

(3)、应用旧补丁
  quilt push -a   // 重新应用 “patches/series” 中包含的所有补丁
  quilt top     // 查看最上层的 patch

(4)、编辑旧补丁
  quilt edit xxx/xxx.c

三、新增文件

  上面介绍的补丁方式只能修改文件内容,而无法实现在内核中新增文件,若要在内核中新增一个新的文件,则采用以下方式操作:

例如:在 kernel/drivers/net/usb/ 目录下新增 xxx.c文件,只需将文件添加到下面对于路径即可
  AR9531平台: qsdk/target/linux/ar71xx/files/drivers/net/usb/
  MT7621平台: qsdk/target/linux/ramips/files-4.14/drivers/net/usb/
  (若driver/ 路径下对应目录不存在,手动创建即可)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

内核补丁 — OpenWRT 的相关文章

  • Flex 的远程版本误解了我的规则

    我使用 flex 和 bison 编写了一个小汇编程序 可以在我的机器 ubuntu 10 10 上构建并运行正常 现在其他人正在尝试在 arch linux 上构建它 并且他们安装的 flex 产生了不同的 lex yy c 这是不匹配的
  • 在Linux中使用C/C++获取机器序列号和CPU ID

    在Linux系统中如何获取机器序列号和CPU ID 示例代码受到高度赞赏 Here http lxr linux no linux v2 6 39 arch x86 include asm processor h L173Linux 内核似
  • 使用 terminfo 的终端颜色?

    我正在编写一个 C 类 允许在终端中使用颜色 我希望它适用于每个终端 在支持真彩色 24 位 的终端上打印 在支持它的终端上具有 256 色 6x6x6 其他都是基本的 16 种颜色 我曾经使用 termcap 编写过一次 C 函数 并且我
  • 期待、互动,然后再次期待

    有几篇关于相同内容的帖子 但我仍然无法使我的期望脚本正常工作 我的目的是自动化一切 但保留用户输入的密码 所以脚本有 3 个部分 自动登录 给予用户交互以输入密码 将控制权交还给 Expect 脚本以继续工作 所以我有一个将生成的脚本 其中
  • Linux Shellcode“你好,世界!”

    我有以下可用的 NASM 代码 global start section text start mov eax 0x4 mov ebx 0x1 mov ecx message mov edx 0xF int 0x80 mov eax 0x1
  • python 可以检测它运行在哪个操作系统下吗?

    python 可以检测操作系统 然后为文件系统构建 if else 语句吗 我需要将 Fn 字符串中的 C CobaltRCX 替换为 FileSys 字符串 import os path csv from time import strf
  • bash "&" 不打印 "[1]+ Done "

    我在 bashrc 中调用一个脚本来打印打开终端时收到的新消息数 我希望该调用在访问网络时是非阻塞的 有时需要几秒钟 这意味着我无法使用终端直到完成 但是如果我输入 mailcheck 在我的 bashrc 中 它工作正常 但然后打印一个空
  • 为什么 proc/ID/maps 有多个共享库条目

    我正在查看嵌入式Linux下的proc ID maps 我注意到一些共享库在进程的内存映射中出现了几次 为什么会这样呢 40094000 400d9000 r xp 00000000 b3 09 723 system lib libc so
  • Laravel 内存问题?

    各位 我在 DO 服务器上遇到这样的问题 我已经尝试了一切 整个网站在使用 Homestead 的 Linux 服务器上 100 正常工作 但上传后 它只能工作一次 在重新加载或刷新页面后会多次下降 我尝试增加 apache 服务器的内存
  • 如何防止 CMake 在构建时(而不是安装时)为共享库创建符号链接?

    我正在使用 CMake 在 Linux 上使用 Bullet3 构建一个项目 在构建整个解决方案时 它会构建附加了 SOVERSION 的 Bullet 输出库 并创建一个不带版本的符号链接 对于我的特定场景 我不喜欢这种行为 并且我不想编
  • 在哪里可以找到所有 C 标准库的源代码?

    我正在寻找所有 C 标准库的完整源代码 也就是说 我正在寻找 stdio h stdlib h string h math h 等的源代码 我想看看它们是如何创建的 我认为这取决于不同的平台 但 Linux 或 Windows 都会受到欢迎
  • 如何在 Linux 中显示进程状态(阻塞、非阻塞)

    有没有办法查询 Linux 进程表中进程的状态 以便能够演示执行查询时进程是正在运行还是被阻止 我的目标是从进程或程序的 外部 执行此操作 因为我希望从操作系统进程的角度来理解这一点 但欢迎任何想法 这是Python代码阻塞的过程 impo
  • 如何修复 /usr/bin/env 参数处理?

    我遇到了一个奇怪的问题 usr bin env 我设计了一个简单的脚本来显示问题 该脚本使用 Ruby 编写 但使用 Python 编写的类似脚本也会发生同样的情况 这是脚本 usr bin env ruby p ARGV 还有一个没有 u
  • C/C++ with GCC:静态地将资源文件添加到可执行文件/库

    有人知道如何使用 GCC 将任何资源文件静态编译为可执行文件或共享库文件吗 例如 我想添加永远不会改变的图像文件 如果它们改变了 我无论如何都必须替换该文件 并且不希望它们位于文件系统中 如果这是可能的 我认为这是因为 Visual C f
  • 尝试编译 git 但在 linux 中找不到 libcurl

    我想编译支持 http https 的 git 我有 ls usr include curl curlbuild h curl h curlrules h curlver h easy h mprintf h multi h stdchea
  • CMake:使用其他平台的生成器。如何?

    如何使用 CMake 在 Linux 上生成 Visual Studio 项目文件 你不能 您必须在 Windows 上运行 CMake 才能为 Visual Studio 生成
  • Tk 初始化失败:无显示名称且无 $DISPLAY 环境变量

    我试图从 Ubuntu 终端调用 Centos 服务器上的工具 我收到以下错误 Tk 初始化失败 没有显示名称 也没有 DISPLAY 环境变量 请帮我解决这个问题 提前致谢 连接到你的 CentOS 机器ssh Y其中 每man ssh
  • BlueZ D-Bus C,应用 BLE

    我正在尝试编写一个应用程序来搜索附近的蓝牙设备并与它们通信 我的应用程序将用 C 语言编写 并打算在 Linux 下工作 是否有通过 C 中的 D Bus 使用 BlueZ 的教程或示例 此应用程序的目的是从 BLE 中的文件发送数据 你能
  • mod_perl 无法看到 /tmp 中的文件

    我有一些 mod perl 代码试图访问 tmp 下的文件 但它抛出 没有这样的文件或目录 错误 我在代码中添加了一个 ls al tmp 来查看 Perl 在目录中看到的内容 它只给了我 和 drwxrwxrwt 2 root root
  • gnutls_handshake() 失败:握手失败 GIT

    一切都工作正常 但突然我收到错误 致命 无法访问 https 电子邮件受保护 cdn cgi l email protection name repo name git gnutls handshake 失败 握手失败 我在我的计算机和 E

随机推荐

  • vmware克隆Centos6 网卡无法启动

    原因是以下三处mac地址不一致 1 使用dmesg grep eth 获得eth编号和MAC地址 2 cat etc udev rules d 70 persistent net rules 3 cat etc sysconfig netw
  • 背包问题学习笔记-完全背包

    题意描述 有 N 种物品和一个容量是 V 的背包 每种物品都有无限件可用 第 i 种物品的体积是 vi 价值是 wi 求解将哪些物品装入背包 可使这些物品的总体积不超过背包容量 且总价值最大 输出最大价值 输入格式 第一行两个整数 N V
  • c语言规定简单的变量做实参时它和对应行参,C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是。...

    根据规范载体形式的不同法律 语言规应形可将渊源法律分为 简单间 变量年 平高比国外先进水油耗 一 规划种方编制的各法中 投入于 分析法属产出 根据可供对各地区的研节水究量和水量 规划需水可减我国的节量6通过亿m水措施约少年 0年到2 下7的
  • android MediaPlayer 中的JNI总结

    1 在android media MediaPlayer cpp 中 定义fields静态变量 里面有两个重要的成员变量 context 用来保存创建的mediaplayer post event 用来将JNI层的事件回调给JAVA层 实现
  • 关于使用IAR软件stlink下载stm8程序失败问题

    以前一直使用IAR很正常 这次使用使用stlink下载 stlink莫名其妙的就不能下载了 断电 重启 有时候能用 有时候真的就不能用了提示信息如下图 Failed to initialize communcation with hardw
  • Nginx 配置TCP代理转发

    Nginx 配置TCP代理转发 使用Nginx 新版的 stream方式 实现TCP UDP代理转发 在Nginx安装了 stream 模块后 修改nginx conf 在主配置文件下 nginx conf 增加 stream配置 如 ng
  • VUE 中Element-ui 添加滚动条

  • C/C++:02 1/2. 类和对象

    文章目录 前言 1 类的定义和对象的创建 类的定义 创建对象 访问类成员 使用对象指针 2 类的成员变量和成员函数 成员函数的定义 类体和类外定义成员函数的区别 3 C 类成员的访问权限以及类的封装 成员的访问限定 类的封装 6 C 构造函
  • c++20特性(模块)

    看了c 白皮书之后 发现c 20有了很大的改变 写下一些其中的内容 模块 export指令可以使代码可以被import到另一个模块中 import指令可以使从另一个模块export出来的代码能够被使用 import的实体不会被隐式的再exp
  • 支付平台--网联详解

    支付清算体系是一个国家的金融基础设施 或说是公共服务 而提供这一服务的机构是银联 而现在是银联和网联 现在我国大体维持 结算 清算 二级制的支付体系 通俗的说 银行与商户 消费者之间为结算关系 而银行之间构成清算关系 这两个层次完成后 支付
  • 训练大模型时显存占用影响因素总结(以starcoderplus 15.5B为例)

    背景 实验室计算资源紧张 单卡最大显存是RTX 3090 24G 但是又要用大模型 指参数量达到10B 做实验 模型文件获取 大约60B https huggingface co bigcode starcoderplus tree mai
  • 2. 2019年《斯坦福大学CS330多任务和元学习》第2讲:多任务和元学习基础【中文字幕】

    2019年 斯坦福大学CS330多任务和元学习 第2讲 多任务和元学习基础 中文字幕 https www bilibili com video BV17a4y1J7eG 斯坦福大学切尔西 芬恩 Chelsea Finn 助理教授 http
  • 微星b560m mortar wifi 开机二检(开机灭了1秒后自动重启)

    微星b560m mortar wifi 开机二检 开机灭了1秒后自动重启 1 起因 为了照顾旧CPU 还想把内存扩容到64GB 就选择了DDR4的4条插槽的 B560M主板 都弄好之后 开机发现在按下电源键之后 通电自检后断电了大概2秒左右
  • ESLint(JavaScript代码校验)

    概要 关于JavaScript的代码校验 2016年5月以来大家一直使用jswatchdog 2018年4月以后 从运维的角度上来说 我们更推荐使用ESLint 关于ESLint的设置 我们更推荐有利于kintone自定义开发的eslint
  • java报错信息--Spring篇【1】

    报错信息一 时间 学习spring的aop容器 xml形式配置aop功能 起因 测试xml形式配置好的aop功能 经过 在运行junit测试时出现以下报错信息 警告 Exception encountered during context
  • python 10行代码生成词云图片(基础词云、形状词云)

    一 词云简介 词云 也称为文本云或标签云 在词云图片中 关键词在文本中出现的次数越多 则表示该词越重要 其在词云中所占面积区域也越大 出现次数越少 所占面积越小 词云可任意更换背景为白色的图形以改变词云形状 二 WordCloud原理简介
  • 2003 - Can't connect to MySQL server on解决方法

    前提 已经授权root开启远程访问 这种问题非常容易确定 就是无法连接 原因入下 一 90 的问题是因为防火墙屏蔽 比如我自己在Windows上安装了mysql5 6 用Navicat远程连接提示这个错误 以Windows防火墙为例 同理可
  • Ubuntu中安装PBC库

    1 下载GNU 首先要安装GNU GNU是一个开源的数学运算库 它可以用于任意精度的数学运算 包括有符号整数 有理数和浮点数 它本身并没有精度限制 只取决于机器的硬件情况 给上连接地址 The GNU MP Bignum Library g
  • 高CPU问题----eth0: NIC Link is Down网卡故障导致高CPU

    一 现象 cpu异常飙升 这台机器的eth0网卡在2018年12月的时候就出现问题 二 分析发现 1 dmesg Thu Mar 14 01 02 00 2019 ixgbe 0000 02 00 0 eth0 NIC Link is Do
  • 内核补丁 — OpenWRT

    目前本人遇到过两种情况的内核补丁 一种是 build dri目录中内核文件夹下存在 patches目录 另外一种是内核目录下不存在 patches目录的 第一种情况可以直接在内核目录下使用 quilt命令进行新建和保存补丁 而第二种情况无法