0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Tina Linux Wi-Fi開發(fā)指南

嵌入式Linux那些事 ? 來源:嵌入式Linux那些事 ? 作者:嵌入式Linux那些事 ? 2023-03-06 11:07 ? 次閱讀

Tina Linux Wi-Fi 開發(fā)指南

1 前言

1.1 文檔簡介

介紹Allwinner 平臺上Wi-Fi 驅(qū)動移植,介紹Tina Wi-Fi 管理框架,包括Station,Ap 以及Wi-Fi 常見問題。

1.2 目標(biāo)讀者

適用Tina 平臺的廣大客戶和對Tina Wi-Fi 感興趣的同事。

1.3 適用范圍

Allwinner 軟件平臺Tina v3.0 版本及以上。 Allwinner 硬件平臺R 系列(R6,R11,R16,R18,R30,R40,R328,R331, R329,R818,R528…)。 Allwinner 硬件平臺MR 系列(MR133, MR813…)。 Allwinner 硬件平臺H 系列(H133…)。 Allwinner 硬件平臺V 系列(V853…)。

2 Wi-Fi 簡介

2.1 Wi-Fi 工作的幾種模式

目前Tina 平臺上的Wi-Fi 一般可處于3 種工作模式,分別是STATION,AP,MONITOR。 ? STATION:連接無線網(wǎng)絡(luò)的終端,大部分無線網(wǎng)卡默認(rèn)都處于該模式,也是常用的一種模式。 ? AP:無線接入點(diǎn),常稱熱點(diǎn),比如路由器功能。 ? MONITOR:也稱為混雜設(shè)備監(jiān)聽模式,所有數(shù)據(jù)包無過濾傳輸?shù)街鳈C(jī)。

2.2 Tina Wi-Fi 軟件結(jié)構(gòu)

Tina_Linux_Wi-Fi_Development_Guide-image-20230103102646913

?

圖2-1: Tina 軟件結(jié)構(gòu)圖

?

? wifimanager-v2.0:包含了wifimanager-v1.0 的功能(用于STATION 模式,提供Wi-Fi連接掃描等功能)外,還集成了softap(啟動AP 功能)和smartlink(多種配網(wǎng)模式)的功能,做到了一個(gè)應(yīng)用集成了多種wifi 功能,方便客戶使用和管理。 ? wpa_supplicant: 開源的無線網(wǎng)絡(luò)配置工具,主要用來支持WEP,WPA/WPA2 和WAPI 無線協(xié)議和加密認(rèn)證的,實(shí)際上的工作內(nèi)容是通過socket 與驅(qū)動交互上報(bào)數(shù)據(jù)給用戶。 ? hostapd: 是一個(gè)用戶態(tài)用于AP 和認(rèn)證服務(wù)器的守護(hù)進(jìn)程。 ? monitor: Wi-Fi 處于混雜設(shè)備監(jiān)聽模式的處理應(yīng)用。

2.3 Wi-Fi 常用命令介紹

2.3.1 station 模式

詳情請看Tina_linux_wifimanger2.0_ 開發(fā)指南。

執(zhí)行下面的命令前請確保wifi_deamon后臺進(jìn)程已啟動,若沒有啟動請先啟動wifi_deamon后臺進(jìn)程。

wifi -o sta 以sta模式打開wifimanager

wifi -s 掃描周圍網(wǎng)絡(luò)

wifi -c ssid [passwd] 以加密或非加密的方式連接指定網(wǎng)絡(luò)

wifi -d 斷開已經(jīng)連接的網(wǎng)絡(luò)

wifi -l [all] 列出保存的網(wǎng)絡(luò)

wifi -a [enable/disable] 重連斷開的網(wǎng)絡(luò)

wifi -r [ssid/all] 移除保存的指定網(wǎng)絡(luò)注:

ssid 網(wǎng)絡(luò)名

passwd 秘鑰

2.3.2 ap 模式

執(zhí)行下面的命令前請確保wifi_deamon后臺進(jìn)程已啟動,若沒有啟動請先啟動wifi_deamon后臺進(jìn)程。

wifi -o ap [ssid] [passwd] 以ap模式打開wifimanager

wifi -l 列出連接到ap熱點(diǎn)的sta信息注:

ssid 網(wǎng)絡(luò)名

passwd 秘鑰

ap模式和station模式在不同模組上不一定能共存,詳情看第5節(jié)介紹。

2.3.3 monitor 模式

執(zhí)行下面的命令前請確保wifi_deamon后臺進(jìn)程已啟動,若沒有啟動請先啟動wifi_deamon后臺進(jìn)程。

wifi -o monitor 以monitor模式打開wifimanager注:

沒有

2.3.4 額外功能

執(zhí)行下面的命令前請確保wifi_deamon后臺進(jìn)程已啟動,若沒有啟動請先啟動wifi_deamon后臺進(jìn)程。

wifi -f 關(guān)閉wifimanager

wifi -p [softap/ble/xconfig/soundwave] 使用softap/ble/xconfig/soundwave進(jìn)行配網(wǎng)

wifi -D [error/warn/info/debug/dump/exce] 設(shè)置打印等級

wifi -g 獲取mac地址信息

wifi -m [macaddr] 設(shè)置mac地址

wifi -h 打印wifimanager使用說明注:

配網(wǎng)模式并不是所有模組都支持,要看具體的模組。

mac地址設(shè)置只能進(jìn)行臨時(shí)性設(shè)置。

3 Wi-Fi 模組移植

Tina_Linux_Wi-Fi_Development_Guide-image-20230103102835768

?

圖3-1: 主控與Wi-Fi 硬件連接簡圖

?

