oh 6.1 release适配兆通微9612U模组Wifi驱动案例总结
一.先拿到驱动源码
获取源:咨询模组厂商,让他们提供即可
比如我这里获取到的驱动源码包名称是:ZTOP_ACEV100_Android_wifi_bt_20260326214112.tar.gz
解压后的目录截图如下:

需要确认的项:
确认项目上使用的内核版本是:linux 5.10
确认mp_hi3781v735时arm32还是arm64: arm64
二.编译
1.源码应该放在哪里?
这里的OH 6.1 release的项目根目录是在 hisi73561_0410
直接放在项目跟目录下面:

2.如何让驱动源码参与编译
1.修改如下配置:



2.编译:
变量指令: sudo ./build_linux.sh mp_hi3781v735

三.如何加载wifi驱动的ko
1.编译生成的ko:ZTOP_ACEV100_Android_wifi_bt_20260326214112\wifi_driver\build\output\ztop_wifi_driver.ko
2.厂商随驱动提供的固件:ZTOP_ACEV100_Android_wifi_bt_20260326214112\wifi_driver\fw\zt9612_fw.bin
3.打包文件到镜像中:
将上诉两个文件(ztop_wifi_driver.ko合zt9612_fw.bin)拷贝到项目目录vendor目录下:
比如此处的:vendor\hisilicon\mp_hi3781v735
新建一个目录wifi_ztop

vendor\hisilicon\mp_hi3781v735\wifi_ztop\BUILD.gn的内容如下:
# Copyright (c) 2022 Huawei Device Co., Ltd.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#
#
#
import("//build/ohos.gni")
ohos_prebuilt_etc("rwnx_karst") {
source = "rwnx_karst.ini"
part_name = "product_mp_hi3781v735"
subsystem_name = "product_mp_hi3781v735"
install_enable = true
install_images = [ chipset_base_dir ]
relative_install_dir = "../firmware"
}
ohos_prebuilt_etc("ztop_wifi_driver") {
source = "ztop_wifi_driver.ko"
part_name = "product_mp_hi3781v735"
subsystem_name = "product_mp_hi3781v735"
install_enable = true
install_images = [ chipset_base_dir ]
relative_install_dir = "../etc/ko"
}
# 后续wifi固件都应存放在/vendor/firmware目录
ohos_prebuilt_etc("zt9612_fw") {
source = "zt9612_fw.bin"
part_name = "product_mp_hi3781v735"
subsystem_name = "product_mp_hi3781v735"
install_enable = true
install_images = [ chipset_base_dir ]
relative_install_dir = "../firmware"
}
# 汇总所有依赖
group("ztop_wifi_drivers") {
deps = [
":rwnx_karst",
":ztop_wifi_driver",
":zt9612_fw",
]
}
4.加载ko

四.编译镜像上板验证
1.静态验证,看是否ko和bin都被打包到了正确的目录下面:

2.手动insmod /vendor/etc/ko/ztop_wifi_drvier.ko看是否生成了wlan0接口
查看命令:ifconfig -a

