今天分享的內(nèi)容是openwrt里面使用patch文件進(jìn)行自己定制化開發(fā)。
歡迎關(guān)注微信公眾號(hào):羽林君,或者添加作者個(gè)人微信:become_me
安裝quilt工具
quilt命令具有生成補(bǔ)丁和應(yīng)用補(bǔ)丁的功能,但它的優(yōu)勢是還可以作為管理補(bǔ)丁的工具。一個(gè)比較大的項(xiàng)目可能由不同開發(fā)者共同維護(hù),其中很多修改都以補(bǔ)丁的方式提供,例如openwrt,這些補(bǔ)丁可能存在依賴關(guān)系。quilt工具在源代碼目錄中生成一個(gè)patches/目錄,里面存放所有可用的補(bǔ)丁,記錄了所有patches的先后順序,并提供了一系列操作這些補(bǔ)丁的命令。
quilt以棧的形式管理補(bǔ)丁,最先打上的補(bǔ)丁位于棧底,最后打上的補(bǔ)丁位于棧頂(top)。打patch的動(dòng)作稱為push,取消補(bǔ)丁的動(dòng)作稱為pop。就如下圖所示,項(xiàng)目中有5個(gè)patch,最新的patch為e.patch,所以quilt將這個(gè)patch放在棧頂,通過維護(hù)這樣一個(gè)結(jié)構(gòu),quilt可以繼續(xù)打新patch或按順序回退patch。
安裝
sudo?apt-get?install?quilt
這是quilt工具的介紹文檔,更詳細(xì)內(nèi)容可以看此文:http://www.shakthimaan.com/downloads/glv/quilt-tutorial/quilt-doc.pdf
修改quilt.quiltrc
為了使 quilt 創(chuàng)建的補(bǔ)丁文件適合 Openwrt,需要給 quilt 創(chuàng)建一個(gè)配置文件/etc/quilt.quiltrc
,vi /etc/quilt.quiltrc 其內(nèi)容如下:
QUILT_DIFF_ARGS="--no-timestamps?--no-index?-p?ab?--color=auto"
QUILT_REFRESH_ARGS="--no-timestamps?--no-index?-p?ab"
QUILT_PATCH_OPTS="--unified"
QUILT_DIFF_OPTS="-p"
EDITOR="vi"
使用quilt進(jìn)行制作自定義補(bǔ)丁
首先編譯需要修改的包,例如:make package/kernel/mtxx/compile ? V=s ,這個(gè)時(shí)候就會(huì)單獨(dú)編譯mtxx包,編譯生成的文件在build_dir
目錄,我們?nèi)ゾ幾g的目錄去進(jìn)行我們的修改。
應(yīng)用已經(jīng)存在的補(bǔ)丁
進(jìn)入之后執(zhí)行quilt push -a
創(chuàng)建新的補(bǔ)丁文件
quilt new 001-support-add-c hannel-mt76.patch
示例如下:
注 :要是不知道patch增加數(shù)字id可以使用這個(gè)進(jìn)行排序確認(rèn)find -name *patch| awk -F/ '{print $3}' | sort -n
尋找并排序
編輯要修改的源文件
quilt edit mac80211.c
原有信道基礎(chǔ)上增加信道:
?CHAN2G(13,?2472),
?CHAN2G(14,?2484),
?CHAN2G(15,?2485),?/*?Channel?15?*/
?CHAN2G(16,?2512),?/*?Channel?16?*/
查看修改后的變化
quilt diff
把變化應(yīng)用的補(bǔ)丁文件
quilt refresh
把生成的patch文件復(fù)制到package包的patches目錄
示例如下:
cp?/home/lyn/Documents/lyn_work/openwrt/build_dir/target-mipsel_24kc_musl/linux-ramips_mt7621/mt76-2022-11-12-4bf26073/patches/*patch?/home/lyn/Documents/lyn_work/openwrt/package/kernel/mt76/patches
package源目錄要是沒有patch文件話,建立一個(gè)patches文件夾
make package/kernel/mtxx/update V=s
(增量更新) 或者 make package/kernel/mtxx/compile V=s
(重新編譯)進(jìn)行編譯
編譯完成后去build_dir查看編譯的原始文件,這時(shí)候看到patch打進(jìn)來了
這個(gè)時(shí)候可以用編譯好的可執(zhí)行文件替換到路由器中進(jìn)行測試,看是否是自己功能是否達(dá)到。
結(jié)語
這就是我自己在openwrt制作patch補(bǔ)丁使用分享。如果大家有更好的想法和需求,也歡迎大家加我好友交流分享哈。
作者:良知猶存,白天努力工作,晚上原創(chuàng)公號(hào)號(hào)主。公眾號(hào)內(nèi)容除了技術(shù)還有些人生感悟,一個(gè)認(rèn)真輸出內(nèi)容的職場老司機(jī),也是一個(gè)技術(shù)之外豐富生活的人,攝影、音樂 and 籃球。關(guān)注我,與我一起同行。