Wi-Fi 模組工作的條件,如上圖,需要滿足以下幾個(gè)條件: ? 供電:一般有兩路供電,其中VCC-Wi-Fi 為主電源,VCCIO-Wi-Fi 為IO 上拉電源。 ? 使能:要能正常工作,需要WL-REG-ON 給高電平。 ? SDIO:與SOC 的通信有通過USB,SDIO 等,這里以SDIO 為例,其中SDIO 0~3 為SDIO 的4 條數(shù)據(jù)線。 ? 喚醒主控:當(dāng)系統(tǒng)休眠時(shí),Wi-Fi 模組可通過WL-WAKE-AP 通過中斷的方式喚醒主控,有些模組也通過該引腳來作為主控接收數(shù)據(jù)的中斷。 ? 24/26MHz 時(shí)鐘信號. ? 32.768KHz 信號:根據(jù)模組而定,有些模組內(nèi)部通過(5)中的輸入的clk 進(jìn)行分頻得到,有些需要外部單獨(dú)輸入該信號。

對于Wi-Fi 模組移植,重點(diǎn)圍繞以上的幾個(gè)條件進(jìn)行開展,對于以上幾個(gè)工作條件allwinner已經(jīng)提供了對應(yīng)的driver,根據(jù)總線設(shè)備驅(qū)動模型,只需要根據(jù)各個(gè)平

臺配置device 即可,allwinner device 除了可以可以通過dts 外(linux-3.4 內(nèi)核無dts),還可通過sys_config.fex的方式,sys_config.fex 的優(yōu)先級高于dts,一般情

況下,直接配置sys_config.fex 即可。

說明:

- Tina3.5.0及之前sys_config.fex的路徑:tina/target/allwinner/xxx(cowbell_perf1)/configs/ - Tina3.5.1及之后sys_config.fex的路徑:tina/device/config/chips/xxx(r328)/configs/xxx(perf1)/ - Tina3.5.0及之前dts的路徑:tina/lichee/linux-xxx/arch/arm/boot/dts/ - Tina3.5.1及之后dts的路徑:tina/device/config/chips/xxx(r328)/configs/xxx(perf1)/board.dts

linux 3.4 device(sys_config.fex 配置)

[rf_para] module_num = 10 /*用于區(qū)分模組型號:默認(rèn)8~10*/ module_power1 = "axp22_dldo1" /*power1使用的電源樹:dld01*/ module_power1_vol = 3300000 /*power1使用的電源樹電壓設(shè)置為3.3v*/ module_power2 = "axp22_dldo2" /*power2使用的電源樹:dld02*/ module_power2_vol = 3300000 /*power2使用的電源樹電壓設(shè)置為3.3v*/ module_power3 = "axp22_aldo3" /*power3使用的電源樹:dld03*/ module_power3_vol = 3300000 /*power3使用的電源樹電壓設(shè)置為3.3v*/ /*以上,是使用pmu供電的配置,如果直接供電,可省略*/ power_switch = chip_en = /*電源使能,備用于使用gpio高低點(diǎn)平打開電源*/ lpo_use_apclk = "losc_out" /*32khz的時(shí)鐘使能*/ [wifi_para] wifi_used = 1 /*是否使用Wi-Fi*/ wifi_sdc_id = 1 /*Wi-Fi所使用的sdio 卡號*/ wl_reg_on = port:PL06<1><0> /*使能腳所使用的gpio*/ wl_host_wake = port:PL07<4><0> /*喚醒主控所使用的gpio*/ [mmc1_para] sdc_used = 1 sdc_detmode = 4 sdc_buswidth = 4 sdc_clk = port:PG00<2><1><1> /*sdio所使用的gpio號*/ sdc_cmd = port:PG01<2><1><1> sdc_d0 = port:PG02<2><1><1> sdc_d1 = port:PG03<2><1><1> sdc_d2 = port:PG04<2><1><1> sdc_d3 = port:PG05<2><1><1> sdc_det = sdc_use_wp = 0 sdc_wp = sdc_isio = 1 sdc_regulator = "none"

linux 3.4 driver 路徑,詳情請參考以下代碼路徑

tina/lichee/linux-3.4/drivers/misc/rf_pm

linux3.4 以上,device(sys_config.fex 配置)

[sdc1] sdc1_used = 1 bus-width = 4 sdc1_clk = port:PG00<2><1><3> sdc1_cmd = port:PG01<2><1><3> sdc1_d0 = port:PG02<2><1><3> sdc1_d1 = port:PG03<2><1><3> sdc1_d2 = port:PG04<2><1><3> sdc1_d3 = port:PG05<2><1><3> sd-uhs-sdr50 = sd-uhs-ddr50 = sd-uhs-sdr104 = cap-sdio-irq = keep-power-in-suspend = ignore-pm-notify = max-frequency = 150000000 /*sdio所使用的最大掃卡頻率*/ mix-frequency = 150000000 [wlan] wlan_used = 1 compatible = "allwinner,sunxi-wlan" clocks = "losc_out" wlan_power_num = 2 /*使用pmu供電,所使用的電源數(shù)量*/ wlan_power1 = "vcc-wifi1" /*使用pmu供電,使用的power1標(biāo)示*/ wlan_power2 = "vcc-wifi2" /*使用pmu供電,使用的power2標(biāo)示*/ wlan_io_regulator = "vcc-io-wifi" /*使用pmu供電,使用的io標(biāo)示*/ /*上面4行表示使用pmu供電的配置項(xiàng),對應(yīng)后面的regulator選項(xiàng)。如果不使用pmu供電,可忽略。*/ wlan_busnum = 1 wlan_regon = port:PE06<1><1><1><0> wlan_hostwake = port:PE05<6> [regulator0] compatible = "axp221s-regulator" regulator_count = 20 ...... regulator2 = "axp221s_dcdc2 none vdd-cpua" regulator3 = "axp221s_dcdc3 none vdd-sys vdd-gpu" regulator4 = "axp221s_dcdc4 none" regulator5 = "axp221s_dcdc5 none vcc-dram" regulator6 = "axp221s_rtc none vcc-rtc" regulator7 = "axp221s_aldo1 none vcc-25 csi-avdd" regulator8 = "axp221s_aldo2 none vcc-ephy0" regulator9 = "axp221s_aldo3 none avcc vcc-pll" regulator10 = "axp221s_dldo1 none vcc-io-wifi vcc-pg " /*io power 掛在dld01上*/ regulator11 = "axp221s_dldo2 none vcc-wifi1" /*power1 掛在dld02上*/ regulator12 = "axp221s_dldo3 none vcc-wifi2" /*power2 掛在dld03上*/ regulator13 = "axp221s_dldo4 none vdd-sata-25 vcc-pf" regulator14 = "axp221s_eldo1 none vcc-pe csi-iovcc"

