在 TP-Link wdr4300 對 OpenWrt/LEDE 的 ath9k driver 打 patch

1. 目標

透過 OpenWrt/LEDE 的 quilt 將 ath9k 打上 patch,把 ath9k/xmit.c、ath9k/recv.c、net/mac80211/tx.c 特定的 function static 修飾字消除,以利 ftrace / perf 能夠順利取得 symbol 進行追蹤。

2. 方法

a. 找出 ath9k 在 OpenWrt/LEDE 正確的 package
b. 使用 quilt 對 ath9k 以及 mac80211 打 patch
c. 重新編譯後替換 ath9k.ko / 或重新刷機

3. 實做

a. 找出 ath9k 在 OpenWrt/LEDE 正確的 package

一般來說,kernel code 應該是在 target/linux/ 裡面,但因為 ath9k 有 backport 的問題,所以是使用 package/kernel/mac80211/ 處理。

首先先準備好 quilt 的設定檔,將設定檔放到家目錄下:

準備好設定檔後,回到 OpenWrt/LEDE 目錄下,將 code 準備好:

b. 使用 quilt 對 ath9k 以及 mac80211 打 patch

在 OpenWrt/LEDE 的 package 是使用 quilt 這個工具管理 patches,首先我們要先將所有已有的 patches apply 到 code 上:

接著使用 new 建立一個新的 patch:

這個 patch 的名稱應該要:

  1. 以數字開頭,接著一個分號以及這個 patch 的用途的說明
  2. 選擇的數字應該要比所有已經打上的 patch 還要高,可以用 quilt series 查看所有的 patches 名稱
  3. 用途說明應該要短而精鍊

當 patch 建立好後,必須要把要修改的檔案與這個 patch 做關聯,修正才會被納入 patch 當中,可以使用以下兩種方式:

修正完所有的檔案後,可以用 quilt diff 檢查:

接著更新修正檔:

回到原本 OpenWrt/LEDE 的目錄:

c. 重新編譯後替換/刷機

回到 OpenWrt/LEDE 目錄後,將 patch file 更新到 buildroot:

重新編譯:

將編譯好的 ath9k.ko 替換到 OpenWrt/LEDE 上,可以用 find 找出 .ko 檔:

重開 wdr4300 後就能看到修正結果。




如果你覺得這篇文章不錯,歡迎打賞 IOTA:RFHEIVXVIZWJFXTZORZZRCMHZF9PSGFUFWAAKXTFNZE9JQUY9HFQREJYYSPSXDRLECKXCAQQDOMSMYJYDKPCKWXBKD

或是點選下方圖片贊助我一杯咖啡:

Leave a reply:

Your email address will not be published.

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料