近期需要把 wifi 無線網絡功能(RTL8822CS 模塊)移植到 iTOP-3399 開發板,經過一段時間研究, 調試,終于成功的將 wifi 功能移植到開發板上面。
移植的環境:
1. iTOP-3399 開發板+ RTL8822CS 模塊
2. Android 7.0
3. 搭建好編譯環境的 ubuntu16.04 64Bit 開發環境
移植步驟
80.3.1 增加設備樹節點
在 /home/topeet/rk3399_7.1_industry/kernel/arch/arm64/boot/dts/rockchip/rk3399-topeet.dtsi 設 備 樹 中 添加 WiFi 節點,如下圖所示:
wifi_chip_type 屬性表示 WiFi 器件的類型為 rtl8822cs。
查找 sdio0 節點,注釋掉下面的語句,注釋掉這句是因為注冊 sdio 設備時,會注冊不上。
80.3.2 修改內核驅動
修改驅動的思路:
1) 將驅動文件拷貝內核中
2) 在內核中加載上添加的驅動
3) 我們提前了解下配置 wifi 固件一般是在源碼
drivers/net/wireless/rockchip_wlan/rkwifi/rk_wifi_config.c,wifi 模塊驅動在源碼 net/rfkill/rfkill-wlan.c
第一步,我們拷貝光盤資料下“
iTOP-3399 開發板\02_iTOP-3399 開發資料匯總(不含光盤內容)\13_
嵌入式 Linux 開發指南(RK3399)手冊配套資料\6.Android 底層驅動\Android7wifi 移植\原廠 wifi 驅動” RTL8822CS_WiFi_linux_v5.12.1.1-0.20210125.tar.gz,此驅動是 wifi 模組的廠家提供的,我們將其放入內核目 錄 drivers/net/wireless/rockchip_wlan/下,并修改文件夾名稱為 rtl8822cs,如下圖所示:
接著修改以下文件:
(1)修改 drivers/net/wireless/rockchip_wlan/Makefile 文件,添加以下內容:
obj-$(CONFIG_RTL8822CS) += rtl8822cs/
(2)修改 drivers/net/wireless/rockchip_wlan/Kconfig 文件,添加
source "drivers/net/wireless/rockchip_wlan/rtl8822cs/Kconfig"
(3)修改 drivers/net/wireless/rockchip_wlan/Kconfig/rtl8822cs 下的 Makefile 文件
將文件中的 CONFIG_PLATFORM_I386_PC 的值修改為 n 將文件中的 ONFIG_PLATFORM_ARM_RK3188 的值修改為 y
如下圖所示:
將如下圖所示所示的修改為 MODULE_NAME := 8822cs
如下圖所示,可以打開或關閉 debug 信息。
(4)修改 drivers/net/wireless/rockchip_wlan/Kconfig/rtl8822cs 下的 Kconfig 文件
將第一行的 RTL8822BS 修改為 RTL8822CS,這里是廠家的源碼寫錯了,不改正的話不會編譯到這個源碼目錄。
(5)然后在內核目錄下(也就是 kernel 目錄下)輸入以下命令配置加載驅動。
(6)輸入以下命令,將保存好的.config 文件復制替換默認的內核配置 defconfig 文件
cp .config arch/arm64/configs/rockchip_defconfig
(7)然后修改/home/topeet/rk3399_7.1_industry/kernel/net/rfkill/rfkill-wlan.c 文件,添加如下所示內容。
} else if (strcmp(wifi_chip_type_string, "rtl8822cs") == 0) {
type = WIFI_RTL8822CS;
(
8)然后修改/home/topeet/rk3399_7.1_industry/kernel/include/linux/rfkill-wlan.h 文件,添加如下內容, 如下圖所示: WIFI_RTL_8822CS
80.3.3 修改 HAl 層
(1)我們修改/home/topeet/rk3399_7.1_industry/hardware/libhardware_legacy/wifi/rk_wifi_ctrl.c 文件, 添加如下所示代碼,如下圖所示:
{"RTL8822CS",
"024c:c822"},
(2)將 strcpy(recoginze_wifi_chip, "APXXX");注釋掉,修改為 strcpy(recoginze_wifi_chip, "RTL8822CS"); strcpy(recoginze_wifi_chip, "RTL8822CS")
(3)修改/home/topeet/rk3399_7.1_industry/hardware/libhardware_legacy/wifi/wifi.c 文件,添加代碼 #define RTL8822CS_DRIVER_MODULE_PATH "/system/lib/modules/8822cs.ko"
添加代碼,如下圖所示。
#define RTL8822CS_DRIVER_MODULE_NAME
"8822cs"
添加代碼,如下圖所示:
{"RTL8822CS", RTL8822CS_DRIVER_MODULE_NAME, UNKKOWN_DRIVER_MODULE_ARG},
80.3.4APP 層
Android 桌面“設置”APP 里面連接 WiFi 的程序在源碼:
packages/apps/Settings/src/com/android/settings/wifi/目錄下。此部分不需要修改。
經過上面的修改,然后重新編譯 Android7 源碼,燒寫鏡像后,便可以進行調試。
-
開發板
+關注
關注
25文章
5082瀏覽量
97709
發布評論請先 登錄
相關推薦
評論