linux 3.4 以上driver,詳情請參考以下代碼路徑

tina/lichee/linux-XXX/drivers/misc/sunxi-rf

3.1 模組移植的步驟

下面總結(jié)一款新模組移植到Tina 平臺的步驟。

3.1.1 修改模組廠提供的Wi-Fi driver

模組廠提供過來的driver,適配到Tina 平臺,主要修改的地方是調(diào)用Tina 平臺提供的有上下電,掃卡函數(shù),修改firmware 的download 路徑,配置Kconfig 和

Makefile 等。

下面先說明Tina 平臺提供給driver 的函數(shù),其中l(wèi)inux 3.4 跟其他內(nèi)核稍微有些區(qū)別。

linux 3.4

#include #include /* *函數(shù)功能: sdio掃卡 *參數(shù)id: 卡號,(sdio 0 or 1 ...) *參數(shù)insert: 0,卡插入,進(jìn)行掃卡; 1,卡拔出。 *返回值:無 */ extern void sunxi_mci_rescan_card(unsigned id, unsigned insert); /* *函數(shù)功能: Wi-Fi模組上電,使能。 *參數(shù)on: 0,上電;1,掉電。 *返回值: 無 */ extern void wifi_pm_power(int on);

linux 3.4 以上

#include #include #include /* *函數(shù)功能: 獲取所使用的sdio卡號,對應(yīng)sysconfig.fex中的wlan_busnum *返回值: sdio 卡號 */ extern int sunxi_wlan_get_bus_index(void); /* *函數(shù)功能: sdio 掃卡 *參數(shù)id: 卡號,(sdio 0 or 1 ...) *返回值: 無 */ extern void sunxi_mmc_rescan_card(unsigned ids); /* *函數(shù)功能: Wi-Fi模組上電,使能。 *參數(shù)on: 0,上電;1,掉電。 *返回值: 無 */ extern void sunxi_wlan_set_power(bool on); /* *函數(shù)功能:獲取gpio wlan hostwake pin的申請的中斷號 *參數(shù): void *返回值:irq number *說明:部分模組,主控接收數(shù)據(jù)通過hostwake pin產(chǎn)生中斷來觸發(fā), * 所以需要主控這邊提供獲取到中斷號。 */ extern int sunxi_wlan_get_oob_irq(void); /* *函數(shù)功能:獲取host wake pin設(shè)置中斷的標(biāo)志位 *參數(shù): void *返回值: irq flag */ extern int sunxi_wlan_get_oob_irq_flags(void);

首先是將Wi-Fi driver 放到linux-4.9/drivers/net/wireless,填充對應(yīng)的上電,掃卡等函數(shù)。

linux 3.4 的驅(qū)動請參考:

esp8089模組:

tina/lichee/linux-3.4/drivers/net/wireless/esp8089/sdio_stub.c

xr819模組:

tina/lichee/linux-3.4/drivers/net/wireless/xradio/wlan/platform.c

linux 3.4 以上的驅(qū)動請參考:

tina/lichee/linux-4.9/drivers/net/wireless/rtl8723ds/platform/platform_ARM_SUNnI_sdio.c

其次是增加內(nèi)核的menuconfig 配置以及編譯,只需要修改以下地方即可。

tina/lichee/linux-4.9/drivers/net/wireless/Kconfig example: +source "drivers/net/wireless/xr829/Kconfig"tina/lichee/linux-4.9/drivers/net/wireless/Makefile example: +obj-$(CONFIG_XR829_WLAN) += xr829/

配置完成后,可執(zhí)行make kernel_menuconfig 中選上,編譯的時(shí)候,就會把指定的driver 編譯。

Device Drivers ---> [*] Network device support ---> [*] Network device support ---> [*] Wireless LAN ---> [] xxx模塊

3.1.2 添加make munconfig 的配置

該步驟主要將kernel 中編譯的ko 文件以及firmware 拷貝到跟文件系統(tǒng)中。 首先是配置firmware。firmware 文件一般以模組文件名存放在如下,并需要新增一個(gè)mk 文件,使其在make munconfig 中可見。

tina/package/firmware/linux-firmware/XXX模組 tina/package/firmware/linux-firmware/XXX模組/XXX.mk example: tina/package/firmware/linux-firmware/xr829 make munuconfig Firmware ---> < > xr829-firmware..................................... Xradio xr829 firmware

其次是配置ko。

tina/target/allwinner/xxx方案/modules.mk example: Tina-3.5.0及以前: tina/target/allwinner/cowbell-perf1/modules.mk Tina-3.5.1及以后: tina/target/allwinner/r328s2-perf1/modules.mk make munuconfig Kernel modules ---> Wireless Drivers ---> XXX 模塊

3.1.3 配置sys_config.fex

前面已經(jīng)闡述,見第3 章節(jié)開頭描述。

3.1.4 驗(yàn)證

按照前面的配置好,make kernel_menuconfig 選上對應(yīng)模塊,make menuconfig 選項(xiàng)對應(yīng) firmware 和模塊,同時(shí),make munconfig 新增選上如下,即可進(jìn)行驗(yàn)證了。

