最近在调试openharmony3.0小型系统的wifi模块,把过程记录下,防止以后忘记。
首先这是官方给的开发说明步骤:
WLAN驱动基于HDF框架和PLATFORM框架开发,不区分OS和芯片平台,为不同厂商的WLAN模组提供统一的驱动模型,各WLAN模组厂商根据如下指导适配WLAN驱动框架。
1、通过wifi_config.hcs文件,配置硬件参数:module(不同feature),芯片等。
2、 解析配置文件, 生成全量配置的结构体对象。
3 、Module初始化,创建Module。
4、 挂接chip,初始化chip。
5 、总线初始化。
6.、上层wpa业务挂接。
具体可查看网址 https://docs.openharmony.cn/pages/zh-cn/device/%E8%AE%BE%E5%A4%87%E5%BC%80%E5%8F%91%E6%96%87%E6%A1%A3/%E5%AD%90%E7%B3%BB%E7%BB%9F%E5%BC%80%E5%8F%91/%E9%A9%B1%E5%8A%A8/%E5%A4%96%E8%AE%BE%E9%A9%B1%E5%8A%A8%E4%BD%BF%E7%94%A8/WLAN/
说明。可以说非常简明扼要了。
我这里使用的wifi芯片模组为RTL8189FTV,现基于此wifi芯片在openharmony3.0小型系统上的调试过程记录于此。
首先在文件 vendor/xingyun/t113_nand/hdf_config/device_info/device_info.hcs中添加对应的wifi配置项。
diff --git a/vendor/xingyun/t113_nand/hdf_config/device_info/device_info.hcs b/vendor/xingyun/t113_nand/hdf_config/device_info/device_info.hcs
index 7acc319ff2..df34a72ded 100755
--- a/vendor/xingyun/t113_nand/hdf_config/device_info/device_info.hcs
+++ b/vendor/xingyun/t113_nand/hdf_config/device_info/device_info.hcs
@@ -86,5 +86,30 @@ root {
}
}
+ network :: host {
+ hostName = "network_host";
+ device_wifi :: device {
+ device0 :: deviceNode {
+ policy = 2;
+ priority = 100;
+ preload = 0;
+ permission = 0664;
+ moduleName = "HDF_WIFI";
+ deviceMatchAttr = "hdf_wlan_driver";
+ serviceName = "hdfwifi";
+ }
+ }
+ device_wlan_chips :: device {
+ device0 :: deviceNode {
+ policy = 0;
+ preload = 0; //注意,此处官方使用的是2,我们调试的话先使用0,系统启动就加载
+ moduleName = "HDF_WLAN_CHIPS";
+ deviceMatchAttr = "hdf_wlan_chips_hi3881";
+ serviceName = "hisi";
+ }
+ }
+ }
+
+
}
}
然后需要做的是添加我们自己的驱动文件,目前是先仿照海思目录,在device/xingyunelec/目录下创建个文件夹drivers,然后在里面创建文件夹 wifi,最后创建好的目录如下图所示
然后仿照海思目录创建core和rtl8189ftv目录文件夹。创建完成的如下图所示。
其中core目录下只有一个文件hdf_wlan_sdio_adapt.c,rtl8189ftv目前只保留了hdfadapt和include文件夹,如下图所示,因为我们目前还只是在搭建编译wifi模块驱动的框架,所以不需要那么多的文件,只保留基本的文件即可。
目前hdf只保留了的文件有driver_register.c,hdfinit_3881.c,net_adpater.c和net_adpater.h文件,其中driver_register.c不为空文件,其他两个都是空文件,保留driver_register.c文件内容只为测试是否编译成功。device目录修改完成后接着修改编译脚本配置。首先需要添加我们自己wifi芯片模组的内核配置选项,修改如下,使用其他可以仿照添加
--- a/drivers/adapter/khdf/linux/model/network/wifi/Kconfig
+++ b/drivers/adapter/khdf/linux/model/network/wifi/Kconfig
@@ -10,4 +10,11 @@ config DRIVERS_HI3881
default n
depends on DRIVERS_HDF_WIFI
help
- Answer Y to enable hi3881 wifi chip driver.
\ No newline at end of file
+ Answer Y to enable hi3881 wifi chip driver.
+
+config DRIVERS_RTL8189FTV
+ bool "Enable rtl8189ftv"
+ default n
+ depends on DRIVERS_HDF_WIFI
+ help
+ Answer Y to enable rtl8189ftv wifi chip driver.
然后修改某些编译文件的路径,此处我是增加了宏定义,让它直接链接到我的文件路径即可,这里也想吐槽下,openharmony的文件放置确实有点乱,到处都放文件,然后修改起来感觉特别乱,倒不如规规矩矩放一个地方,这样不用到处找文件。
diff --git a/drivers/adapter/khdf/linux/model/network/wifi/hdfwifi.mk b/drivers/adapter/khdf/linux/model/network/wifi/hdfwifi.mk
index 63703c3544..65fd55179a 100644
--- a/drivers/adapter/khdf/linux/model/network/wifi/hdfwifi.mk
+++ b/drivers/adapter/khdf/linux/model/network/wifi/hdfwifi.mk
@@ -14,7 +14,13 @@
HDF_WIFI_FRAMEWORKS_ROOT = $(HDF_DIR_PREFIX)/framework/model/network/wifi
HDF_WIFI_KHDF_FRAMEWORKS_ROOT = $(HDF_DIR_PREFIX)/adapter/khdf/linux/model/network/wifi
+
+ifeq ($(CONFIG_DRIVERS_RTL8189FTV),y)
+HDF_WIFI_VENDOR_ROOT = $(HDF_VENDOR_PREFIX)/device/xingyunelec/drivers/wifi
+else
HDF_WIFI_VENDOR_ROOT = $(HDF_VENDOR_PREFIX)/device/hisilicon/drivers/wifi/driver
+endif
+
HDF_FRAMEWORKS_INC := \
-Idrivers/hdf/framework/ability/sbuf/include \
-Idrivers/hdf/framework/core/common/include/host \
添加我们自己的编译目录到Makefile文件。
diff --git a/drivers/adapter/khdf/linux/model/network/wifi/vendor/Makefile b/drivers/adapter/khdf/linux/model/network/wifi/vendor/Makefile
index ea4a0d17fe..cce9285919 100755
--- a/drive