首页>>科技 >>内容

Tina,Linux_Wi-Fi开发指南

发布时间:2023-09-25 10:14:11编辑:温柔的背包来源:

很多朋友对Tina,Linux_Wi-Fi开发指南不是很了解,每日小编刚好整理了这方面的知识,今天就来带大家一探究竟。

Tina,Linux_Wi-Fi开发指南

Tina Linux Wi-Fi 开发指南1 前言1.1 文档简介介绍了Wi-Fi 驱动在全志平台上的移植,并介绍了Tina Wi-Fi 管理框架,包括Station、Ap 和Wi-Fi FAQ。

1.2 目标读者包括Tina平台的客户以及对Tina Wi-Fi感兴趣的同事。

1.3 适用范围:全志软件平台Tina v3.0及以上版本。全志硬件平台R系列(R6、R11、R16、R18、R30、R40、R328、R331、R329、R818、R528…)。全志硬件平台MR系列(MR133、MR813…)。全志硬件平台H系列(H133…)。全志硬件平台V系列(V853…)。

2 Wi-Fi 简介2.1 Wi-Fi 的几种工作模式目前,Tina 平台上的Wi-Fi 一般可以有STATION、AP、MONITOR 三种工作模式。 • 工作站:连接到无线网络的终端。大多数无线网卡默认都是这种模式,也是常用的模式。 • AP:无线接入点,常称为热点,如路由器功能。 • MONITOR:也称为混杂设备监控模式,所有数据包均不经过过滤就传输到主机。

2.2 Tina Wi-Fi 软件结构

图2-1:Tina软件结构图

• wifimanager-v2.0:除了wifimanager-v1.0的功能(STATION模式下使用,提供Wi-Fi连接扫描等功能)外,还集成了softap(启动AP功能)和smartlink(多种网络配置)模式))功能,一个应用程序集成了多种wifi功能,方便客户使用和管理。 • wpa_supplicant:开源无线网络配置工具,主要用于支持WEP、WPA/WPA2和WAPI无线协议和加密认证。实际工作内容是通过socket与驱动程序交互,向用户报告数据。 • hostapd:是AP 和认证服务器的用户模式守护进程。 • 监视器:混杂设备监听模式下的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 [启用/禁用] 重新连接到断开的网络

wifi -r [ssid/all] 删除保存的指定网络注意:

ssid 网络名称

密码密钥

2.3.2 ap模式下,执行以下命令前请确保wifi_deamon后台进程已启动。如果没有启动,请先启动wifi_deamon后台进程。

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

wifi -l 列出AP热点连接的STA信息注意:

ssid 网络名称

密码密钥

AP模式和station模式不一定共存于不同的模块上。详细信息请参见第5 节。

2.3.3 监控模式在执行以下命令之前,请确保wifi_deamon 后台进程已启动。如果没有启动,请先启动wifi_deamon后台进程。

wifi -o 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模块移植

图3-1:主控与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模块移植来说,重点是以上条件。针对以上工况,全志提供了相应的驱动程序。根据总线设备驱动模型,只需要根据各个平台调整驱动即可。

只需在计算机上配置设备即可。除了dts(linux-3.4内核没有dts)之外,allwinner设备还可以通过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路径:蒂娜/设备/配置/芯片/xxx(r328)/configs/xxx(perf1)/board.dts

linux 3.4 设备(sys_config.fex 配置)

[rf_para] module_num=10 module_power1='axp22_dldo1' module_power1_vol=3300000 module_power2='axp22_dldo2' module_power2_vol=3300000 module_power3='axp22_aldo3'module_power3_vol=3300000 power_switch=chip_en=lpo_use_apclk='losc_out' [wifi_para] wifi_used=1 wifi_sdc_id=1 wl_reg_on=port:PL06 wl_host_wake=port:PL07 [mmc1_para] sdc_used=1 sdc_detmode=4 sdc_buswidth=4 sdc_clk=port:PG00 sdc_cmd=port:PG01 sdc_d0=port:PG02 sdc_d1=port:PG03 sdc_d2=端口:PG04 sdc_d3=端口:PG05 sdc_det=sdc_use_wp=0 sdc_wp=sdc_isio=1 sdc_regulator='无'

linux 3.4驱动路径,详细参考以下代码路径

蒂娜/lichee/linux-3.4/drivers/misc/rf_pm

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