make menuconfig Allwinner ---> wireless ---> <*> wifimanager-v2.0................................... Tina wifimanager-v2.0 <*> wifimanager-v2.0-demo..................... Tina wifimanager-v2.0 app demo

驗(yàn)證命令

查看模塊是否加載:lsmod 模塊卸載: rmmod ps查看wifi_deamon后臺進(jìn)程是否已起來,若沒有起來先啟動wifi_deamon后臺進(jìn)程 連接路由命令:wifi -c ssid passwd 掃描周圍熱點(diǎn):wifi -s

3.1.5 模組移植示例

以RTL8723DS 為例:

獲取資料 1.1建議從RTL原廠獲取最新版本的完整資料,包括驅(qū)動,文檔,工具。(也可以從其他內(nèi)核已適配版本獲取驅(qū)動)

內(nèi)核適配

2.1將整個(gè)驅(qū)動SDK拷貝到tina/lichee/linux-xxx/drivers/net/wireless/ 2.2驅(qū)動重命名為rtl8723ds 2.3在tina/lichee/linux-xxx/drivers/net/wireless/目錄修改Kconfig和Makefile Kconfig: +source "drivers/net/wireless/rtl8723ds/Kconfig" Makefile: +obj-$(CONFIG_RTL8723DS) += rtl8723ds/ (注意:這里命名一定要匹配) 2.4修改驅(qū)動原生代碼 2.4.1驅(qū)動的Makefile(tina/lichee/linux-xxx/drivers/net/wireless/rtl8723ds/Makefile) +CONFIG_RTW_ANDROID = 0 (# CONFIG_RTW_ANDROID - 0: no Android, 4/5/6/7/8/9/10 : Android version) +CONFIG_PLATFORM_I386_PC = n +CONFIG_PLATFORM_ARM_SUNxI = y 2.4.2替換適配sunxi的平臺文件(tina/lichee/linux-xxx/drivers/net/wireless/rtl8723ds/platform) 可以從已經(jīng)適配過的其他模組獲?。簆latform_ARM_SUNxI_sdio.c

Tina module 適配

  1. 3.1.從其他任意已經(jīng)支持的IC方案中拷貝module的配置 define KernelPackage/net-rtl8723ds SUBMENU:=$(WIRELESS_MENU) //make menuconfig的菜單位置,一般不更改。 TITLE:=RTL8723DS support (staging) //make menuconfig的提示 DEPENDS:= +r8723ds-firmware +@IPV6 +@USES_REALTEK +@PACKAGE_realtek-rftest + @PACKAGE_rtk_hciattach //添加tina依賴,可以理解為select FILES:=$(LINUX_DIR)/drivers/net/wireless/rtl8723ds/8723ds.ko KCONFIG:= //添加內(nèi)核依賴可以理解位select ... AUTOLOAD:=$(call AutoProbe,8723ds) endef define KernelPackage/net-rtl8723ds/description //make menuconfig的描述 Kernel modules for RealTek RTL8723DS support endef $(eval $(call KernelPackage,net-rtl8723ds)) 一個(gè)完整的module 注:建議直接添加在平臺的通用配置中:tina/target/allwinner/xxx-common/modules.mk 3.2.firmware的配置 /package/firmware/linux-firmware/rtl8723ds/ //更新驅(qū)動時(shí)更新firmware文件(如果有最新的) 3.3.sys_config.fex/board.dts的配置 rfkill: rfkill@0 { compatible = "allwinner,sunxi-rfkill"; chip_en; power_en; status = "okay"; wlan: wlan@0 { compatible = "allwinner,sunxi-wlan"; pinctrl-0 = <&wlan_pins_a>; pinctrl-names = "default"; clock-names = "32k-fanout1"; clocks = <&ccu CLK_FANOUT1_OUT>; wlan_busnum = <0x1>; wlan_regon = <&pio PE 17 GPIO_ACTIVE_HIGH>; wlan_hostwake = <&pio PG 10 GPIO_ACTIVE_HIGH>; /*wlan_power = "VCC-3V3";*/ /*wlan_power_vol = <3300000>;*/ /*interrupt-parent = <&pio>; interrupts = < PG 10 IRQ_TYPE_LEVEL_HIGH>;*/ wakeup-source; }; ... }

整體編譯燒寫

驗(yàn)證排查

3.1.6 模組移植總結(jié)

主要就是以下幾點(diǎn): ? 修改模組廠提供的driver,填充相應(yīng)的上電,掃卡等函數(shù)。 ? 增加make kernel_menuconfig 和make menuconfig 選項(xiàng), 涉及到firmware,makefile,ko。 ? 配置sys_config.fex。 ? 驗(yàn)證。

目前Tina 平臺的linux 內(nèi)核版本有l(wèi)inux_3.4,linux_3.10,linux_4.4,linux_4.9,linux_5.4,由于歷史原因,很有可能內(nèi)核版本之間的配置有些不一樣,主要體現(xiàn)在device:sys_config.fex 以及driver:sunxi-rf。用戶在模組移植時(shí),可參考對應(yīng)各個(gè)內(nèi)核版本進(jìn)行參考。

Tina-3.5.0 及以前:

產(chǎn)品名稱 內(nèi)核版本 sys_config.fex
R16 Linux-3.4 tina/target/allwinner/astarparrot/configs/sysconfig.fex
R18 Linux-4.4 tina/target/allwinner/tulip_d1/configs/sysconfig.fex
R328 Linux-4.9 tina/target/allwinner/cowbell_demo/configs/sysconfig.fex

Tina-3.5.1 及以后:

產(chǎn)品名稱 內(nèi)核版本 配置文件
R16 Linux-3.4 tina/device/config/chips/r16/configs/parrot/sys_config.fex
R18 Linux-4.4 tina/device/configs/chips/r18/configs/d1/sys_config.fex
R328 Linux4.9 tina/device/config/chips/r328s2/configs/perf1/sys_config.fex(board.dts)
R528 Linux-5.4 tina/device/config/chips/r528/configs/evb1/sys_config.fex(board.dts)

3.2 Tina 平臺已經(jīng)移植的模組

Tina 平臺上已經(jīng)移植過多款Wi-Fi 模組,支持列表如下:

BCM : AP6212,AP6212A,AP6255,AP6256,AP6335等。 Realtek: RTL8723DS(linux 3.4/4.9/5.4),RTL8821cs(linux 4.9/5.4),RTL8822cs(linux 4.9),RTL8189FTV(linux4.9) Xradio : XR819(linux 3.4/4.4/4.9),xr829(linux 3.4/4.4/4.9/5.4) Esp : esp8089(linux 3.4) .....

對于以上已經(jīng)移植的模組,用戶大多情況只需要在kernel_menuconfig 和menuconfig 選上對應(yīng)的配置即可。如果按照在對應(yīng)的menuconfig 中選上,還是不

能工作,就按照3.1 小節(jié)的步驟依次排查原因。同時(shí),如果有些方案可能在make menuconfig 中無法顯示相應(yīng)的Kernel modules,這是因?yàn)樵诜桨赶碌?/p>

