6. CV184x RTL8189FS WiFi 连接流程说明¶
本文档说明在 cv1842 等 CV184x 平台启用 RTL8189FS SDIO WiFi 后的内核与设备树配置要点(详见《配置说明》章节)、编译产物路径,以及 STA(wpa_supplicant)与 AP(hostapd)用户态工具的打包与板级使用流程。
6.1. 编译与产物¶
执行 build_osdrv (或工程等价构建命令)后,会生成 8189fs.ko。拷贝到 rootfs 的路径由 osdrv 的 INSTALL_DIR 决定,例如:
install/soc_cv1842hp_wevb_0014a_emmc/rootfs/system/ko/3rd/8189fs.ko
将上述路径下的 8189fs.ko 拷贝到板子可访问目录(如 /mnt/sd/)。若已在 menuconfig 中开启安装无线驱动 ko,镜像内可能已包含该模块,则无需再手动拷贝。
6.2. 板级 WiFi 连接流程¶
6.2.1. 准备 wpa_supplicant、hostapd 与库(开发机)¶
来源说明:wpa_supplicant 与 hostapd 同源,均来自 hostap 工程交叉编译后的安装树;SDK 中预置目录为 ramdisk/rootfs/public/wifi/musl_arm/ (与 packages_arch=musl_arm 一致)。无需单独再下载 hostapd 安装包,与 wpa 相同,从该目录拷贝二进制即可。
若 rootfs 内未带上述工具,在开发机上打包时请注意:FAT 格式的 SD 卡不能建立符号链接,需复制带版本号的 so,再复制一份短文件名供动态链接器查找。
cd /path/to/your/sdk # 替换为实际 SDK 根目录
W=ramdisk/rootfs/public/wifi/musl_arm
rm -rf wifi_tools
mkdir -p wifi_tools
# STA
cp $W/usr/sbin/wpa_supplicant $W/usr/sbin/wpa_cli $W/usr/sbin/wpa_passphrase wifi_tools/
# AP(与 wpa 同目录,同一次预编译产出)
cp $W/usr/sbin/hostapd wifi_tools/
# 若存在可一并打包:hostapd_cli
test -f $W/usr/sbin/hostapd_cli && cp $W/usr/sbin/hostapd_cli wifi_tools/
cp $W/usr/lib/libnl-3.so.200.26.0 wifi_tools/
cp $W/usr/lib/libnl-genl-3.so.200.26.0 wifi_tools/
cp $W/usr/lib/libnl-route-3.so.200.26.0 wifi_tools/
cp wifi_tools/libnl-3.so.200.26.0 wifi_tools/libnl-3.so.200
cp wifi_tools/libnl-genl-3.so.200.26.0 wifi_tools/libnl-genl-3.so.200
cp wifi_tools/libnl-route-3.so.200.26.0 wifi_tools/libnl-route-3.so.200
cd wifi_tools
tar -cvf ../wifi_tools.tar .
将生成的 wifi_tools.tar 拷贝到板子可访问目录(如 U 盘/SD 的 /mnt/sd/)。
注解
文中 200.26.0 以你树内实际 usr/lib/libnl-*.so.* 文件名为准;若升级 libnl,需同步修改 cp 的源文件名。
6.2.2. STA:wpa_supplicant 配置文件¶
在板子可写目录创建 wpa_supplicant.conf (例如 /mnt/sd/wpa_supplicant.conf),内容示例(SSID/密码按实际修改):
network={
ssid="111"
psk="1234qwer"
key_mgmt=WPA-PSK
}
6.2.3. STA:板端操作步骤¶
以下假设 wifi_tools.tar 与 wpa_supplicant.conf 均在 /mnt/sd/,且 8189fs.ko 已拷贝到板子(如 /mnt/sd/)。
# 1. 加载 WiFi 驱动
insmod /mnt/sd/8189fs.ko
# 2. 解压 wpa_supplicant、hostapd 与库
mkdir -p /mnt/sd/wifi
cd /mnt/sd/wifi
tar -xvf /mnt/sd/wifi_tools.tar
# 3. 设置库路径并启动 wpa_supplicant(STA)
export LD_LIBRARY_PATH=/mnt/sd/wifi
/mnt/sd/wifi/wpa_supplicant -B -i wlan0 -c /mnt/sd/wpa_supplicant.conf
# 4. 等待几秒后获取 IP
sleep 5
udhcpc -i wlan0
# 5. 查看 wlan0 状态与 IP
ifconfig wlan0
若 udhcpc 长时间无响应,可检查热点是否开启 DHCP;部分热点网段为 192.168.43.x,可尝试手动配置:
ifconfig wlan0 192.168.43.100 netmask 255.255.255.0 up
route add default gw 192.168.43.1
6.2.4. STA:验证¶
ifconfig wlan0应显示inet addr与UP BROADCAST RUNNING。ping 192.168.43.1(或热点网关)可验证链路;若热点共享网络,可再ping 8.8.8.8验证外网。
6.2.5. AP 模式:hostapd¶
二进制:与上一节相同,已从
$W/usr/sbin/hostapd打入wifi_tools.tar,解压后位于/mnt/sd/wifi/hostapd。依赖库:与 wpa_supplicant 相同的 libnl 短名 so,设置
LD_LIBRARY_PATH=/mnt/sd/wifi即可。
在板子 /mnt/sd/ 下创建 hostapd.conf (interface= 与实际 AP 网口一致;SSID/密码请按实际修改):
interface=wlan1
driver=nl80211
ssid=MyAP
hw_mode=g
channel=6
country_code=CN
ieee80211d=1
auth_algs=1
wmm_enabled=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=12345678
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
ieee80211w=0
6.2.6. AP 典型板端步骤(经 eth0 做 NAT 上行)¶
典型场景:wlan0 曾作为 STA 连过热点(如 192.168.43.0/24),eth0 为有线或另一路上网(如 192.168.137.0/24);在 wlan1 上开 AP,下挂终端经 wlan1 → NAT → eth0 出网。若 ip route 中存在经 wlan0 的 default 路由,会与“默认走 eth0 上行”冲突,可先删掉该默认路由(网关与接口以你板子 ip route 为准)。
udhcpd.conf (放在 /mnt/sd/udhcpd.conf;网段可自定义):
start 192.168.1.100
end 192.168.1.200
interface wlan1
max_leases 20
option subnet 255.255.255.0
option router 192.168.1.1
option dns 8.8.8.8
执行以下命令配置转发规则:
export LD_LIBRARY_PATH=/mnt/sd/wifi
# 删除 STA 侧 default,仅保留经 eth0 的 default(上行口按实际修改)
ip route del default via 192.168.43.1 dev wlan0
# 开启 IPv4 转发
echo 1 > /proc/sys/net/ipv4/ip_forward
# NAT:若已存在则不再重复添加(上行口 eth0 按实际修改)
iptables -t nat -C POSTROUTING -o eth0 -j MASQUERADE 2>/dev/null || \
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# 转发策略
iptables -P FORWARD ACCEPT
iptables -F FORWARD
iptables -A FORWARD -i wlan1 -j ACCEPT
iptables -A FORWARD -o wlan1 -j ACCEPT
# hostapd 需要运行时目录
mkdir -p /var/run/hostapd
killall wpa_supplicant 2>/dev/null
# AP 本机 IP 须与 udhcpd 中 option router 一致
ifconfig wlan1 192.168.1.1 netmask 255.255.255.0 up
/mnt/sd/wifi/hostapd -B /mnt/sd/hostapd.conf
udhcpd /mnt/sd/udhcpd.conf
udhcpd 说明:若系统无 udhcpd 需加入 rootfs 或改用 dnsmasq;前台调试可加 -f;部分环境需先创建 leases 文件(如执行 touch /var/lib/misc/udhcpd.leases,路径以本机 udhcpd –help 为准)。
无 DHCP 时:下挂设备可使用手工静态 IP(192.168.1.x,网关 192.168.1.1,掩码 255.255.255.0)。
若未做过 STA、本无 wlan0 的 default 路由,可省略 ip route del;192.168.43.1 与 wlan0 仅作示例。iptables 与 ip_forward 需内核打开 netfilter 且 rootfs 带 iptables。
停止:执行 killall hostapd;若跑了 udhcpd 则 killall udhcpd(或按 PID 结束)。