• 正文
    • 安裝quilt工具
    • 使用quilt進(jìn)行制作自定義補(bǔ)丁
    • 結(jié)語
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

openwrt開發(fā)使用-制作patch補(bǔ)丁

2023/03/13
31
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

今天分享的內(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)注我,與我一起同行。

相關(guān)推薦

登錄即可解鎖
  • 海量技術(shù)文章
  • 設(shè)計(jì)資源下載
  • 產(chǎn)業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄

一個(gè)程序員,喜歡寫文章,還喜歡打籃球,也喜歡吉他鋼琴的駁雜之人。日常更新自己,分享包括但不限于C/C++、嵌入式、物聯(lián)網(wǎng)、Linux等編程學(xué)習(xí)筆記,同時(shí),公眾號(hào)內(nèi)包含大量的學(xué)習(xí)資源。歡迎關(guān)注,一同交流學(xué)習(xí),共同進(jìn)步!