modules.mk 文件中沒有添加,可按照3.1.2 小節(jié)的方式進(jìn)行添加。

以下列出各個(gè)模組kernel_menuconfig 以及menuconfig 的選項(xiàng)。

3.2.1 BCM 系列的模組

make kernel_menuconfig 配置

Device Drivers ---> Network device support ---> Wireless LAN ---> Broadcom FullMAC wireless cards support (/lib/firmware/fw_bcmdhd.bin) Firmware path (/lib/firmware/nvram.txt) NVRAM path PS: BCM系列的模組,如AP6212,AP6255,AP6256..都是用的同一份driver

make menuconfig 配置

Kernel modules---> Wireless Drivers---> <*> kmod-net-broadcom Firmware---> <*> ap6212-firmware. ---根據(jù)模組型號選擇

3.2.2 XR 系列的模組

(1)XR819 make kernel_menuconfig 配置

Device Drivers ---> Network device support ---> Wireless LAN ---> XR819 WLAN support ---> /*or*/ XRadio WLAN support --->

make menuconfig 配置

Kernel modules---> Wireless Drivers---> <*> kmod-net-broadcom Firmware---> <*> xr819-firmware..................................... Xradio xr819 firmware

(2)XR829 make kernel_menuconfig 配置

Device Drivers ---> Network device support ---> Wireless LAN ---> XR829 WLAN support --->

make menuconfig 配置

Kernel modules---> Wireless Drivers---> <*> kmod-net-xr829................................... xr829 support (staging) Firmware---> <*> xr829-firmware..................................... Xradio xr829 firmware

3.2.3 REALTEK 系列的模組

(1)RTK8723DS make kernel_menuconfig 配置

Device Drivers ---> Network device support ---> Wireless LAN ---> Realtek 8723D SDIO or SPI WiFi

make menuconfig 配置

Kernel modules---> Wireless Drivers---> <*> kmod-net-rtl8723ds........................... RTL8723DS support (staging) Firmware---> <*> r8723ds-firmware.............................. RealTek RTL8723DS firmware

(2)RTK8822CS make kernel_menuconfig 配置

Device Drivers ---> Network device support ---> Wireless LAN ---> Realtek 8822C SDIO WiFi

make menuconfig 配置

Kernel modules---> Wireless Drivers---> <*> kmod-net-rtl8822cs........................... RTL8723CS support (staging) Firmware---> <*> rtl8821cs-firmware............................ RealTek RTL8821CS firmware

(3)RTK8189FTV make kernel_menuconfig 配置

Device Drivers ---> Network device support ---> Wireless LAN ---> Realtek 8189F SDIO WiFi

make menuconfig 配置

Kernel modules---> Wireless Drivers---> <*> kmod-net-rtl8189fs........................... RTL8189FS support (staging) 注:RTL8189FTV 在tina配置中不需要firmware配置.

3.2.4 ESP 系列的模組

(1)ESP8089 make kernel_menuconfig 配置

Device Drivers ---> Network device support ---> Wireless LAN ---> <*> Eagle WLAN driver

make menuconfig 配置

Kernel modules---> Wireless Drivers---> <*> kmod-esp8089................................... esp8089 support (staging) Firmware---> <*> esp8089-firmware........................................ esp8089 firmware

3.3 Tina 主要平臺模組支持列表

硬件平臺 支持模組 內(nèi)核版本
R6 XR819 linux3.10
R7/R11 XR819 linux3.4
R16 AP6210/AP6212/AP6181/8723BS linux3.4
R18 AP6212/AP6236/AP6255 linux4.4
R30 AP6181/AP6212/AP6234/AP6330/8723BS linux4.4
R40 AP6212 linux3.10
R58 AP6212/AP6181/8723BS linux3.4
R311 AP6212/AP6181/8723BS linux4.9
R328 XR829/8723DS(單天線) linux4.9
R329 XR829/8723DS(單雙天線) linux4.9
R331/R332/R333 8723DS(單天線) linux4.9
R818 XR829/8723DS(單雙天線)/8189FTV/8821CS(單雙天線) linux4.9
MR133 AP6212/AP6181/8723BS linux4.9
MR813 XR829/8723DS(單雙天線)/8189FTV linux4.9
T7 AP6210/AP6212/AP6234 linux4.9
R528 RTL8723ds(單)/RTL8821cs/xr829 linux5.4
V853 XR829/XR819s/RTL8189FS linux4.9

4 Wi-Fi manager 介紹

wifimanager 已升級為wifimanager2.0,wifimanager2.0 已獨(dú)立出一個(gè)單獨(dú)文檔,wifimanager2.0的具體介紹請參考

Tina_linux_wifimanger2.0_ 開發(fā)指南

