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
前面几个都是对脚本里面使用diff
,patch
这些工具时,所使用的参数进行配置,没啥好关注的,主要是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
回到openwrt顶层目录,更新一下包
make package/uqmi/update V=s
最后重新编译这个包
make package/uqmi/{clean,compile} package/index V=s
如果编译出问题,如何处参考:Edit an existing patch。