[sdc1] sdc1_used=1 总线宽度=4 sdc1_clk=端口:PG00 sdc1_cmd=端口:PG01 sdc1_d0=端口:PG02 sdc1_d1=端口:PG03 sdc1_d2=端口:PG04 sdc1_d3=端口:PG05 sd-uhs-sdr50=s d- uhs -ddr50=sd-uhs-sdr104=cap-sdio-irq=keep-power-in-suspend=ignore-pm-notify=max-Frequency=150000000 mix-Frequency=150000000 [wlan] wlan_used=1 Compatible='allwinner,sunxi-wlan' Clocks='losc_out' wlan_power_num=2 wlan_power1='vcc-wifi1' wlan_power2='vcc-wifi2' wlan_io_regulator='vcc-io-wifi' wlan_busnum=1 wlan_regon=端口:PE06 wlan_hostwake=端口:PE05 [regulator0] 兼容='axp221s-regulator' 调节器_count=20 . 调节器2='axp221s_dcdc2 无vdd-cpua' 调节器3='axp221s_dcdc3 无vdd- sys vdd-gpu'调节器4='axp221s_dcdc4无'调节器5='axp221s_dcdc5无vcc-dram'6='axp221s_rtc无vcc-rtc'调节器7='axp221s_aldo1无vcc-25 csi-avdd'调节器8='axp221s_aldo2无vcc-ephy0' Regulator9='axp221s_aldo3 none avcc vcc-pll'Regulator10='axp221s_dldo1 none vcc-io-wifi vcc-pg' Regulator11='axp221s_dldo2 none vcc-wifi1' 调节器12='axp221s_dldo3 none vcc-wifi2' 调节器13='axp221s_dldo4 none vdd-sata-25 vcc-pf'调节器14='axp221s_eldo1 none vcc-pe csi-iovcc'

Linux 3.4以上驱动,具体请参考以下代码路径

蒂娜/lichee/linux-XXX/drivers/misc/sunxi-rf

3.1 模块移植步骤下面总结了将新模块移植到Tina 平台的步骤。

3.1.1 修改模组厂提供的Wi-Fi驱动。模组厂提供的驱动适配Tina平台。主要修改为调用Tina平台提供的开关机、刷卡功能以及修改固件的下载路径。配置Kconfig和

生成文件等

下面介绍Tina平台向驱动程序提供的功能。 Linux 3.4 与其他内核略有不同。

linux 3.4

#include #include /* *功能:sdio扫描卡*参数id:卡号,(sdio 0或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 #include #include /* *功能:获取使用的sdio卡号,对应sysconfig.fex中的wlan_busnum *返回值:sdio卡号*/extern int sunxi_wlan_get_bus_index(void); /* *功能:sdio扫描卡*参数id:卡号,(sdio 0或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); /* *功能:获取主机唤醒引脚以设置中断标志*参数:void *返回值:irq flag */extern int sunxi_wlan_get_oob_irq_flags(void);

第一步,将Wi-Fi驱动放入linux-4.9/drivers/net/wireless并填写相应的开机、刷卡等功能。

Linux 3.4的驱动请参考:

esp8089模块:

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

xr819模块:

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

Linux 3.4及以上版本驱动请参考:

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

第二步,增加内核的menuconfig配置和编译。只需要修改以下几个地方即可。

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

配置完成后,可以执行make kernel_menuconfig并选择它。编译时,会编译指定的驱动程序。

设备驱动程序--- [*] 网络设备支持--- [*] 网络设备支持--- [*] 无线LAN --- [] xxx 模块

3.1.2 增加make munconfig的配置。这一步主要是将内核中编译好的ko文件和固件复制到文件系统中。首先是配置固件。固件文件一般存储方式如下,带有模块文件名,需要添加一个mk文件才能在make munconfig中可见。

tina/package/firmware/linux-firmware/XXXmoduletina/package/firmware/linux-firmware/XXXmodule/XXX.mk 示例: tina/package/firmware/linux-firmware/xr829 make munuconfig 固件--- xr829 -firmware...... Xradio xr829 固件

二是配置ko。

tina/target/allwinner/xxx schema/modules.mk 示例:Tina-3.5.0 及更早版本:tina/target/allwinner/cowbell-perf1/modules.mk Tina-3.5.1 及更高版本:tina/target/allwinner/r328s2 -perf1/modules.mk make munuconfig 内核模块--- 无线驱动程序--- XXX 模块

3.1.3 配置sys_config.fex前面已经解释过,参见第3章开头的描述。

3.1.4 验证根据前面的配置,make kernel_menuconfig 选择了对应的模块,make menuconfig 选项对应了固件和模块,同时make munconfig 新选择了以下内容,即可验证。

make menuconfig Allwinner --- 无线--- wifimanager-v2.0.... Tina wifimanager- v2.0 wifimanager-v2.0-demo.... Tina wifimanager-v2.0 应用程序演示

验证命令

检查模块是否加载: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: 无Android, 4/5/6/7/8/9/10 : Android 版本) +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模块适配

3.1.从任何其他支持的IC解决方案复制模块配置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:=//添加内核依赖以了解位选择. AUTOLOAD:=$(call AutoProbe,8723ds) endef Define KernelPackage/net-rtl8723ds/description//make menuconfig 说明RealTek RTL8723DS 支持的内核模块endef $(eval $(call KernelPackage,net-rtl8723ds)) 一个完整的模块注:建议直接添加到平台通用配置中:tina/target/allwinner /xxx-common/modules.mk 3.2.firmwareconfiguration/package/firmware/linux-firmware/rtl8723ds///更新驱动时更新固件文件(如果有最新的) 3.3.sys_config.fe

以上知识分享希望能够帮助到大家!