有wlan0说明wifi驱动加载成功!
五.打开wifi流程失败问题解决
问题现象:
行 16357: 01-01 08:00:20.087 4877 4914 I C01560/HalDeviceManager: HalDeviceManager::HalDeviceManager
行 16358: 01-01 08:00:20.087 4877 4914 I C01560/HalDeviceManager: StartChipHdi start...
行 16385: 01-01 08:00:20.096 3631 4077 E C02510/devsvc_manager_stub: StubGetService service chip_interface_service not found
行 16387: 01-01 08:00:20.096 4877 4914 E C02510/hdi_servmgr_client: get hdi service chip_interface_service failed, -1
行 16388: 01-01 08:00:20.097 4877 4914 E C02510/chip_controller_proxy: Get:get remote object failed!
行 16389: 01-01 08:00:20.097 4877 4914 I C01560/HalDeviceManager: Pointer g_IWifi in StartChipHdi is NULL!
行 40978: 01-01 08:24:23.988 6079 6079 I C01560/WifiNAPIUtils: Call wifi func: EnableWifi (start)
行 40980: 01-01 08:24:23.989 4828 4831 I C01560/WifiDeviceServiceImpl: EnableWifi(), pid:6079, uid:20010017, BundleName:.
行 40990: 01-01 08:24:23.994 4828 4896 I C01560/WifiControllerMachine: Should start wifi or scanonly.
行 40996: 01-01 08:24:23.994 4828 5282 I C01560/WifiServiceScheduler: AutoStartStaService, current sta state:0
行 40997: 01-01 08:24:23.994 4828 5282 I C01560/HalDeviceManager: CreateStaIface, ifaceName: , instId = 0
行 40998: 01-01 08:24:23.994 4828 5282 I C01560/HalDeviceManager: Pointer g_IWifi in CheckChipHdiStarted is NULL!
行 41000: 01-01 08:24:23.994 4828 5282 E C01560/HalDeviceManager: chip hdi is not started
行 41001: 01-01 08:24:23.994 4828 5282 E C01560/HalDeviceManager: CreateStaIface CheckReloadChipHdiService failed
行 41002: 01-01 08:24:23.994 4828 5282 E C01560/WifiServiceScheduler: PreStartWifi, create iface failed!
01-01 08:00:21.375 4943 4948 I C01560/HalDeviceManager: HalDeviceManager::HalDeviceManager
01-01 08:00:21.375 4943 4948 I C01560/HalDeviceManager: StartChipHdi start...
01-01 08:00:21.377 4006 4098 I C01566/HDF_LOG_TAG: AddWifiDeathRecipient
01-01 08:00:21.377 4943 4948 I C01560/HalDeviceManager: Chip Hdi service add death recipient success
01-01 08:00:21.377 4006 4098 I C01566/HDF_LOG_TAG: Wifi HAL start enter
01-01 08:00:21.378 4006 4098 W C03f07/MUSL-LDSO: load libwifi_hal_hw.z.so failed, namespace=ndk no inherits, errno=2
01-01 08:00:21.378 4006 4098 W C03f07/MUSL-LDSO: load libwifi_hal_hw.z.so failed, namespace=default, errno=2
01-01 08:00:21.378 4006 4098 W C03f07/MUSL-LDSO: dlopen_impl load library header failed for libwifi_hal_hw.z.so
01-01 08:00:21.378 4006 4098 E C01566/HDF_LOG_TAG: failed to open vendor hal library: libwifi_hal_hw.z.so
01-01 08:00:21.378 4006 4098 E C01566/HDF_LOG_TAG: Wifi HAL start failed.
01-01 08:00:21.378 4943 4948 E C02510/chip_controller_proxy: Init_ failed, error code is -1
01-01 08:00:21.378 4943 4948 E C01560/HalDeviceManager: StartChipHdi, call Init failed! ret:-1
行 78911: 01-01 08:00:54.026 4847 4918 I C01560/WifiHdiWpaProxy: HdiAddWpaIface ifName:wlan0, confName:/data/service/el1/public/wifi/wpa_supplicant/wpa_supplicant.conf
行 78914: 01-01 08:00:54.027 3998 4089 I C01566/HDF_LOG_TAG: enter WpaInterfaceAddWpaIface Ready to add iface, ifName: wlan0, confName: /data/service/el1/public/wifi/wpa_supplicant/wpa_supplicant.conf
行 78921: 01-01 08:00:54.029 3998 6156 I C05200/wpa_supplicant: CTRL_IFACE GLOBAL INTERFACE_ADD 'wlan0 /data/service/el1/public/wifi/wpa_supplicant/wpa_supplicant.conf'
行 78922: 01-01 08:00:54.029 3998 6156 I C05200/wpa_supplicant: Initializing interface 'wlan0' conf '/data/service/el1/public/wifi/wpa_supplicant/wpa_supplicant.conf' driver 'default' ctrl_interface 'N/A' bridge 'N/A'
行 78923: 01-01 08:00:54.029 3998 6156 I C05200/wpa_supplicant: Configuration file '/data/service/el1/public/wifi/wpa_supplicant/wpa_supplicant.conf' -> '/data/service/el1/public/wifi/wpa_supplicant/wpa_supplicant.conf'
行 78924: 01-01 08:00:54.029 3998 6156 I C05200/wpa_supplicant: Reading configuration file '/data/service/el1/public/wifi/wpa_supplicant/wpa_supplicant.conf'
行 78925: 01-01 08:00:54.029 3998 6156 E C05200/wpa_supplicant: Failed to open config file '/data/service/el1/public/wifi/wpa_supplicant/wpa_supplicant.conf', error: Permission denied
行 78926: 01-01 08:00:54.030 3998 6156 E C05200/wpa_supplicant: Failed to read or parse configuration '/data/service/el1/public/wifi/wpa_supplicant/wpa_supplicant.conf'.
行 78927: 01-01 08:00:54.030 3998 6156 I C05200/wpa_supplicant: Enter eapol_sm_deinit
行 78928: 01-01 08:00:54.031 3998 6156 I C05200/wpa_supplicant: : Cancelling scan request
行 78929: 01-01 08:00:54.033 3998 6156 I C05200/wpa_supplicant: : CTRL-EVENT-DSCP-POLICY clear_all
行 78931: 01-01 08:00:54.033 3998 4089 I C01566/HdiWpaHal: WpaCliAddIface failed, cmd: INTERFACE_ADD wlan0 /data/service/el1/public/wifi/wpa_supplicant/wpa_supplicant.conf, buf: FAIL
行 85321: 01-01 08:01:06.817 3957 4200 I C01566/HDF_LOG_TAG: enter WpaInterfaceStart: wpa_supplicant begin to start
行 85325: 01-01 08:01:06.824 3957 6168 I C05200/wpa_supplicant: Successfully initialized wpa_supplicant
行 85338: 01-01 08:01:06.922 3957 4200 I C01566/HDF_LOG_TAG: WpaInterfaceStart: wpa_supplicant start successfully!
行 85352: 01-01 08:01:06.926 4895 4930 I C01560/WifiHdiWpaProxy: HdiAddWpaIface ifName:wlan0, confName:/data/service/el1/public/wifi/wpa_supplicant/wpa_supplicant.conf
行 85355: 01-01 08:01:06.926 3957 4200 I C01566/HDF_LOG_TAG: enter WpaInterfaceAddWpaIface Ready to add iface, ifName: wlan0, confName: /data/service/el1/public/wifi/wpa_supplicant/wpa_supplicant.conf
行 85362: 01-01 08:01:06.929 3957 6168 I C05200/wpa_supplicant: CTRL_IFACE GLOBAL INTERFACE_ADD 'wlan0 /data/service/el1/public/wifi/wpa_supplicant/wpa_supplicant.conf'
行 85363: 01-01 08:01:06.929 3957 6168 I C05200/wpa_supplicant: Initializing interface 'wlan0' conf '/data/service/el1/public/wifi/wpa_supplicant/wpa_supplicant.conf' driver 'default' ctrl_interface 'N/A' bridge 'N/A'
行 85364: 01-01 08:01:06.929 3957 6168 I C05200/wpa_supplicant: Configuration file '/data/service/el1/public/wifi/wpa_supplicant/wpa_supplicant.conf' -> '/data/service/el1/public/wifi/wpa_supplicant/wpa_supplicant.conf'
行 85365: 01-01 08:01:06.929 3957 6168 I C05200/wpa_supplicant: Reading configuration file '/data/service/el1/public/wifi/wpa_supplicant/wpa_supplicant.conf'
行 85366: 01-01 08:01:06.931 3957 6168 I C05200/wpa_supplicant: wpa_config_process_country: set country code
行 85368: 01-01 08:01:06.932 3957 6168 I C05200/wpa_supplicant: Read configuration file finished.
行 85369: 01-01 08:01:06.941 3957 6168 I C05200/wpa_supplicant: set driver success, set driver: (null), get driver: nl80211
行 85370: 01-01 08:01:06.941 3957 6168 I C05200/wpa_supplicant: Enter wpa driver nl80211 finish init, interface: wlan0.
行 85371: 01-01 08:01:06.943 3957 6168 I C05200/wpa_supplicant: nl80211: Set mode ifindex 8 iftype 2 (STATION)
行 85372: 01-01 08:01:06.944 3957 6168 E C05200/wpa_supplicant: nl80211: Failed to set interface 8 to mode 2: -1 (Operation not permitted)
行 85373: 01-01 08:01:06.949 3957 6168 E C05200/wpa_supplicant: Could not set interface wlan0 flags (UP): Operation not permitted
行 85374: 01-01 08:01:06.949 3957 6168 E C05200/wpa_supplicant: nl80211: Could not set interface 'wlan0' UP
行 85375: 01-01 08:01:06.949 3957 6168 I C05200/wpa_supplicant: nl80211: deinit ifname=wlan0 disabled_11b_rates=0
行 85376: 01-01 08:01:06.949 3957 6168 I C05200/wpa_supplicant: nl80211: Set mode ifindex 8 iftype 2 (STATION)
行 85377: 01-01 08:01:06.949 3957 6168 E C05200/wpa_supplicant: nl80211: Failed to set interface 8 to mode 2: -1 (Operation not permitted)
行 85378: 01-01 08:01:06.950 3957 6168 E C05200/wpa_supplicant: wlan0: Failed to initialize driver interface
行 85379: 01-01 08:01:06.950 3957 6168 I C05200/wpa_supplicant: Enter eapol_sm_deinit
行 85380: 01-01 08:01:06.951 3957 6168 I C05200/wpa_supplicant: wlan0: Cancelling scan request
行 85381: 01-01 08:01:06.952 3957 6168 I C05200/wpa_supplicant: wlan0: CTRL-EVENT-DSCP-POLICY clear_all
行 85382: 01-01 08:01:06.952 3957 6168 I C05200/wpa_supplicant: config->openssl_ciphers is NULL
行 85384: 01-01 08:01:06.952 3957 4200 I C01566/HdiWpaHal: WpaCliAddIface failed, cmd: INTERFACE_ADD wlan0 /data/service/el1/public/wifi/wpa_supplicant/wpa_supplicant.conf, buf: FAIL
六.解决方案:
1.drivers\peripheral\wlan\wlan.gni:
drivers_peripheral_wlan_feature_vendor = "default"
解决问题:HDF_LOG_TAG: failed to open vendor hal library: libwifi_hal_hw.z.so
2.vendor\hisilicon\mp_hi3781v735\hdf_config\uhdf\device_info.hcs:
wlan :: host {
hostName = "wifi_host";
priority = 50;
wifi_device :: device {
device0 :: deviceNode {
policy = 2;
priority = 100;
moduleName = "libwifi_hdi_device.z.so";
serviceName = "wlan_hal_service";
}
}
chip_device :: device {
device0 :: deviceNode {
policy = 2;
priority = 100;
moduleName = "libchip_hdi_driver.z.so";
serviceName = "chip_interface_service";
}
}
}
wifi :: host {
hostName = "wifi_c_host";
priority = 50;
uid = "root";
gid = ["root", "wifi_group", "wifi", "wifi_host"];
wifi_c_device :: device {
device0 :: deviceNode {
policy = 2;
priority = 100;
moduleName = "libwifi_hdi_c_device.z.so";
serviceName = "wlan_hal_c_service";
}
}
wpa_c_device :: device {
device0 :: deviceNode {
policy = 2;
priority = 100;
preload = 2;
moduleName = "libwpa_hdi_c_device.z.so";
serviceName = "wpa_interface_service";
}
}
}
解决问题:service chip_interface_service not found问题以及权限相关问题
3.vendor\hisilicon\mp_hi3781v735\image_cfg\system\cfg\init.shaolingun.cfg
"name" : "fs",
"cmds" : [
"insmod /vendor/lib64/modules/eth_gmac.ko",
"insmod /vendor/etc/ko/ztop_wifi_driver.ko",
"insmod /vendor/etc/rtk_btusb.ko",
"chmod 666 /dev/uhid",
"chmod 777 /dev/rtkbt_dev"
]
解决问题:开机自动加载ko问题
4.解决扫描结果被过滤掉的问题:

5.解决连接wpa3加密方式的热点失败的问题:

6.解决关闭wifi再打开失败的问题:
drivers\peripheral\wlan\wpa\interfaces\hdi_service\wpa_interface_drivers.c

更多推荐
所有评论(0)