Tina_Linux_Wi-Fi_开发指南
Tina Linux Wi-Fi 开发指南
1 前言
1.1 文档简介
介绍Allwinner 平台上Wi-Fi 驱动移植,介绍Tina Wi-Fi 管理框架,包括Station,Ap 以及Wi-Fi 常见问题。
1.2 目标读者
适用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:连接无线网络的终端,大部分无线网卡默认都处于该模式,也是常用的一种模式。
• AP:无线接入点,常称热点,比如路由器功能。
• MONITOR:也称为混杂设备监听模式,所有数据包无过滤传输到主机。
2.2 Tina Wi-Fi 软件结构
• wifimanager-v2.0:包含了wifimanager-v1.0 的功能(用于STATION 模式,提供Wi-Fi连接扫描等功能)外,还集成了softap(启动AP 功能)和smartlink(多种配网模式)的功能,做到了一个应用集成了多种wifi 功能,方便客户使用和管理。
• wpa_supplicant: 开源的无线网络配置工具,主要用来支持WEP,WPA/WPA2 和WAPI 无线协议和加密认证的,实际上的工作内容是通过socket 与驱动交互上报数据给用户。
• hostapd: 是一个用户态用于AP 和认证服务器的守护进程。
• monitor: Wi-Fi 处于混杂设备监听模式的处理应用。
2.3 Wi-Fi 常用命令介绍
2.3.1 station 模式
详情请看Tina_linux_wifimanger2.0_ 开发指南。
执行下面的命令前请确保wifi_deamon后台进程已启动,若没有启动请先启动wifi_deamon后台进程。
wifi -o sta 以sta模式打开wifimanager
wifi -s 扫描周围网络
wifi -c ssid [passwd] 以加密或非加密的方式连接指定网络
wifi -d 断开已经连接的网络
wifi -l [all] 列出保存的网络
wifi -a [enable/disable] 重连断开的网络
wifi -r [ssid/all] 移除保存的指定网络
注:
ssid 网络名
passwd 秘钥
2.3.2 ap 模式
执行下面的命令前请确保wifi_deamon后台进程已启动,若没有启动请先启动wifi_deamon后台进程。
wifi -o ap [ssid] [passwd] 以ap模式打开wifimanager
wifi -l 列出连接到ap热点的sta信息
注:
ssid 网络名
passwd 秘钥
ap模式和station模式在不同模组上不一定能共存,详情看第5节介绍。
2.3.3 monitor 模式
执行下面的命令前请确保wifi_deamon后台进程已启动,若没有启动请先启动wifi_deamon后台进程。
wifi -o monitor 以monitor模式打开wifimanager
注:
没有
2.3.4 额外功能
执行下面的命令前请确保wifi_deamon后台进程已启动,若没有启动请先启动wifi_deamon后台进程。
wifi -f 关闭wifimanager
wifi -p [softap/ble/xconfig/soundwave] 使用softap/ble/xconfig/soundwave进行配网
wifi -D [error/warn/info/debug/dump/exce] 设置打印等级
wifi -g 获取mac地址信息
wifi -m [macaddr] 设置mac地址
wifi -h 打印wifimanager使用说明
注:
配网模式并不是所有模组都支持,要看具体的模组。
mac地址设置只能进行临时性设置。
3 Wi-Fi 模组移植
Wi-Fi 模组工作的条件,如上图,需要满足以下几个条件:
• 供电:一般有两路供电,其中VCC-Wi-Fi 为主电源,VCCIO-Wi-Fi 为IO 上拉电源。
• 使能:要能正常工作,需要WL-REG-ON 给高电平。
• SDIO:与SOC 的通信有通过USB,SDIO 等,这里以SDIO 为例,其中SDIO 0~3 为SDIO 的4 条数据线。
• 唤醒主控:当系统休眠时,Wi-Fi 模组可通过WL-WAKE-AP 通过中断的方式唤醒主控,有些模组也通过该引脚来作为主控接收数据的中断。
• 24/26MHz 时钟信号.
• 32.768KHz 信号:根据模组而定,有些模组内部通过(5)中的输入的clk 进行分频得到,有些需要外部单独输入该信号。
对于Wi-Fi 模组移植,重点围绕以上的几个条件进行开展,对于以上几个工作条件allwinner已经提供了对应的driver,根据总线设备驱动模型,只需要根据各个平
台配置device 即可,allwinner device 除了可以可以通过dts 外(linux-3.4 内核无dts),还可通过sys_config.fex的方式,sys_config.fex 的优先级高于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 /*用于区分模组型号:默认8~10*/
module_power1 = "axp22_dldo1" /*power1使用的电源树:dld01*/
module_power1_vol = 3300000 /*power1使用的电源树电压设置为3.3v*/
module_power2 = "axp22_dldo2" /*power2使用的电源树:dld02*/
module_power2_vol = 3300000 /*power2使用的电源树电压设置为3.3v*/
module_power3 = "axp22_aldo3" /*power3使用的电源树:dld03*/
module_power3_vol = 3300000 /*power3使用的电源树电压设置为3.3v*/
/*以上,是使用pmu供电的配置,如果直接供电,可省略*/
power_switch =
chip_en = /*电源使能,备用于使用gpio高低点平打开电源*/
lpo_use_apclk = "losc_out" /*32khz的时钟使能*/
[wifi_para]
wifi_used = 1 /*是否使用Wi-Fi*/
wifi_sdc_id = 1 /*Wi-Fi所使用的sdio 卡号*/
wl_reg_on = port:PL06<1><default><default><0> /*使能脚所使用的gpio*/
wl_host_wake = port:PL07<4><default><default><0> /*唤醒主控所使用的gpio*/
[mmc1_para]
sdc_used = 1
sdc_detmode = 4
sdc_buswidth = 4
sdc_clk = port:PG00<2><1><1><default> /*sdio所使用的gpio号*/
sdc_cmd = port:PG01<2><1><1><default>
sdc_d0 = port:PG02<2><1><1><default>
sdc_d1 = port:PG03<2><1><1><default>
sdc_d2 = port:PG04<2><1><1><default>
sdc_d3 = port:PG05<2><1><1><default>
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><default>
sdc1_cmd = port:PG01<2><1><3><default>
sdc1_d0 = port:PG02<2><1><3><default>
sdc1_d1 = port:PG03<2><1><3><default>
sdc1_d2 = port:PG04<2><1><3><default>
sdc1_d3 = port:PG05<2><1><3><default>
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供电,所使用的电源数量*/
wlan_power1 = "vcc-wifi1" /*使用pmu供电,使用的power1标示*/
wlan_power2 = "vcc-wifi2" /*使用pmu供电,使用的power2标示*/
wlan_io_regulator = "vcc-io-wifi" /*使用pmu供电,使用的io标示*/
/*上面4行表示使用pmu供电的配置项,对应后面的regulator选项。如果不使用pmu供电,可忽略。*/
wlan_busnum = 1
wlan_regon = port:PE06<1><1><1><0>
wlan_hostwake = port:PE05<6><default><default><default>
[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 模组移植的步骤
下面总结一款新模组移植到Tina 平台的步骤。
3.1.1 修改模组厂提供的Wi-Fi driver
模组厂提供过来的driver,适配到Tina 平台,主要修改的地方是调用Tina 平台提供的有上下电,扫卡函数,修改firmware 的download 路径,配置Kconfig 和
Makefile 等。
下面先说明Tina 平台提供给driver 的函数,其中linux 3.4 跟其他内核稍微有些区别。
linux 3.4
#include <mach/sys_config.h>
#include <linux/gpio.h>
/*
*函数功能: sdio扫卡
*参数id: 卡号,(sdio 0 or 1 ...)
*参数insert: 0,卡插入,进行扫卡; 1,卡拔出。
*返回值:无
*/
extern void sunxi_mci_rescan_card(unsigned id, unsigned insert);
/*
*函数功能: Wi-Fi模组上电,使能。
*参数on: 0,上电;1,掉电。
*返回值: 无
*/
extern void wifi_pm_power(int on);
linux 3.4 以上
#include <linux/mmc/host.h>
#include <linux/sunxi-gpio.h>
#include <linux/power/aw_pm.h>
/*
*函数功能: 获取所使用的sdio卡号,对应sysconfig.fex中的wlan_busnum
*返回值: sdio 卡号
*/
extern int sunxi_wlan_get_bus_index(void);
/*
*函数功能: sdio 扫卡
*参数id: 卡号,(sdio 0 or 1 ...)
*返回值: 无
*/
extern void sunxi_mmc_rescan_card(unsigned ids);
/*
*函数功能: Wi-Fi模组上电,使能。
*参数on: 0,上电;1,掉电。
*返回值: 无
*/
extern void sunxi_wlan_set_power(bool on);
/*
*函数功能:获取gpio wlan hostwake pin的申请的中断号
*参数: void
*返回值:irq number
*说明: 部分模组,主控接收数据通过hostwake pin产生中断来触发,
* 所以需要主控这边提供获取到中断号。
*/
extern int sunxi_wlan_get_oob_irq(void);
/*
*函数功能:获取host wake pin设置中断的标志位
*参数: void
*返回值: irq flag
*/
extern int sunxi_wlan_get_oob_irq_flags(void);
首先是将Wi-Fi driver 放到linux-4.9/drivers/net/wireless,填充对应的上电,扫卡等函数。
linux 3.4 的驱动请参考:
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 以上的驱动请参考:
tina/lichee/linux-4.9/drivers/net/wireless/rtl8723ds/platform/platform_ARM_SUNnI_sdio.c
其次是增加内核的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/
配置完成后,可执行make kernel_menuconfig 中选上,编译的时候,就会把指定的driver 编译。
Device Drivers --->[*] Network device support --->[*] Network device support --->[*] Wireless LAN --->[] xxx模块
3.1.2 添加make munconfig 的配置
该步骤主要将kernel 中编译的ko 文件以及firmware 拷贝到跟文件系统中。
首先是配置firmware。firmware 文件一般以模组文件名存放在如下,并需要新增一个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 munuconfigKernel modules --->Wireless Drivers --->XXX 模块
3.1.3 配置sys_config.fex
前面已经阐述,见第3 章节开头描述。
3.1.4 验证
按照前面的配置好,make kernel_menuconfig 选上对应模块,make menuconfig 选项对应
firmware 和模块,同时,make munconfig 新增选上如下,即可进行验证了。
make menuconfigAllwinner --->wireless ---><*> wifimanager-v2.0................................... Tina wifimanager-v2.0<*> wifimanager-v2.0-demo..................... Tina wifimanager-v2.0 app demo
验证命令
查看模块是否加载:lsmod
模块卸载: rmmod
ps查看wifi_deamon后台进程是否已起来,若没有起来先启动wifi_deamon后台进程
连接路由命令:wifi -c ssid passwd
扫描周围热点:wifi -s
3.1.5 模组移植示例
以RTL8723DS 为例:
-
获取资料
1.1建议从RTL原厂获取最新版本的完整资料,包括驱动,文档,工具。(也可以从其他内核已适配版本获取驱动) -
内核适配
2.1将整个驱动SDK拷贝到tina/lichee/linux-xxx/drivers/net/wireless/
2.2驱动重命名为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修改驱动原生代码
2.4.1驱动的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)
可以从已经适配过的其他模组获取:platform_ARM_SUNxI_sdio.c
-
Tina module 适配
3.1.从其他任意已经支持的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:=\ //添加内核依赖可以理解位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)) 一个完整的module 注:建议直接添加在平台的通用配置中:tina/target/allwinner/xxx-common/modules.mk 3.2.firmware的配置 /package/firmware/linux-firmware/rtl8723ds/ //更新驱动时更新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; }; ... }
- 整体编译烧写
- 验证排查
3.1.6 模组移植总结
主要就是以下几点:
• 修改模组厂提供的driver,填充相应的上电,扫卡等函数。
• 增加make kernel_menuconfig 和make menuconfig 选项, 涉及到firmware,makefile,ko。
• 配置sys_config.fex。
• 验证。
目前Tina 平台的linux 内核版本有linux_3.4,linux_3.10,linux_4.4,linux_4.9,linux_5.4,由于历史原因,很有可能内核版本之间的配置有些不一样,主要体现在device:sys_config.fex 以及driver:sunxi-rf。用户在模组移植时,可参考对应各个内核版本进行参考。
Tina-3.5.0 及以前:
产品名称 | 内核版本 | 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 及以后:
产品名称 | 内核版本 | 配置文件 |
---|---|---|
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 平台已经移植的模组
Tina 平台上已经移植过多款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)
.....
对于以上已经移植的模组,用户大多情况只需要在kernel_menuconfig 和menuconfig 选上对应的配置即可。如果按照在对应的menuconfig 中选上,还是不
能工作,就按照3.1 小节的步骤依次排查原因。同时,如果有些方案可能在make menuconfig 中无法显示相应的Kernel modules,这是因为在方案下的
modules.mk 文件中没有添加,可按照3.1.2 小节的方式进行添加。
以下列出各个模组kernel_menuconfig 以及menuconfig 的选项。
3.2.1 BCM 系列的模组
make kernel_menuconfig 配置
Device Drivers --->Network device support --->Wireless LAN ---><M> 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. ---根据模组型号选择
3.2.2 XR 系列的模组
(1)XR819
make kernel_menuconfig 配置
Device Drivers --->Network device support --->Wireless LAN ---><M> XR819 WLAN support --->/*or*/<M> 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 ---><M> 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 ---><M> 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 ---><M> 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 ---><M> 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 主要平台模组支持列表
硬件平台 | 支持模组 | 内核版本 |
---|---|---|
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 已独立出一个单独文档,wifimanager2.0的具体介绍请参考
Tina_linux_wifimanger2.0_ 开发指南
5 Softap 介绍
softap 功能已集成到wifimanager2.0,wifimanager2.0 已独立出一个单独文档,wifimanager2.0的具体介绍请参考
Tina_linux_wifimanger2.0_ 开发指南
6 常见问题
6.1 编译问题
6.1.1 找不到wowlan 变量
- 现象:
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控制,没有打开导致的.休眠唤醒的依赖。 -
解决方案:
在内核配置
-Power management options --->
Device power management core functionality
6.1.2 找不到xxx.ko
-
现象:
sunxi_wlan_get_bus_index...xradio_core.ko undefined!
-
原因:
缺少配置misc。 -
解决方案:
在内核配置m kernel_menuconfig-->Device drivers-->Misc devices-->Allwinner rfkill driver
6.1.3 mmc_xxx undefined
- 现象:
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 缺少依赖库
-
现象:
Package kmod-net-xr829 is missing dependencies for the following libraries: cfg80211.ko mmc_core.ko sunxi-wlan.ko
-
原因:
依赖库需要编译进内核,不能以模块方式编译进去。 -
解决方案。
在内核配置如下模块时,配置成y CONFIG_RFKILL =y CONFIG_CFG80211=y CONFIG_MMC=y CONFIG_MAC80211=y
6.2 驱动加载问题
6.2.1 R16 博通模组联网时提示:No such device.
- 现象:
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选择不匹配,导致驱动加载时下载失败.- lsmod查看驱动已经正常加载
- dmesg 查看加载log发现:[ 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)最后发现是在配置firmware时选择了ap6212,正常应该用ap6212a
- 解决方案
tina配置正确的firmware
firmware --->
└─> <*> ap6212a-firmware............................... Broadcom AP6212A firmware
6.2.2 R329_XR829 模组ifconfig 显示:No such device
-
现象:
ifconfig: SIOCGIFFLAGS: No such device
-
原因:
firmware选择不匹配。- lsmod查看驱动已经正常加载。 - dmesg 查看加载log发现:[ 195.966066] [XRADIO_ERR] xradio_load_firmware: Wait for wakeup:device is not responding.XR829换了40M晶振。
-
解决方案
tina配置选择40M晶振的firmware firmware --->[*] xr829 with 40M sdd
6.2.3 MR133_XR829 can’t open /etc/wifi/xr_wifi.conf, failed
1.现象:
lsmod驱动没有正常加载。
原因:
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配置错误,原理图上使用的是sdc0.
2.解决方案
board.dts中配置wlan时
busnum = 0;
6.2.4 驱动加载问题总结
6.2.4.1 配置问题
1.内核驱动,Tina modules, Tina firmware三者必须正确对应同一个模组。
2.注意common下的modules.mk的编写。
3.Sdio的配置一定要根据原理图选择对应busnum。
可能导致:
1.扫卡失败。
2.下载firmware失败。
最终导致驱动加载失败。
6.2.4.2 供电问题
检查VCC_WIFI和VCC_IO_WIFI两路电。
不同模组对供电时序有一定要求,比如RTL8723ds需要两路电同时供电,针对有AXP的方案,一定要注意供电的配置,特别是enable的时间。
1.硬件方面:主要排查两路电的供电方案,是否是同一路供电,若是分开供电,要考虑两路供电的时序,
例如DCDC1--->VCC_WIFI,LDOA--->VCC_IO_WIFI,那么DCDC1和LDOA的时序就得考虑。
2.软件方面主要是sysconfig.fex或者boart.dts的配置,分开供电的是否需要单独配置。
如:R818硬件设计是两路电分开供电。
可能导致:
1.扫卡失败。
2.下载firmware失败。
3.sdio_clk没有时钟。
4.32k竞争不起振。
最终导致驱动加载失败。
6.2.4.3 sdio 问题
1.sdio busnum配置错误.
2.驱动WL-REG-ON的方式不对.例如:
XR819模块出现
[SBUS_ERR] sdio probe timeout!
[XRADIO_ERR] sbus_sdio_init_failed
这个问题主要是sdio扫卡失败,跟sdio上电时序有关,可在drivers/net/wireless/xradio/wlan/platform.c中
xradio_wlan_power函数sunxi_wlan_set_power(on)后面加上一段延时。
RLT8723ds需要先高-低-高的方式.
可能导致:
1.扫卡失败。
2.下载firmware失败。
3.sdio_clk没有时钟。
4.32k晶振不起振。
5.WL-REG-ON无法正常被拉高。
最终导致驱动加载失败。
6.3 起wlan0 网卡问题
6.3.1 R818_RTL8723ds ifconfig wlan0 up: No such device
1.现象:
ifconfig: SIOCGIFFLAGS: No such device
2.原因:
- lsmod查看驱动已经正常加载。
- dmesg查看log未发现异常。
- 排查sdio_clk, regon_on,32k,都正常。
- 两路供电都正常配置。
- 对比其他平台硬件发现,供电方式不一样,两路电采用了分开供电,咨询RTL需要同时上电。
3.解决方案
硬件更改,VCC_WIFI/VCC_IO_WIFI用同一路电供电。
6.3.2 R328_RTL8723ds 无法自启动wlan0
1.现象:
启动脚本/etc/init.d/wpa_supplicant中会自启动wlan0
但是每次启动启动都自启动失败,然后手动ifconfig wlan0 up正常。
2.原因:
AP-WAKE_BT引脚被接了上拉电阻,进入测试模式了。
3.解决方案
硬件摘除上拉电阻。
6.3.3 起wlan0 网卡问题总结
wlan0启动失败问题目前遇到的都是与硬件相关的,如果不能自加载一般采用ifconfig wlan0 up先手动加载看看打印提
示。
同时让硬件帮忙check一下供电和一些io的上下拉电阻。
6.4 supplicant 服务问题
6.4.1 找不到wpa_suplicant.conf 文件
1.现象:
起supplicant失败
- ps发现没有supplicant进程.
- 于是手动执行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 directoryFailed to read or parse configuration '/etc/wpa_supplicant.conf'.
2.原因:
路径错误。
3.解决方案
tina正常的路径一般在/etc/wifi/wpa_supplicant.conf
在wifimanage包下面配置正确的路径,保持和启动脚本一致.
6.5 wifimanager 使用问题
6.5.1 联网时出现:network not exist!
1.现象:
wifi_connect_ap_test ssid passwd
network not exist!
2.原因:
- lsmod查看驱动已经正常加载。
- ifconfig查看wlan0已经正常up。
- ps查看supplicant服务已经正常启动。
- 使用wifi_scan_results_test扫描网络
root@TinaLinux:/# wifi_scan_results_test
*********************************
***Start scan!***
*********************************
bssid / frequency / signal level / flags / ssid
******************************
Wifi get_scan_results: Success!
******************************
没有任何网络扫描到。
3.解决方案
一般是信号太多,没有板载天线,尝试外加一根天线。
6.6 上层网络应用服务问题
6.6.1 MR133_XR829 ping 压力测试: poll time out
1.现象:
ping 压力测试,一段时间后出现poll time out。
2.原因:
ping的网络性能不好.连接的公司内网可能存在一些未知的限制。
3.解决方案
尝试连接另外的路由器测试。
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.原因:
路径错误。3.解决方案
tina正常的路径一般在/etc/wifi/wpa_supplicant.conf
在wifimanage包下面配置正确的路径,保持和启动脚本一致.
### 6.5 wifimanager 使用问题#### 6.5.1 联网时出现:network not exist!1.现象:
wifi_connect_ap_test ssid passwd
network not exist!
2.原因:
- lsmod查看驱动已经正常加载。
- ifconfig查看wlan0已经正常up。
- ps查看supplicant服务已经正常启动。
- 使用wifi_scan_results_test扫描网络
root@TinaLinux:/# wifi_scan_results_test
Start scan!
bssid / frequency / signal level / flags / ssid
Wifi get_scan_results: Success!
没有任何网络扫描到。
3.解决方案
一般是信号太多,没有板载天线,尝试外加一根天线。### 6.6 上层网络应用服务问题#### 6.6.1 MR133_XR829 ping 压力测试: poll time out1.现象:
ping 压力测试,一段时间后出现poll time out。
2.原因:
ping的网络性能不好.连接的公司内网可能存在一些未知的限制。
3.解决方案
尝试连接另外的路由器测试。
相关文章:
Tina_Linux_Wi-Fi_开发指南
Tina Linux Wi-Fi 开发指南 1 前言 1.1 文档简介 介绍Allwinner 平台上Wi-Fi 驱动移植,介绍Tina Wi-Fi 管理框架,包括Station,Ap 以及Wi-Fi 常见问题。 1.2 目标读者 适用Tina 平台的广大客户和对Tina Wi-Fi 感兴趣的同事。 1.3 适用范…...
Spring AOP(AOP概念、组成、Spring AOP实现及实现原理)
文章目录1. Spring AOP 是什么2. 为什么要用 AOP3. 怎么学 Spring AOP4. AOP 组成5. Spring AOP 实现5.1 添加 Spring AOP 框架支持5.2 定义切面和切点5.3 实现通知方法5.4 使⽤ AOP 统计 UserController 每个⽅法的执⾏时间 StopWatch5.4 切点表达式说明 AspectJ6. Spring AOP…...
8.条件渲染指令
目录 1 v-if v-show 2 v-if v-else-if v-else 1 v-if v-show v-if与v-show都可以控制DOM的显示与隐藏 由于flag是布尔值,所以这里可以直接写 v-if"flag" 当flag为true的时候,v-if与v-show控制的div都会被显示出来 当flag为false的时候&a…...
2023年全网最全最细最流行的自动化测试工具有哪些?你都知道吗!
下面就是我个人整理的一些比较常用的自动化测试工具,并且还有视频版本的详细介绍,同时在线学习人数超过1000人! B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)一:前言 随着测试工程师技能和…...
网络安全——数据链路层安全协议
作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页 目录 前言 一.数据链路层安全协议简介 1.数据链路安全性 二.局域网数据链路层协议 1.…...
编译原理基础概念
一、什么是编译程序编译程序是一种程序,能够将某一种高级语言编写的源程序改造成另一种低级语言编写的目标程序,他们在逻辑上等价、完成相同的工作二、编译阶段1、当目标程序是机器语言时,编译阶段:(1)编译…...
蔬菜视觉分拣机器人的设计与实现(RoboWork参赛方案)
蔬菜视觉分拣机器人的设计与实现 文章目录蔬菜视觉分拣机器人的设计与实现1. 技术栈背景2. 整体设计3. 机械结构3.1 整体结构3.2 底座结构3.3 小臂结构3.4 大臂结构3.5 负载组件结构3.6 末端执行器结构4. 硬件部分4.1 视觉系统4.1.1 光源4.1.2 海康工业相机4.2 传送带系统4.2.1…...
【LVGL移植】STM32F1基于STM32CubeMX配置硬件SPI驱动1.8寸TFT ST7735S跑LVGL图形demo
【LVGL移植】STM32F1基于STM32CubeMX配置硬件SPI驱动1.8寸TFT ST7735S屏幕跑LVGL图形demo🎬运行LVGL 按键组件demo ✨基于STM32CubeMX配置工程是因为方便移植,只要是STM32芯片,拿到我的这个工程源码就可以根据自己的stm32芯片,自…...
写给20、21级学生的话
写给20、21级学生的话前言一、关于招聘变招生,你怎么看?二、对于即将实习/已经实习的学生,你有什么建议?1.学习方面2.提升方面三、思想成年真的很重要前言 最近,有一些同学遇到的实习问题,我统一回复下&…...
功能测试用例多次录制后,我丢掉了selenium,选择龙测AI-TestOps云平台
目录一、如何使用龙测AI-TestOps云平台1、进入龙测AI-TestOps云平台2、新建项目3、新建流程图4、创建任务5、查看任务状态6、查看报告、图片7、下载流程图、测试报告、excel用例二、龙测AI-TestOps云平台AI功能介绍1、NLP2、视频AI转流程图三、总结功能测试用例多次录制后&…...
【C++知识点】C++20 常用新特性总结
✍个人博客:https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 📚专栏地址:C/C知识点 📣专栏定位:整理一下 C 相关的知识点,供大家学习参考~ ❤️如果有收获的话,欢迎点赞👍…...
数据库体系结构概念--集中式数据库、分布式数据库
数据库模式 前言: 平时我们接触的‘数据库’一般指的是DBMS,数据库管理系统,DBMS是软件如:mysql、oracle、dm等等都是集中式数据库,但它们不能代表整个数据库,只是通过这些软件来管理相应的数据内容&#…...
PyQt5数据库开发2 5.2 QSqlRelationalTableModel
目录 一、Qt窗体设计 1. 新建Qt项目 2. 添加组件 3. 添加资源 4. 添加Action 5. 添加工具栏 6. 添加菜单项 7. 添加退出功能 二、SQL Server下建表插数据 1. 建立表 2. 插入数据 3. 单表数据 4. 联合查询 三、代码实现 1. 新建项目目录 2. 编译窗体文件和资…...
树莓派——智能家居第一步
辛辛苦苦配了成功让树莓派开始工作了,开始搞智能家居!大体思路:基于工厂模式,分模块来实现上图分为三部分:主控、外设、控制主控我采用的是树莓派的4b4G版本,外设包括四个区域的灯(我的和上图有…...
【Golang】Golang基础入门级教程 -- 0基础安装搭建Go语言开发环境
目录 安装和下载GO语言 下载 下载地址 版本的选择 安装 Windows安装 Linux下安装 Mac下安装 检查 GOROOT和GOPATH GOPROXY Go开发编辑器 VS Code介绍 下载与安装 配置 Go扩展 第一个Go程序 Hello World go mod init 编写 编译 VSCode切换默认终端 本篇文章…...
MATLAB | 如何解决实验数据散点图重叠问题(overlap)
本期部分实验效果: 这期讲一下如果数据重合严重该咋办(overlap),事先说明,本文中的绘图均使用一个几行的简单小代码进行了修饰: function defualtAxes axgca;hold on;box on ax.XGridon; ax.YGridon; ax.XMinorTickon; ax.YMinor…...
Kubernetes 一键部署利器:kubeadm
文章目录集群部署痛点kubeadm 的工作原理kubeadm init 的工作流程kubeadm join 的工作流程kubeadm 的部署配置参数集群部署痛点 Kubernetes 的部署一直以来都是挡在初学者前面的一只“拦路虎”。尤其是在 Kubernetes 项目发布初期,它的部署完全要依靠一堆由社区维护…...
[jS 事件循环理解] 主线程 宏任务 微任务 - 执行顺序优先级理解
最近看了一个帖子 事件循环机制-宏任务-微任务 把js单线程中 , 主线程 | 宏任务 | 微任务 的调用顺序讲解的很直白精巧 , 记录一下以供查阅 1.主线程, 可以理解为从上到下顺序执行的一个js线程 2. 宏任务 script / setTimeOut /setInterval等 3. 微任务主要有promise等 4. 热…...
顺序表和链表的比较
这两个结构各有优势,相辅相成。 顺序表: 优点: 1.支持随机访问。 2.CPU高速缓存命中率更高。(物理空间连续) 缺点: 1.头部和中部插入和删除时间效率低(O(n))。 2.连续的物理空间,空间不够后需要增容:…...
Java为什么只能单继承???
目录 先屡清楚继承和实现的区别: 分析原因: 多继承虽然能使子类同时拥有多个父类的特征,但是其缺点也是很显著的,主要有两方面: (1)如果在一个子类继承的多个父类中拥有相同名字的实例变量,子类在引用该…...
数据安全-分类分级 调研分析报告
目录 前言一、数据分类分级概述1.数据分类2.数据分级二、数据分类分级原则三、数据分类分级的框架和方法1.数据分类分级的框架2.分类标准分类常见的方法2.1 MECE2.2 线分法和面分法及混合分法2.3 数据主题域2.4 技术选型维度2.5 以业务应用维度2.6 信息安全隐私方面的分类法3.分…...
浏览器对象详解
文章目录浏览器对象详解一、参考资料二、认识浏览器运行态下的 js1.问:是否了解浏览器的执行态(分层设计)?2.BOM1.[location](https://developer.mozilla.org/zh-CN/docs/Web/API/Location)拓展方向:2.[History](https…...
异步电路后端实现流程(cdc signOff 后端做什么)
一种后端异步电路的signOff流程同步电路和异步电路分别signOff对于同步电路,后端会分析sta setup/hold,这里不在赘述。在该scenario下 异步电路是不会分析,也不会关注异步电路之间的走线在cdc scenario(mode)下sdc有一下设置:将所…...
Linux网络编程实战介绍
文章目录 前言一、Linux网络编程介绍二、文章目录总结前言 本专栏将为大家讲解Linux网络编程的知识,本专栏只需要有C语言基础即可学习,学习本专栏将大大提高你的C语言水平,当然了我也还会在ARM板子上进行实验将Linux驱动也和网络编程联系起来,方便大家去实现自己的项目。我…...
C++概述 课堂笔记
函数的重载在C语言中函数名是唯一的,不可以重复定义,当我们利用函数执行,功能相似的函数,我们也不能使用同一个函数,比如说,求整型的函数,不能用来求浮点型、字符型。在C中引入函数重载的概念&a…...
一文读懂SpringBoot整合Elasticsearch(一)
(本篇文章主要介绍Spring Boot如何整合Elasticsearch,包括基本配置、数据操作、搜索功能等方面。) 一、前言 Elasticsearch是一款全文搜索引擎,可用于快速、准确地存储、搜索和分析大量数据。而Spring Boot是一款快速开发框架&a…...
(数论)(枚举)(前缀和)1230. K倍区间
目录 题目链接 一些话 切入点 流程 套路 ac代码 题目链接 1230. K倍区间 - AcWing题库 ~数~啦!我草,又~在~水~字~数~啦!我草,又~在~水&…...
万字带你深入理解 Linux 虚拟内存管理(下)
接上文:万字带你深入理解 Linux 虚拟内存管理(上) 6. 程序编译后的二进制文件如何映射到虚拟内存空间中 经过前边这么多小节的内容介绍,现在我们已经熟悉了进程虚拟内存空间的布局,以及内核如何管理这些虚拟内存区域&…...
【iOS】—— JSONModel源码学习
JSONModel 文章目录JSONModel关于JSONModel的用法initWithDictionary等方法load方法实现load方法调用时机init方法__setup__方法__inspectProperties:方法__doesDictionary方法__importDictionary方法关于JSONModel的用法 可以参考之前写的博客:【iOS】—— JSONMo…...
单片机怎么实现真正的多线程?
所谓多线程都是模拟的,本质都是单线程,因为cpu同一时刻只能执行一段代码。模拟的多线程就是任务之间快速切换,看起来像同时执行的样子。据说最近有多核的单片机,不过成本应该会高很多。对于模拟的多线程,我知道的有两种…...
做效果图网站有哪些/百度广告客服电话
Office成长课堂 点击左上角蓝字快速关注表格素材下载链接:https://pan.baidu.com/s/1bcuTsgrh0-Ge9vEPXG0Liw 提取码:72ig复制链接至电脑浏览器地址栏打开。案例检查字符串最右边的字符是文本字符,还是数字,如果是数字,…...
用wang域名做购物网站怎么样/sem是什么意思中文
脑图时刻 基带信号与宽带信号 编码与调制 数字数据编码为数字信号 数字数据调制为模拟信号 模拟数据编码为数字信号 模拟数据调制为模拟信号...
手机网站建设价格低/找百度
问题描述 我的Emacs使用了Purcell的配置,在其配置中使用了whitespace-cleanup,且通过在.emacs.d/lisp/init-edit-utils.el中设定: (require whitespace-cleanup-mode) (global-whitespace-cleanup-mode t)这样设定后,默认会全局使…...
禁止wordpress网站上传图片时自动生成三张图片方法/百度手机seo软件
AUTOSAR_EXP_PlatformDesign - 10 Persistency 【translated by sky8336, 2019.06.09, Shanghai】 10 Persistency 10.1Overview 持久性为自适应平台的应用程序和其他功能集群提供了在自适应机器的非易失性内存中存储信息的机制。数据在启动和点火周期是可获得的。持久性提…...
seo 网站地图/青岛网
今天早晨,打开数据库一看,保存的数据全不见了,只剩下一个叫PLEASE_READ_ME_VVV的数据库。里面写着To recover your lost Database and avoid leaking it: Send us 0.045 Bitcoin (BTC) to our Bitcoin address 1McksxpysJGSG9a9zHvan5f8Y1nfp…...
怎么做软文链接打开后是自定义网站/seo推广外包
在开发spring boot应用服务的时候,难免会使用到异步任务及线程池。spring boot的线程池是可以自定义的,所以我们经常会在项目里面看到类似于下面这样的代码 Bean public Executor taskExecutor() {ThreadPoolTaskExecutor executor new ThreadPoolTask…...