网站用户需求,如何利用国外分类网站开发客户,科研网站建设,响应式网站 模版文章目录 1、环境介绍2、目标3、海华AW-CM358SM3.1、基本信息3.2、支持SDIO3.03.3、电气特性 4、适配流程步骤5、SDIO控制器适配5.1、sdio dts配置5.2、验证 6、Wi-Fi 适配6.1、wifi dts配置6.2、驱动移植6.2.1、kernel menuconfig6.2.2、传统驱动移植6.2.3、RK SDK WIFI/BT驱动… 文章目录 1、环境介绍2、目标3、海华AW-CM358SM3.1、基本信息3.2、支持SDIO3.03.3、电气特性 4、适配流程步骤5、SDIO控制器适配5.1、sdio dts配置5.2、验证 6、Wi-Fi 适配6.1、wifi dts配置6.2、驱动移植6.2.1、kernel menuconfig6.2.2、传统驱动移植6.2.3、RK SDK WIFI/BT驱动独立编译 6.3、Wi-Fi 功能验证6.3.1、加载驱动6.3.2、STA模式测试6.3.3、AP测试 7、蓝牙适配7.1、bt dts配置7.2、驱动移植7.3、蓝牙功能验证7.3.1、使能蓝牙设备7.3.2、扫描外设7.3.3、开发板发送文件给安卓手机 1、环境介绍
硬件飞凌ok3568-c开发板
软件原厂rk356x sdk
2、目标
调试海华AW-CM358SM WIFI/BT模组可以正常上网、使用蓝牙。
3、海华AW-CM358SM
3.1、基本信息 主芯片NXP的88W8987Wi-Fi接口SDIOBT接口UART
3.2、支持SDIO3.0 3.3、电气特性
AW-CM358SM的VDDIO为1.8V 所以RK3568的SDIO接口的工作电压也要是1.8V请检查设备树电源域pmu_io_domains节点vccio6是否配置为1.8v同时SDIO3.0模式必须为1.8v 4、适配流程步骤
配置设备树让SDIO控制器工作。配置设备树让SDIO控制器可以发现WIFI/BT模组。Wi-Fi适配配置设备树移植设备驱动。验证Wi-Fi功能。蓝牙适配配置设备树。验证蓝牙功能。
5、SDIO控制器适配
现在先解决“适配流程步骤”的第1第2点。即让SDIO控制器工作且可以扫到WIFI卡。
5.1、sdio dts配置
从下面两幅原理图可以得出
WIFI模组的WIFI_REG_ON引脚接到了RK3568的GPIO3_D4。WIFI模组的SDIO接口接到了RK3568的SDMMC2接口。 设备树配置如下
/* WL_REG_ON 由 sdio_pwrseq 节点进行管理控制 */
sdio_pwrseq {compatible mmc-pwrseq-simple;pinctrl-names default;pinctrl-0 wifi_enable_h;/** On the module itself this is one of these (depending* on the actual card populated):* - SDIO_RESET_L_WL_REG_ON* - PDN (power down when low)*/post-power-on-delay-ms 200;/* 这里配置的是WL_REG_ON引脚 */reset-gpios gpio3 RK_PD4 GPIO_ACTIVE_LOW;
};pinctrl {sdio-pwrseq {wifi_enable_h: wifi-enable-h {/* 这里配置的是WL_REG_ON引脚 */rockchip,pins 3 RK_PD4 RK_FUNC_GPIO pcfg_pull_none; };};
};/* SDIO接口Wi-Fi专用配置SDIO接口节点 */
sdmmc2 {max-frequency 150000000; /* sdio接口的最大频率,可调整 */supports-sdio;bus-width 4; /* 4线模式可调整1线模式 */disable-wp;cap-sd-highspeed;cap-sdio-irq;keep-power-in-suspend;mmc-pwrseq sdio_pwrseq; /* WL_REG_ON 管理 */non-removable;pinctrl-names default;pinctrl-0 sdmmc2m0_bus4 sdmmc2m0_cmd sdmmc2m0_clk;sd-uhs-sdr104; /* 支持SDIO3.0 */status okay;
};5.2、验证
查看 log
dmesg | grep fe000000dmesg | grep mmc3查看/sys/bus/mmc/devices/目录下的sdio设备
ls /sys/bus/mmc/devices/mmc3:0001对应的基址是fe000000可以回到设备树查看就是sdmmc2接口 如果没有如上对应的log输出/sys/bus/mmc/devices/目录下也没出现对应的sdio设备说明sdio控制器没有扫到wifi卡请重新检查设备树配置和对应PIN脚的电平状态及CLK频率是否正确。
6、Wi-Fi 适配
现在SDIO控制器可以识别到WiFi卡但是还没有wlan节点出来因为还没有驱动。
6.1、wifi dts配置
从下面原理图可以得出
WIFI模组的WIFI_HOST_WAKE_B引脚接到了RK3568的GPIO0_D4。 设备树继续添加wlan节点同时配置pinctrl节点
wireless_wlan {compatible wlan-platdata;rockchip,grf grf;pinctrl-names default;pinctrl-0 wifi_host_wake_irq;/* 注意如果排查发现Wi-Fi模块没有32.768K波形且硬件上是由* RK PMU供给的则打开下面的clock属性按照实际使用的PMU型号填写* 否在SDIO/Wi-Fi无法使用.** 海华AW-CM358SM使用的是外部晶振无需打开clock属性。*///clocks rk809 1; //如果使用RK809只能配置一个//clocks hym8563; //如果使用hym8563只能配置一个//clock-names ext_clock;/* 按实际名字填写但这里的名字我随便写的听说海华和正基是兼容的所以填了这个名字 */wifi_chip_type ap6256;/* 这里配置的是WIFI_HOST_WAKE_B引脚 */WIFI,host_wake_irq gpio0 RK_PD4 GPIO_ACTIVE_HIGH;status okay;
};pinctrl {...wireless-wlan {wifi_host_wake_irq: wifi-host-wake-irq {/* 这里配置的是WIFI_HOST_WAKE_B引脚 */rockchip,pins 0 RK_PD4 RK_FUNC_GPIO pcfg_pull_down;};};
};其实实测发现对于海华AW-CM358SM来说不配置这个wireless_wlan节点最终也会有wifi节点出来。
6.2、驱动移植
6.2.1、kernel menuconfig 6.2.2、传统驱动移植
进入内核驱动目录将驱动文件复制进来
cd sdk/kernel/drivers/net/wireless
cp nxp ./修改Kconfig
vi Kconfig/* Kconfig */...config MXMWIFIEXtristate NXP MxM WiFi Driverdepends on CFG80211helpThis driver is multi-chip-multi-interface driver(indicating Multi-Chip x Multi-Interface support) based onNXP 802.11n/ac chipsets. If you choose to build it as a module,it will be build 2 modules moal.ko and mlan.ko....修改Makefile
vi Makefile/* Makefile */...obj-$(CONFIG_MXMWIFIEX) nxp/...修改defconfig 在sdk根目录执行如下命令编译内核
./build.sh kernel至此驱动已经编译完成。但是驱动的安装需要固件可以自行通过文件系统overlay的方式将固件放到/lib/firmware/目录下。
6.2.3、RK SDK WIFI/BT驱动独立编译
RK SDK把wifibt的编译独立了出来所以这里我们体验一下这种方法。注意经过实测要先按照上面将驱动移植进内核才可以使用下面的独立编译。
/external/rkwifibt/目录结构说明 firmware目录包含各个厂家WiFiBT的firmware文件drivers目录包含各个厂家的WiFiBT驱动bin目录主要是原厂预置的一些二进制文件sh目录主要是开机的WIFIBT的加载脚本及测试脚本等
我们暂时只关注firmware和drivers目录。
进入drivers目录创建aw-cm358sm文件夹将驱动文件复制进来
cd sdk/external/rkwifibt/drivers
mkdir aw-cm358sm
cd aw-cm358sm
cp nxp/* ./进入firmware目录创建azurewave文件夹。进入azureware目录继续创建AW-CM358SM文件夹将固件拷贝到该文件夹。
cd sdk/external/rkwifibt/firmware
mkdir azurewave
cd azurewave
mkdir AW-CM358SM
cd AW-CM358SM
cp xxxx ./修改/device/rockchip/common/scripts/post-wifibt.sh
修改1增加aw-cm358sm驱动的编译 /* sdk/device/rockchip/common/scripts/post-wifibt.sh */...if [[ $RK_WIFIBT_CHIP AW-CM358SM ]];thenecho building aw-cm358sm driver$KMAKE M$RKWIFIBT_DIR/drivers/aw-cm358sm modulesfi...修改2将编译好的ko文件和固件拷贝到output目录以备后面打包进rootfs。 /* sdk/device/rockchip/common/scripts/post-wifibt.sh */...if [[ $RK_WIFIBT_CHIP AW-CM358SM ]];thenecho Copy AW-CM358SM file to rootfscp $RKWIFIBT_DIR/firmware/azurewave/$RK_WIFIBT_CHIP/* \$TARGET_DIR/lib/firmware/cp $RKWIFIBT_DIR/drivers/aw-cm358sm/*.ko $TARGET_DIR/lib/modules/fi...修改板级配置文件添加$RK_WIFIBT_CHIP环境变量 在sdk根目录执行如下命令单独编译wifibt
./build.sh wifibt编译buildroot更新rootfs。打包固件。
./build.sh buildroot ./build.sh firmware6.3、Wi-Fi 功能验证
6.3.1、加载驱动
查看未安装驱动前的ifconfig 进入/lib/modules目录按顺序安装驱动该驱动有两个ko文件需要安装 cd /lib/modules
insmod mlan.ko
insmod moal.ko驱动加载成功 6.3.2、STA模式测试
这里使用wpa_supplicant工具测试需要在buildroot里提前安装。
WPA_SUPPLICANT是一个用于处理 Wi - Fi 连接认证和加密的守护进程daemon。它在 Linux、BSD 等操作系统中被广泛使用用于实现客户端如笔记本电脑、智能手机等设备与 Wi - Fi 接入点AP之间的安全连接。
修改wpa_supplicant.conf配置文件将ssid和psk替换成待连接的wifi名称和密码
vi /etc/wpa_supplicant.conf开启wpa_supplicant进程
# 开启wpa_supplicant进程
# -c 后面接的是配置文件的路径
wpa_supplicant -B -i mlan0 -c /etc/wpa_supplicant.conf# 动态获取IP
dhcpcd mlan0ping测试
ping -I mlan0 baidu.com6.3.3、AP测试
海华awcm358sm有三个网络节点其中uap0可用作AP节点 这里使用hostapd工具测试需要在buildroot里提前安装。
hostapd是一个用户空间的守护进程主要用于将支持 Linux 的网络接口转换为一个 IEEE 802.11 无线接入点AP。简单来说它可以让你的设备如装有 Linux 系统的电脑或开发板变成一个 Wi - Fi 热点供其他无线设备连接。
板卡接入有线网络确保可以上网 hostapd需要一个配置文件这里命名为hostapd-2.4g.conf内容如下
interfaceuap0
drivernl80211
channel9
hw_modegauth_algs1
ieee80211n1
wpa1ssidOK3568_WIFI_2.4G_AP
wpa_passphrase12345678
wpa_key_mgmtWPA-PSK
wpa_pairwiseTKIP
rsn_pairwiseCCMP下面是AP模式的测试脚本hostapd.sh
#!/bin/sh# kill wpa_supplicant
cntps aux | grep wpa_supplicant | grep -v grep | wc -l
if [ ${cnt} ! 0 ];thenkillall wpa_supplicant /dev/null
fi# kill hostapd
cnt1ps aux | grep hostapd | grep -v grep | wc -l
if [ ${cnt1} ! 0 ];thenkillall hostapd /dev/null
fi# stop dnsmasq
/etc/init.d/S80dnsmasq stop# start hostapd
hostapd /etc/hostapd-2.4g.conf # enable device
sleep 1
ifconfig mlan0 up
ifconfig uap0 up
# 注意这里的IP不要和eth0的IP在同一个网段
ifconfig uap0 192.168.5.1# start dnsmasq
/etc/init.d/S80dnsmasq start# 开启网络和IP转发
echo 1 /proc/sys/net/ipv4/ip_forwardiptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -t nat -X
iptables -t mangle -Xiptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROPiptables -t nat -A POSTROUTING -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADEhostapd完成了AP热点的创建现在为AP添加DHCP功能这里使用dnsmasq工具。dnsmasq的配置文件在/etc/dnsmasq.conf内容如下主要规定了接口名和待分配的IP地址范围
interfaceuap0
bind-interfaces
except-interfacelo
dhcp-range192.168.5.100,192.168.5.254,12h
dhcp-option3,192.168.5.1
dhcp-option6,192.168.5.1一切准备就绪开始测试执行AP测试脚本hostapd.sh需要执行两次
sh hostapd.sh手机查看热点 查看路由表
route -n手机连接热点后打印如下 但目前是存在问题的手机连接热点后上不了网。最初是内核没有开启iptables的支持但后面开启之后执行hostapd.sh测试脚本内核直接崩溃这个问题卡了挺久暂时放弃了。
7、蓝牙适配
7.1、bt dts配置 配置uart8
uart8 {status okay;pinctrl-names default;pinctrl-0 uart8m0_xfer uart8m0_ctsn uart8m0_rtsn;
};7.2、驱动移植
kernel menuconfig开启BT_HCIUART 7.3、蓝牙功能验证
buildroot要添加bluez蓝牙工具软件包。
7.3.1、使能蓝牙设备
使能蓝牙设备
# 还是要先加载wifi驱动
insmod /lib/modules/mlan.ko
insmod /lib/modules/moal.ko# 使能hci0
hciattach /dev/ttyS8 any -s 115200 115200 flow /dev/null
hciconfig hci0 up使本设备自身可被发现
hciconfig hci0 piscan查看蓝牙模块设备名称
hciconfig hci0 name手机查看蓝牙设备苹果手机看不到 7.3.2、扫描外设
hcitool scan7.3.3、开发板发送文件给安卓手机
进入bluetooth终端
/usr/libexec/bluetooth/bluetoothd -C -n
bluetoothctl打开蓝牙可连接可被发现属性
discoverable on扫描蓝牙设备重新进入bluetooth终端后需扫描设备才可以连接
scan on扫描到目标设备后关闭扫描
scan off配对
agent NoInputNoOutput
default-agent
pair A4:50:46:A5:9D:08退出bluetooth终端
quit创建文件用于待会的发送测试
echo send sendfile.txt进入obexctl终端
export $(dbus-launch)
/usr/libexec/bluetooth/obexd -r /tmp -a -n
obexctl连接手机
connect A4:50:46:A5:9D:08发送文件到手机
send sendfile.txt退出obexctl终端
quit