内核补丁 — OpenWRT

  目前本人遇到过两种情况的内核补丁,一种是 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/ 路径下对应目录不存在,手动创建即可)

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值