一、准备工作

1. PC/服务器

  • T113-S3 SDK:Tina-Linux-20231212.tar.gz

  • WS73 SDK:ws73_sdk_linux_ws73_1.10.111.tar.gz

  • Docker:用于部署开发容器

    使用dev containers进行开发

    devcontainer.json

    Dockerfile

2. T113-S3开发版


二、编译T113-S3内核

1. 内核参数配置

进入Tina-Linux目录,执行source build/envsetup.sh​,然后运行lunch,选择6. t113_bingpi_m2-tina

随后运行make kernel_menuconfig

配置CFG80211/MAC80211

[!NOTE]
CFG80211是内核中Wi-Fi驱动和用户态进程的标准接口。

在弹出的内核配置菜单,按/打开搜索框

在搜索框中键入80211,回车搜索

1跳转到对应配置项

选上图中标注的两项

配置USB2.0

同样的方法选上USB2.0

[!NOTE]
由于wpa_supplicant、hostapd应用采用Netlink技术与Linux内核通信,需要配置Netlink。

选上后回车进入,选上下图两项

配置NAT转发(可选)

[!NOTE]
如果使用SoftAP网络共享功能,需要配置NAT转发功能。

回到上一级,按需选择新增项

2. 编译内核

1
make

/workspaces/t113-sdk/Tina-Linux/out/t113-bingpi_m2/staging_dir/target/host/lib/libglib-2.0.la​文件内的dependency_libs​、libdir路径为绝对路径,需要手动更改为正确路径。

如果报错Environment variable $SOURCE_DATE_EPOCH: No digits were found: ​请在Tina-Linux下使用date +%s > version.date命令,生成当前版本时间。


三、编译WS73

1. 修改文件

ws73_default.config

ws73/build/config/ws73_default.config

1
2
3
4
WSCFG_CROSS_COMPILE="/workspaces/t113-sdk/Tina-Linux/prebuilt/gcc/linux-x86/arm/toolchain-sunxi-musl/toolchain/bin/arm-openwrt-linux-muslgnueabi-"
WSCFG_KERNEL_DIR="/workspaces/t113-sdk/Tina-Linux/lichee/linux-5.4"
# WSCFG_BUS_SDIO is not set
WSCFG_BUS_USB=y

其他不变

oal_kernel_file.h

ws73/driver/wifi/inc/oal/linux/oal_kernel_file.h

1
2
3
4
5
6
7
8
9
10
11
12
13
OAL_STATIC OAL_INLINE osal_void oal_set_ds(osal_void)
{
// #if defined(LINUX_VERSION_CODE) && (LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0))
// oal_set_fs(get_ds());
// #else
// #ifdef CONFIG_SET_FS
// oal_set_fs(KERNEL_DS);
// #else
// force_uaccess_begin();
// #endif
// #endif
oal_set_fs(KERNEL_DS);
}

wal_linux_dfx.c

ws73/driver/wifi/wal/release/linux/wal_linux_dfx.c

1
2
3
4
5
6
7
8
9
10
static osal_void wal_dfr_open_dev(oal_net_device_stru *netdev)
{
rtnl_lock();
// #if LINUX_VERSION_CODE < KERNEL_VERSION(5,10,0)
// dev_open(netdev);
// #else
dev_open(netdev, NULL);
// #endif
rtnl_unlock();
}

2. 编译

ws73目录下

1
make

四、固件烧写及驱动安装

1. T113-S3 固件烧写

如果原固件没有满足内核参数配置的要求

则参考BingPi-M2快速上手_V1.0.pdf中的三、SDK烧写部分

将编译出的tina_t113-bingpi_m2_uart3.img烧录到目标板上

2. WS73固件/驱动拷贝

固件

编译成功后将ws73/firmware/us目录下的固件拷贝到目标板的对应文件夹下

具体目录参照ws73_default.config的以下字段:

1
2
3
4
5
6
7
#
# Configure the loading path of files such as firmware
#
CONFIG_FIRMWARE_BIN_PATH="/etc/ws73/ws73.bin"
CONFIG_FIRMWARE_WIFICALI_PATH="/etc/ws73/wifi_cali.bin"
CONFIG_FIRMWARE_BSLECALI_PATH="/etc/ws73/btc_cali.bin"
CONFIG_FIRMWARE_WOW_PATH="/etc/ws73/wow.bin"

驱动

ws73/output/bin​目录下的ws73_cfg.ini拷贝到目标板的对应文件夹下

具体目录参照ws73_default.config的以下字段:

1
CONFIG_INI_FILE_PATH="/etc/ws73_cfg.ini"

再将ws73/output/bin目录下的

  • plat_soc.ko:WS73平台驱动模块
  • wifi_soc.ko:WS73WiFi驱动模块
  • ble_soc.ko:WS73蓝牙驱动模块
  • sle_soc.ko:WS73星闪驱动模块

放到目标板的自定目录下,如/lib/modules/5.4.61


五、使用

1. WiFi

创建套接字目录

1
mkdir -p /var/run/wpa_supplicant && chmod 777 /var/run/wpa_supplicant

加载驱动

1
2
insmod plat_soc.ko
insmod wifi_soc.ko

加载驱动后使用ifconfig -a​查看是否出现wlan0网卡

配置WiFi参数

配置wifi参数指的是设置我们要连接的WiFi名称和密码

修改配置文件/etc/wpa_supplicant.conf,填写WiFi名称和密码

1
vi /etc/wpa_supplicant.conf
1
2
3
4
5
6
7
8
9
10
11
ctrl_interface=/var/lock/wpa_supplicant
ctrl_interface_group=0
ap_scan=1
network={
ssid="WifiName"
scan_ssid=1
key_mgmt=WPA-EAP WPA-PSK IEEE8021X NONE
pairwise=TKIP CCMP
group=CCMP TKIP WEP104 WEP40
psk="WifiPassword"
priority=5

其中的

  • ssid:要连接的WiFi名称
  • psk:要连接的WiFi密码

联网

启用网卡

1
ifconfig wlan0 up

启动wpa_supplicant

1
wpa_supplicant -B -Dnl80211 -iwlan0 -c/etc/wpa_supplicant.conf -C/var/run/wpa_supplicant

动态分配ip

1
udhcpc -i wlan0

ping测试

1
ping baidu.com

一些命令

1
2
3
4
5
6
7
8
#查询网卡状态
wpa_cli -p/tmp/lock/wpa_supplicant -i wlan0 status
#搜索附近网络功能 no/ok
wpa_cli -p/tmp/lock/wpa_supplicant -i wlan0 scan
#搜索附近网络,并列出结果
wpa_cli -p/tmp/lock/wpa_supplicant -i wlan0 scan_resul
#查看当前连接的是哪个网络
wpa_cli -p/tmp/lock/wpa_supplicant -i wlan0 list_network

2. 蓝牙

[!NOTE]
暂未测试

3. 星闪

[!NOTE]
暂未测试


参考

Tina_Linux_Wi-Fi_开发指南.pdf

WS73V100 Linux平台驱动移植 用户指南_08.pdf

WS73V100 Linux Wi-Fi、BLE软件开发指南_09.pdf

WS73V100 常见问题 FAQ_05.pdf

【星闪】星闪三模网卡M573H-USBDG让香橙派5 Plus秒变星闪神器!手把手教你~