一、先拿到驱动源码

1、咨询模组厂商,让他们提供即可

比如我这里获取到的驱动源码包名称是:ZTOP_ACEV100_Android_wifi_bt_20260326214112.tar.gz,解压后的目录截图如下

 

2、也可以直接取已经编好的ko文件与bin文件直接和项目一起编译(如此就跳过步骤一、步骤二)

 

 

二、编译模组(如果是直接拿的ko文件则跳过这一步)

1、驱动源码放置到项目中

直接将驱动源码放置在项目的根目录即可

 

2、修改配置文件让驱动源码参与编译

(1)、在驱动的编译脚本新增产品名称、新增编译配置

(2)、编译

变量指令: sudo ./build_linux.sh gk6780v100

编译之后会生成kobin文件

 

 

三、加载驱动生成的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.kozt9612_fw.bin)拷贝到项目目录vendor目录下:在此处新建一个目录wifi_ztop,内容如下

BUILD.gn的内容如下

 

4、修改drivers\peripheral\wlan\wlan.gni文件:

drivers_peripheral_wlan_feature_vendor = "default"

 

5、不需要wifi_hal_service,将其去掉

 

 

四、镜像编译上板验证

1、静态验证,看kobin是否都被打包到了正确的目录下面

 

2、查看wlan0接口是否自动生成了,有wlan0说明wifi驱动加载成功!

 

3、如果上一步未自动生成,则手动insmod /vendor/etc/ko/ztop_wifi_driver.ko,再确认是否生成了wlan0接口(这里不需要)

 

 

五、解决后续报错

1、wifi无法打开

服务加载失败,该服务的 hostService nullHDF DevmgrServiceLoadDevice 在接收到 LoadDevice("wpa_interface_service") 请求时,会去查找已注册的设备服务(hostService)。返回 hostService is null 说明,系统启动时,wpa_interface_service 对应的 HDF 驱动从未被加载/注册进设备管理器。需要先确认hcs配置是否正确包含了wpa_interface_service。查看device_info.hcs配置文件,对比后发现

问题1wpa_c_device 挂在 wifi_c_host 下而不是独立的 wpa_host

GK6780V100 wpa_interface_service 被放进了 wifi_c_host 这个 host 进程里,与 wlan_hal_c_service 共用同一个进程。wifi_c_host 服务以 uid=root 运行,但未被列入 high_privilege_process_list.json 高权限进程白名单,导致认证失败 wifi_c_host 进程本身启动失败或权限问题时,wpa_interface_service 也跟着失败。

问题2:uid = "root" 但缺少 caps initconfig

GK6320 wpa_host 配置了:

GK6780V100 wifi_c_host 用的是 uid = "root" 但没有 caps initconfig,且 uid=root 的进程在 OH6.1 的新安全模型下需要在 high_privilege_process_list.json 中注册才能通过认证。

 

修复方案:将 wpa_c_device wifi_c_host 中拆分出来,单独建 wpa_host(对齐 GK6320),这样 wpa 不再受 wifi_c_host 认证失败的牵连

根因总结:wifi_c_hostuid=root)不在高权限白名单 → 进程认证失败 → wpa_interface_service hostService null WiFi 打不开

 

全部修复后,问题解决。至此驱动适配完成

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