一、操作环境
pc:ubuntu18.04
设备:开发版 Dopi hi3516ev200开发版以及Dopi hi3861L开发版本
sdk:hi3861L 025版本以上以及 hichannel相关补丁,需要资料进Q群:735884031
二、开发环境搭建
ev200的sdk环境前面已经有说过了,可查阅之前的博客。hi3861L的环境参考官方文档《Hi3861V100/Hi3861LV100 SDK开发环境搭建 用户指南.pdf》,只需要搭建SCons
工具以及python3.7以上的环境。注意的是当前安装了其他版本的python记得切换版本。之后运行./build.sh menuconfig,将target chip设置为3861L,在bsp setting里面勾选好sdio驱动便可。接着配置好交叉编译器,将交叉编译解压到一个路径假设全局路径是:/xxxx/bin,给一个粗暴的脚本:
#!/bin/bash
TOOLCHAINS=/xxxx/bin
export PATH=$TOOLCHAINS:$PATH
echo "Set environment arm-himix100-linux successfully..."
将自己实际的全局路径替换上面的/xxxx/bin便可,假设这个脚本的名称为envsetup.sh,只要执行source ./envsetup.sh,交叉编译器额环境就导入到环境中了,执行下图命令就知道是否导入完毕:
三、Hi3861L端需要配置的地方
将patch_Hi3861V100C001R001SPC025_for_hichannel_001.tgz 和 Hi3861V100R001C00SPC025.tgz 放到同级目录,之后分别将其解压;进入patch_Hi3861V100C001R001SPC025_for_hichannel_001目录,执行:
chmod 777 patch.sh
./patch.sh ../Hi3861V100R001C00SPC025
然后进入Hi3861V100R001C00SPC025/build/config目录,打开sdk.mk文件,将:
CONFIG_CHIP_PKT_32K=y
#CONFIG_CHIP_PKT_48K=y
改为:
#CONFIG_CHIP_PKT_32K=y
CONFIG_CHIP_PKT_48K=y
进入Hi3861V100R001C00SPC025/app/demo目录,打开app.json文件,在"INCLUDE"里面第一行添加如下路径:"components/lwip_sack/include/lwip"。然后再sdk的目录下./build.sh all,生成的文件在output/bin/下面。我们使用Hi3861L_demo_allinone.bin烧录。
四、Hi3516EV200端驱动以及应用移植
在提供的patch中,有个host文件夹,这个里面是驱动以及app,驱动直接以insmod的方式加载,然后这个不是常规的WiFi,虽然产生WiFi节点但是不能还是用wpa工具去链接网络,需要自己二次开发去实现,这里只说明移植部分。
在host/hichannel/env_config.mk中做以下修改:
接着将交叉编译导入当前的终端环境后可以自己在 host/hichannel下面make,这里注意下要不make KDIR=/xxxx/xxxx,导入内核路径,或者直接在makefile里面将KDIR设置为内核的绝对路径。这样就可以成功编译好ko文件。
对host/app/demo_linux修改,在host/app/demo_linux/base.mak将CFG_HI_TOOLCHAINS_NAME设置你的交叉编译名称之后就可以直接编译了:
CFG_HI_TOOLCHAINS_NAME = arm-himix100-linux
五、驱动安装
两个板子都上电,然后将WiFi插入DOPI EV200的sd卡槽中会有如下打印:
说明已经识别到了WiFi的sdio,这里没有识别出来的可能是在WiFi的menuconfig里面的bsp setting里面没勾选sdio。接着正常insmod hichannel.ko 后就能通过ifconfig -a查看WiFi节点了:
这里跟普通WiFi模块不一样的地方就是不能通过wpa工具进行网络获取,只能通过demo_link跟wifi通讯,之后的连接热点、分配IP需要自己对其二次开发。然后整入到这个demoI就能实现上网了。