rtw89-usb: first initial - how to patch from email patches.

 如 Linux kernel driver 上的 drivers/net/wireless/realtek/rtw88 是 Realtek wifi5 11ac driver. 

 rtw89 是 Realtek wifi6 11ax driver. 目前正 upstream 提交審核中, 如下.

https://patchwork.kernel.org/project/linux-wireless/cover/20210618064625.14131-1-pkshih@realtek.com/


這邊介紹如何將 email patch 抓下來. 


1. 譬如我們可以先在 github 開一個新的 repository : rtw89-usb

    https://github.com/neojou/rtw89-usb


2. 把 email patch 抓下來存在一個 patch 檔

 


3. 在 rtw89-usb 的目錄下

    git apply --check <patch file>

    會說要 patch 的 drivers/net/wireless/realtek/ 下的 Kconfig 和 Makefile 不存在. 

    我們可以 在 rtw89-usb 下, 建立 目錄 drivers/net/wireless/realtek/, 

    並從 linux kernel source 將 Kconfig 和 Makefile copy 到這底下. 

    (我實驗是用 linux kernel v5.9 )

    https://github.com/torvalds/linux/tree/master/drivers/net/wireless/realtek

    check 沒出現問題後, 就可以用

    git apply <patch file>

    將 email patch 解出來, 這時候可以看到在 drivers/net/wireless/realtek/rtw89 下有相關的檔案,

 將這些檔案直接移到 rtw89-usb/ 目錄下.


4. Makefile

    因為原本的Makefile 是包在 linux kernel 底下編譯的, 所以稍作修改讓這driver 可以單獨編譯

   https://github.com/neojou/rtw89-usb/blob/main/Makefile 


5. definition changes

    編譯時會發現因為 linux kernel 版本不同, 有些定義找不到,

    先將這些定義寫在 core.c 中

    https://github.com/neojou/rtw89-usb/blob/main/core.c


/*
ieee80211.h changes
* defined here first as temporary solustions
*/
#define IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_0 0x00
#define IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_1 0x08
#define IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_2 0x10
#define IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_3 0x18
#define IEEE80211_HE_MAC_CAP4_AMSDU_IN_AMPDU 0x40
#define IEEE80211_HE_PHY_CAP3_RX_PARTIAL_BW_SU_IN_20MHZ_MU 0x40
#define IEEE80211_HE_PHY_CAP6_TRIG_SU_BEAMFORMING_FB 0x04
#define IEEE80211_HE_PHY_CAP7_POWER_BOOST_FACTOR_SUPP 0x02

6. 這樣就可以編譯出 pci driver ko file 了

    (因為我是用 clang, 所以編譯指令是: make CC=clang -j8 )


後續 USB porting



留言

熱門文章