openwrt 创建补丁

quilt介绍

openwrt使用quilt工具对patch进行管理,quilt其实就是一系列shell脚本组成的一个工具。

安装quilt

openwrt好像在host tools里面有quilt,不过也可以通过apt安装

sudo apt install quilt -y

配置quilt

quilt使用前需要做一些配置,它的配置文件一般放~/.quiltrc或者/etc/quilt.quiltrc,你可以通过直接vim打开/usr/bin/quilt来一窥究竟。一般配置如下:

cat > ~/.quiltrc <<EOF
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

前面几个都是对脚本里面使用diffpatch这些工具时,所使用的参数进行配置,没啥好关注的,主要是EDITOR这项配置为你习惯的编辑器即可。

添加一个新的补丁

以我近期用到的uqmi包为例,增加一个补丁,先要对它prepare。注意这里uqmi包是还未修改过的,补丁将来就是往它上面打。

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

熟悉openwrt的都知道,这是清理包,并且将包的源码解压到build_dir里面去,做编译前的准备工作。如果这个包是openwrt里面的host包,即编译出来的东西是给你PC用的,那么命令就是:

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

然后进到包对应的准备好的源码目录:

cd build_dir/target-arm_cortex-a7+neon-vfpv4_musl-1.1.16_eabi/uqmi-2016-12-19-8ceeab69/

此时的源码是最原始的,可能它已经存在一些补丁了,先把已存在的补丁打上去,

quilt push -a

查看已有补丁:

quilt series

这里我的uqmi还没补丁,然后再在此基础上创建你自己的补丁,命令如下:

quilt new 000-uqmi_test_pch.patch

补丁名字有规定,因为如果包里面包含多个补丁,打补丁需要按照一定的顺序来的。

  • 补丁名字以数字开头,然后通过-符号链接一个简短的描述,数字和横杆-是重点

  • 选择的这个开头的数字必须高于已有补丁的开头数字,可以通过quilt series来查看已有补丁的

其实数字就是打补丁的顺序,因为打补丁是通过脚本来完成的,先对补丁文件排序,再逐个打上去。

创建空补丁后,接下来要把需要修改的文件与之关联。可以通过quilt add xxx来做这件事,然后你就可以编辑你要改的文件,也可以直接用quilt edit xx来添加并打开要改的文件:

quilt edit xxx

按照这种方法,把这次生成补丁需要修改的文件都修改后,使用quilt diff预览一下补丁

quilt diff

觉得没问题后,用quilt refresh将更新到补丁文件000-uqmi_test_pch.patch

quilt refresh

此时这个补丁就会在你的包的编译目录下的patchs目录中生成了。

回到openwrt顶层目录,更新一下包

make package/uqmi/update V=s

最后重新编译这个包

make package/uqmi/{clean,compile} package/index V=s

如果编译出问题,如何处参考:Edit an existing patch

posted @ 2020-09-03 16:36  thammer  阅读(1223)  评论(0编辑  收藏  举报