5 Softap 介紹

softap 功能已集成到wifimanager2.0,wifimanager2.0 已獨(dú)立出一個(gè)單獨(dú)文檔,wifimanager2.0的具體介紹請參考

Tina_linux_wifimanger2.0_ 開發(fā)指南

6 常見問題

6.1 編譯問題

6.1.1 找不到wowlan 變量

現(xiàn)象:

drivers/net/wireless/xr829/umac/main.c:870:17: error: 'struct wiphy' has no member named 'wowlan' if ((hw->wiphy->wowlan->flags || hw->wiphy->wowlan->n_patterns)

原因: wowlan成員變量受CONFIG_PM控制,沒有打開導(dǎo)致的.休眠喚醒的依賴。

解決方案:

在內(nèi)核配置 -Power management options ---> Device power management core functionality

6.1.2 找不到xxx.ko

現(xiàn)象:

  1. sunxi_wlan_get_bus_index...xradio_core.ko undefined!

原因: 缺少配置misc。

解決方案: 在內(nèi)核配置

  1. m kernel_menuconfig--> Device drivers--> Miscdevices--> Allwinner rfkill driver

6.1.3 mmc_xxx undefined

現(xiàn)象:

drivers/built-in.o: In function scan_device_store': lichee/linux-4.9/drivers/misc/sunxi-rf/sunxi-wlan.c:309: undefined reference tosunxi_mmc_rescan_card' lichee/linux-4.9/drivers/misc/sunxi-rf/sunxi-wlan.c:309:(.text+0x5fc40): relocation truncated to fit: R_AARCH64_CALL26 against undefined symbol `sunxi_mmc_rescan_card'

原因: 沒有配置mmc。

解決方案

Device Drivers ---> <*> MMC/SD/SDIO card support ---> <*> Allwinner sunxi SD/MMC Host Controller support

6.1.4 缺少依賴庫

現(xiàn)象:

  1. Package kmod-net-xr829 is missing dependencies for the following libraries: cfg80211.ko mmc_core.ko sunxi-wlan.ko

原因: 依賴庫需要編譯進(jìn)內(nèi)核,不能以模塊方式編譯進(jìn)去。

解決方案。

  1. 在內(nèi)核配置如下模塊時(shí),配置成y CONFIG_RFKILL =y CONFIG_CFG80211=y CONFIG_MMC=y CONFIG_MAC80211=y

6.2 驅(qū)動加載問題

6.2.1 R16 博通模組聯(lián)網(wǎng)時(shí)提示:No such device.

現(xiàn)象:

root@TinaLinux:/# wifi_add_network_test ssid passwd 1 ********************************* ***Start wifi connect ap test!*** ********************************* wpa_suppplicant not running! Cannot create "/data/misc/wifi/entropy.bin": No such file or directory Wi-Fi entropy file was not created ifconfig: SIOCGIFFLAGS: No such device event_label 0x0 wifi on failed! wifi on failed event 0xf001

原因:

firmware選擇不匹配,導(dǎo)致驅(qū)動加載時(shí)下載失敗. - lsmod查看驅(qū)動已經(jīng)正常加載 - dmesg 查看加載log發(fā)現(xiàn): [ 22.336336] dhdsdio_download_code_file: Open firmware file failed /lib/firmware/ fw_bcm43438a1.bin [ 22.346331] _dhdsdio_download_firmware: dongle image file download failed 表示firmware固件缺失(這里表示缺失fw_bcm43438a1.bin) 最后發(fā)現(xiàn)是在配置firmware時(shí)選擇了ap6212,正常應(yīng)該用ap6212a

解決方案

tina配置正確的firmware firmware ---> └─> <*> ap6212a-firmware............................... Broadcom AP6212A firmware

6.2.2 R329_XR829 模組ifconfig 顯示:No such device

現(xiàn)象:

  1. ifconfig: SIOCGIFFLAGS: No such device

原因:

  1. firmware選擇不匹配。 - lsmod查看驅(qū)動已經(jīng)正常加載。 - dmesg 查看加載log發(fā)現(xiàn): [ 195.966066] [XRADIO_ERR] xradio_load_firmware: Wait for wakeup:device is not responding. XR829換了40M晶振。

解決方案

  1. tina配置選擇40M晶振的firmware firmware ---> [*] xr829 with 40M sdd

6.2.3 MR133_XR829 can’t open /etc/wifi/xr_wifi.conf, failed

1.現(xiàn)象:

lsmod驅(qū)動沒有正常加載。

原因:

dmesg查看log: [ 6.802331] [XRADIO_ERR] can't open /etc/wifi/xr_wifi.conf, failed(-30) [ 6.802338] [XRADIO_ERR] Access_file failed, path:/etc/wifi/xr_wifi.conf! [ 6.914044] sunxi-mmc sdc1: no vqmmc,Check if there is regulator [ 7.028376] [XRADIO_ERR] xradio_load_firmware: Wait_for_wakeup: can't read control register. busnum配置錯(cuò)誤,原理圖上使用的是sdc0.

2.解決方案

board.dts中配置wlan時(shí) busnum = 0;

6.2.4 驅(qū)動加載問題總結(jié)

6.2.4.1 配置問題

1.內(nèi)核驅(qū)動,Tina modules, Tina firmware三者必須正確對應(yīng)同一個(gè)模組。 2.注意common下的modules.mk的編寫。 3.Sdio的配置一定要根據(jù)原理圖選擇對應(yīng)busnum。 可能導(dǎo)致: 1.掃卡失敗。 2.下載firmware失敗。 最終導(dǎo)致驅(qū)動加載失敗。

6.2.4.2 供電問題

檢查VCC_WIFI和VCC_IO_WIFI兩路電。 不同模組對供電時(shí)序有一定要求,比如RTL8723ds需要兩路電同時(shí)供電,針對有AXP的方案,一定要注意供電的配置,特別是enable的時(shí)間。 1.硬件方面:主要排查兩路電的供電方案,是否是同一路供電,若是分開供電,要考慮兩路供電的時(shí)序, 例如DCDC1--->VCC_WIFI,LDOA--->VCC_IO_WIFI,那么DCDC1和LDOA的時(shí)序就得考慮。 2.軟件方面主要是sysconfig.fex或者boart.dts的配置,分開供電的是否需要單獨(dú)配置。 如:R818硬件設(shè)計(jì)是兩路電分開供電。 可能導(dǎo)致: 1.掃卡失敗。 2.下載firmware失敗。 3.sdio_clk沒有時(shí)鐘。 4.32k競爭不起振。 最終導(dǎo)致驅(qū)動加載失敗。

6.2.4.3 sdio 問題

1.sdio busnum配置錯(cuò)誤. 2.驅(qū)動WL-REG-ON的方式不對.例如: XR819模塊出現(xiàn) [SBUS_ERR] sdio probe timeout! [XRADIO_ERR] sbus_sdio_init_failed 這個(gè)問題主要是sdio掃卡失敗,跟sdio上電時(shí)序有關(guān),可在drivers/net/wireless/xradio/wlan/platform.c中 xradio_wlan_power函數(shù)sunxi_wlan_set_power(on)后面加上一段延時(shí)。 RLT8723ds需要先高-低-高的方式. 可能導(dǎo)致: 1.掃卡失敗。 2.下載firmware失敗。 3.sdio_clk沒有時(shí)鐘。 4.32k晶振不起振。 5.WL-REG-ON無法正常被拉高。 最終導(dǎo)致驅(qū)動加載失敗。

6.3 起wlan0 網(wǎng)卡問題

6.3.1 R818_RTL8723ds ifconfig wlan0 up: No such device

1.現(xiàn)象:

ifconfig: SIOCGIFFLAGS: No such device

2.原因:

- lsmod查看驅(qū)動已經(jīng)正常加載。 - dmesg查看log未發(fā)現(xiàn)異常。 - 排查sdio_clk, regon_on,32k,都正常。 - 兩路供電都正常配置。 - 對比其他平臺硬件發(fā)現(xiàn),供電方式不一樣,兩路電采用了分開供電,咨詢RTL需要同時(shí)上電。

3.解決方案 硬件更改,VCC_WIFI/VCC_IO_WIFI用同一路電供電。

6.3.2 R328_RTL8723ds 無法自啟動wlan0

1.現(xiàn)象:

啟動腳本/etc/init.d/wpa_supplicant中會自啟動wlan0 但是每次啟動啟動都自啟動失敗,然后手動ifconfig wlan0 up正常。

2.原因:

AP-WAKE_BT引腳被接了上拉電阻,進(jìn)入測試模式了。

3.解決方案 硬件摘除上拉電阻。

6.3.3 起wlan0 網(wǎng)卡問題總結(jié)

wlan0啟動失敗問題目前遇到的都是與硬件相關(guān)的,如果不能自加載一般采用ifconfig wlan0 up先手動加載看看打印提 示。 同時(shí)讓硬件幫忙check一下供電和一些io的上下拉電阻。

6.4 supplicant 服務(wù)問題

6.4.1 找不到wpa_suplicant.conf 文件

1.現(xiàn)象: 起supplicant失敗

- ps發(fā)現(xiàn)沒有supplicant進(jìn)程. - 于是手動執(zhí)行wpa_supplicant -D nl80211 -i wlan0 -c /etc/wpa_supplicant.conf -B 提示: Failed to open config file '/etc/wpa_supplicant.conf', error: No such file or directory Failed to read or parse configuration '/etc/wpa_supplicant.conf'.

2.原因: 路徑錯(cuò)誤。

3.解決方案

tina正常的路徑一般在/etc/wifi/wpa_supplicant.conf 在wifimanage包下面配置正確的路徑,保持和啟動腳本一致.

6.5 wifimanager 使用問題

6.5.1 聯(lián)網(wǎng)時(shí)出現(xiàn):network not exist!

1.現(xiàn)象:

wifi_connect_ap_test ssid passwd network not exist!

2.原因:

- lsmod查看驅(qū)動已經(jīng)正常加載。 - ifconfig查看wlan0已經(jīng)正常up。 - ps查看supplicant服務(wù)已經(jīng)正常啟動。 - 使用wifi_scan_results_test掃描網(wǎng)絡(luò) root@TinaLinux:/# wifi_scan_results_test ********************************* ***Start scan!*** ********************************* bssid / frequency / signal level / flags / ssid ****************************** Wifi get_scan_results: Success! ****************************** 沒有任何網(wǎng)絡(luò)掃描到。

3.解決方案 一般是信號太多,沒有板載天線,嘗試外加一根天線。

6.6 上層網(wǎng)絡(luò)應(yīng)用服務(wù)問題

6.6.1 MR133_XR829 ping 壓力測試: poll time out

1.現(xiàn)象:

ping 壓力測試,一段時(shí)間后出現(xiàn)poll time out。

2.原因:

ping的網(wǎng)絡(luò)性能不好.連接的公司內(nèi)網(wǎng)可能存在一些未知的限制。

3.解決方案

嘗試連接另外的路由器測試。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11123

    瀏覽量

    207889
  • 移植
    +關(guān)注

    關(guān)注

    1

    文章

    375

    瀏覽量

    28008
  • wi-fi
    +關(guān)注

    關(guān)注

    14

    文章

    2054

    瀏覽量

    123683
  • 開發(fā)指南
    +關(guān)注

    關(guān)注

    0

    文章

    34

    瀏覽量

    7509
  • Tina
    +關(guān)注

    關(guān)注

    2

    文章

    45

    瀏覽量

    16894
收藏 人收藏

    評論

    相關(guān)推薦

    Tina_Linux系統(tǒng)裁剪開發(fā)指南

    Tina_Linux系統(tǒng)裁剪開發(fā)指南1 概述2 Tina系統(tǒng)裁剪簡介2.1 boot0裁剪2.2 uboot裁剪2.3 內(nèi)核裁剪2.3.1 刪除不使用的功能2.3.2 刪除不使用的驅(qū)動2.3.3
    的頭像 發(fā)表于 03-06 09:52 ?1384次閱讀

    用于 SimpleLink Wi-Fi CC3200 Launchpad 的 Wi-Fi 音頻流應(yīng)用

    的 C3200-LAUNCHXL + CC3200AUDBOOST 設(shè)置,并通過 Wi-Fi 向第二個(gè) LaunchPad 提供 16 kHz、16 位采樣的 PCM 音頻的單播流設(shè)計(jì)提供經(jīng)過全面測試的參考設(shè)計(jì)系統(tǒng),包括電路板設(shè)計(jì)文件、電路板用戶指南、演示軟件、演示用戶
    發(fā)表于 04-02 14:00

    Wi-Fi入門Android?

    Wi-Fi登機(jī)iOS應(yīng)用程序存在示例代碼。Android也支持它嗎?我能看一下樣本代碼嗎?指南中只有iOS。 以上來自于百度翻譯 以下為原文Wi-Fi onboardingSample code
    發(fā)表于 10-10 14:50

    【每日精選】開源鴻蒙系統(tǒng)DAYU200教程及Tina Wi-Fi模組移植

    大家好,今天推薦一些社區(qū)好帖,歡迎大家留言也推薦更多好帖子,推薦會有獎勵哈!今日推薦:【網(wǎng)絡(luò)專題1】Tina Wi-Fi模組移植_實(shí)踐篇【網(wǎng)絡(luò)專題1】Tina Wi-Fi模組移植_理論
    發(fā)表于 03-15 15:32

    Tiny6410 Linux開發(fā)指南詳解

    Tiny6410 Linux 開發(fā)指南
    發(fā)表于 07-08 17:12 ?209次下載
    Tiny6410 <b class='flag-5'>Linux</b><b class='flag-5'>開發(fā)指南</b>詳解

    Wi-Fi鏈接控制器Linux用戶指南

    本用戶指南介紹如何在 ATWILC1000 SD 卡或 ATWILC3000 Shield 板(安裝在運(yùn)行 Linux?內(nèi)核 4.9 的 SAMA5D4Xplained Ultra 上)上運(yùn)行 Wi-Fi
    發(fā)表于 04-29 10:53 ?9次下載

    Hi3861V100/Hi3861LV100 Wi-Fi軟件開發(fā)指南

    Hi3861V100/Hi3861LV100 Wi-Fi軟件 開發(fā)指南
    發(fā)表于 05-31 16:21 ?11次下載

    AN100 GD32W51x Wi-Fi開發(fā)指南

    AN100 GD32W51x Wi-Fi開發(fā)指南
    發(fā)表于 03-01 18:49 ?1次下載
    AN100 GD32W51x <b class='flag-5'>Wi-Fi</b><b class='flag-5'>開發(fā)指南</b>

    Tina_Linux_系統(tǒng)軟件開發(fā)指南

    Tina_Linux_系統(tǒng)軟件開發(fā)指南
    的頭像 發(fā)表于 03-02 15:25 ?1517次閱讀
    <b class='flag-5'>Tina_Linux</b>_系統(tǒng)軟件<b class='flag-5'>開發(fā)指南</b>

    Tina Linux配置開發(fā)指南

    Tina Linux配置開發(fā)指南
    的頭像 發(fā)表于 03-02 15:28 ?1.6w次閱讀
    <b class='flag-5'>Tina</b> <b class='flag-5'>Linux</b>配置<b class='flag-5'>開發(fā)指南</b>

    Linux NOR開發(fā)指南

    Linux NOR開發(fā)指南
    的頭像 發(fā)表于 03-06 09:55 ?813次閱讀
    <b class='flag-5'>Linux</b> NOR<b class='flag-5'>開發(fā)指南</b>

    Wi-Fi Pmod? 擴(kuò)展板 – 快速入門指南

    Wi-Fi Pmod? 擴(kuò)展板 – 快速入門指南
    發(fā)表于 03-13 19:13 ?0次下載
    <b class='flag-5'>Wi-Fi</b> Pmod? 擴(kuò)展板 – 快速入門<b class='flag-5'>指南</b>

    Wi-Fi Pmod? 擴(kuò)展板 – 快速入門指南

    Wi-Fi Pmod? 擴(kuò)展板 – 快速入門指南
    發(fā)表于 07-04 20:30 ?0次下載
    <b class='flag-5'>Wi-Fi</b> Pmod? 擴(kuò)展板 – 快速入門<b class='flag-5'>指南</b>

    GD32VW553 Wi-Fi開發(fā)指南應(yīng)用說明

    電子發(fā)燒友網(wǎng)站提供《GD32VW553 Wi-Fi開發(fā)指南應(yīng)用說明.pdf》資料免費(fèi)下載
    發(fā)表于 12-14 10:00 ?0次下載
    GD32VW553 <b class='flag-5'>Wi-Fi</b><b class='flag-5'>開發(fā)指南</b>應(yīng)用說明

    Wi-Fi HaLow和傳統(tǒng)Wi-Fi的區(qū)別

    Wi-Fi HaLow和傳統(tǒng)Wi-Fi的區(qū)別? Wi-Fi是一種無線網(wǎng)絡(luò)技術(shù),可以連接到互聯(lián)網(wǎng)或局域網(wǎng),為用戶提供無線上網(wǎng)的便利。隨著科技的發(fā)展和互聯(lián)網(wǎng)的普及,Wi-Fi也在不斷演進(jìn)和
    的頭像 發(fā)表于 02-02 15:28 ?802次閱讀