WS73V100 Android平台WiFi移植
1.驱动加载步骤
步骤 1: 默认加载 cfg80211.ko
步骤 2: 确认采用的驱动加载模式,若通过配置启动脚本来加载驱动,可直接跳到步骤 4;若通过适配驱动模组设备号,再加载驱动,可继续执行步骤 3。
步骤 3: 针对 USB 模组,可执行“lsusb”查看模组的 VID 和 PID 号,其中 WS73 模组默认值为 ffff:3733。
针对 SDIO 模组,可查看内核实际注册的设备节点来获取模组的 VID 和 PID 号,其中WS73 模组默认值为 ffff:3733。
步骤 4: 先加载 plat_soc.ko,再根据需要加载 wifi_soc.ko、sle_soc.ko、ble_soc.ko(wifi、sle、ble 间无依赖关系,只要在 plat ko 后加载即可)。
Android 平台 WiFi 移植
驱动编译配置
编译工具链接需要提前配置环境变量,例如 export PATH=$PATH:/home/wifi/share/armlinux-gnueabihf/bin,路径根据实际情况配置。
使用不同工具链时,可能会导致编译过程中出现告警导致编译失败,可在相关驱动组件的Makefile 文件中修改编译选项。
步骤 1: 解压驱动源码包并配置编译参数。
将驱动源码包 WS73V100.tar.gz 置于服务器并进行解压,参考 2.2 编译 SDK 配置编译工具链、内核路径、CPU 架构等,命令如下:
$ tar -xzf WS73V100.tar.gz
$ cd WS73V100
步骤 2: 完成配置后,执行 make all 命令编译驱动文件,在 output 生成目标文件:
$ make android
编译结果输出到”output”目录下,如表 3-1 所示。
表3-1 全量编译结果
原生软件及库文件配置
通过驱动编译配置已完成驱动的编译,可参考业务调试直接加载驱动,验证驱动功能是否正常。
本章以 Android 10 平台为例,介绍将 WS73 驱动代码移植到 Android 编译框架的方法,其他 Android 平台移植步骤与 Android 10 平台类似。各厂家文件路径存在差异,具体移植流程需要咨询对应主控平台厂家。
{vendor}:主控平台厂家名
{product}:主控平台厂家产品名
步骤 1: 进入 device/{vendor}/{product}/BoardConfig.mk,添加如下原生修改:
WPA_SUPPLICANT_VERSION := VER_0_8_X
BOARD_WPA_SUPPLICANT_DRIVER := NL80211
BOARD_WPA_SUPPLICANT_PRIVATE_LIB := lib_driver_cmd_bcmdhd
BOARD_HOSTAPD_DRIVER := NL80211
BOARD_HOSTAPD_PRIVATE_LIB := lib_driver_cmd_bcmdhd
BOARD_WLAN_DEVICE := bcmdhd
目前 Android 系统中 wpa_supplicant 软件对应的源码路径:external/wpa_supplicant_8,该软件使用的原生库文件为 libwifi-hal.so,对应 Android 源码路径:
frameworks/opt/net/wifi/libwifi_hal。
一般用户都会按照以上标识,写明使用的具体 wpa_supplicant 配置。如果不清楚用户是否真的使用原生配置,可在用户的代码路径 device/{vendor}/{product}下,搜索“BOARD_WPA_SUPPLICANT_DRIVER ”,打开对应的文件,查看用户使用的具体配置及lib 库,可执行“grep -rn BOARD_WPA_SUPPLICANT_DRIVER”进行搜索。
步骤 2: 进入 Android 根目录,可选择整编 Android 镜像或进入对应目录进行各模块编译:
# 整体编译
$ source build/envsetup.sh
$ lunch {product}
$ make -j32
# 模块编译
$ source build/envsetup.sh
$ lunch {product}
# 编译wpa_supplicant对应的静态库lib_driver_cmd_bcmdhd.a
$ cd hardware/broadcom/wlan/bcmdhd/wpa_supplicant_8_lib
$ mm -j8
# 编译wpa_supplicant可执行文件
$ cd -
$ cd external/wpa_supplicant_8
$ mm -j8
# 编译libwifi-hal对应的静态库libwifi-hal-bcm.a
$ cd hardware/broadcom/wlan/bcmdhd/wifi_hal
$ mm -j8
# 编译libwifi-hal.so
$ cd -
$ cd frameworks/opt/net/wifi/libwifi_hal
$ mm -j8
步骤 3: 获取原生软件及库文件:
- wpa_supplicant 文件一般生成在 out/target/product/{product}/system/bin/或out/target/product/{product}/vendor/bin/hw/目录下。对应单板上的路径为system/bin 或/vendor/bin/hw。
- libwifi-hal.so 文件一般生成在 out/target/product/{product}/vendor/lib64/或out/target/product/{product}/vendor/lib/目录下。对应单板上的路径为 vendor/lib64或 vendor/lib。
文件部署
根据平台上所使用的路径进行文件存放即可。一般情况为:
- Android7.0 及以下版本使用的是/system 路径。
- Android8.0 及以上版本使用的是/vendor 路径。
Android7.0 及以下版本
- 驱动 ko 的路径会存放在/system/lib/modules 或/system/lib64/modules 目录下。
- wpa_supplicant 会存放在/system/bin 目录下。
- firmware 文件会存放在/system/etc/firmware 目录下。此路径与平台 uboot 中
firmware_class.path 的设定有关,实际需要根据主控平台的路径确定。 - ini 配置文件会存放在/system/etc/wifi 目录下。
Android8.0 及以上版本
- 驱动 ko 的路径会存放在/vendor/lib/modules 或/vendor/lib64/modules 目录下。
- wpa_supplicant 会存放在/vendor/bin/hw 目录下。
- firmware 文件会存放在/vendor/firmware 目录下。此路径与平台 uboot 中
firmware_class.path 的设定有关,实际需要根据主控平台的路径确定。 - ini 配置文件会存放在/vendor/etc/wifi 目录下
业务调试
步骤 1: 将 WS73 所需的文件放至单板对应目录下,其中固件文件在 firmware 目录下,驱动文件在 output 目录下,如表 3-2 所示
步骤 2: 加载 Wi-Fi 驱动文件,命令如下:
insmod /vendor/lib/modules/plat_soc.ko
insmod /vendor/lib/modules/wifi_soc.ko
步骤 3: 启动 wpa_supplicant,命令如下:
/vendor/bin/hw/wpa_supplicant -ip2p0 -Dnl80211 -c/data/vendor/wifi/wpa/p2p_supplicant.conf -
puse_p2p_group_interface=0 -N -iwlan0 -Dnl80211 -c/data/vendor/wifi/wpa/wpa_supplicant.conf -
O/data/vendor/wifi/wpa/sockets &
-O/data/vendor/wifi/wpa/sockets 也需要根据主控平台进行配置,一般在/data/vendor/wifi/wpa/sockets 或/data/misc/wifi/sockets 目录下。(注意:O,O 为大写)
wpa_supplicant.conf 与 p2p_supplicant.conf 的文件路径需要根据主控平台路径进行配置,一般在/data/vendor/wifi/wpa或/data/misc/wifi/目录下。
步骤 4 启动 wpa_cli,进行 Wi-Fi 扫描链接,命令如下:
启动 wpa_cli
wpa_cli -iwlan0 -p/etc/Wireless/wpa_supplicant
启动 wpa_cli,执行扫描。
a. 在“>”后执行“scan”命令,驱动扫描流程。
b. 收到“CTRL-EVENT-SCAN-RESULTS”后,执行“scan_results”,获得扫描结果。> scan > scan_results
启动 wpa_cli,执行连接。
a. 在“>”后执行“add_network”命令,该命令会返回一个数字,表示添加的网络 ID 号。
b. 执行“set_network 网络 id ssid “AP 的 SSID””命令,配置网络 ID 的SSID。
c. 执行“set_network 网络 id key_mgmt NONE”命令,配置网络 ID 的加密方式。
d. 执行“select_network 网络 id”命令,选择并网络 ID 进行连接。
e. 收到“CTRL-EVENT-CONNECTED”表示连接成功。
> add_network
> set_network 0 ssid “sta-test”
> set_network 0 key_mgmt WPA-PSK
> set_network 0 psk “12345678”
> select_network 0
> q
图3-1 STA 链接过程
步骤 5: 配置 Android 原生流程
若步骤 1~步骤 4 均执行成功,则证明 Wi-Fi 驱动功能正常,接下来可以对 Android WiFi 启动流程进行配置。
- 根据主控平台,在 Android 上进行编译时,将步骤 1 中的驱动文件拷贝到步骤 1中单板对应的路径下。
- 根据主控平台,在 Android 上启动流程中加载 ko;一般可把步骤 2 加载驱动操作写到 device/{vendor}/{product}/init.{product}.rc 文件中。
- 根据主控平台,在 Android 上启动 wpa_supplicant。一般可把步骤 3 修改成如下规则,再写到 device/{vendor}/{product}/init.{product}.rc 文件中。
service wpa_supplicant /vendor/bin/hw/wpa_supplicant \
-ip2p0 -Dnl80211 -c/data/vendor/wifi/wpa/p2p_supplicant.conf \
-e/data/misc/wifi/entropy.bin -puse_p2p_group_interface=0 -N \
-iwlan0 -Dnl80211 -c/data/vendor/wifi/wpa/wpa_supplicant.conf \
-O/data/vendor/wifi/wpa/sockets \
-g@android:wpa_wlan0
interface android.hardware.wifi.supplicant@1.0::ISupplicant default
interface android.hardware.wifi.supplicant@1.1::ISupplicant default
interface android.hardware.wifi.supplicant@1.2::ISupplicant default
class main
socket wpa_wlan0 dgram 660 wifi wifi
disabled
oneshot
步骤 6: 根据上述修改,编译出 Android 镜像,通过设置界面连接 Wi-Fi 即可。
- 分享
- 举报
-
浏览量:991次2024-03-15 10:04:21
-
浏览量:1509次2024-03-16 10:01:36
-
浏览量:5598次2021-04-12 16:15:46
-
浏览量:1101次2023-10-13 10:22:12
-
浏览量:1889次2023-04-03 15:28:29
-
浏览量:1962次2023-04-03 15:51:40
-
浏览量:1040次2024-01-03 17:15:03
-
浏览量:7137次2021-01-16 14:52:44
-
浏览量:843次2024-01-24 15:46:44
-
浏览量:4866次2021-04-12 15:49:26
-
浏览量:2083次2023-07-17 16:59:20
-
浏览量:6221次2021-01-15 17:26:20
-
浏览量:7939次2021-06-04 16:25:58
-
浏览量:2609次2020-08-13 11:47:44
-
浏览量:2243次2022-07-09 08:47:55
-
浏览量:3006次2023-07-12 15:18:09
-
浏览量:683次2024-01-03 12:58:35
-
浏览量:1088次2023-12-24 13:08:48
-
浏览量:1727次2023-08-15 19:14:23
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
四叶草~
感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明