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
留言
張貼留言