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。
