rk3568tWiFi驱动移植流程

一. 概述

目标:RK3568上移植OpenHarmony 3.2适配WIFI以及相关内容。

硬件芯片:海华AW-rk3568S
芯片模组:43438A1

注:本文使用厂家WiFi提供固件嵌入内核的方式进行wifi使能

1.1 WLAN固件

WLAN固件是相当于WLAN芯片里面的一个小系统,你可以把WLAN芯片看成一个单片机,里面需要跑代码才可以和我们的SoC进行PY交易,这份固件由原厂提供,为.bin后缀。一般名字中会包含43438A1之类的芯片模组。

 

注:使用另外的文件作为固件的有博通和海思,而realtek则是把固件写到了驱动中去

1.2 nvram.txt

 这个文件用给固件读取并修正一些参数,来使得wlan芯片工作在最好状态下,同样由原厂提供。

二、内核部分

2.1 修改设备树

使用官方dts,dtb嵌入瑞芯微设备树文件夹,不需要自己修改设备树,内核编译时会自动调用

 

 

2.2 内核配置部分

  这里可以去看rockchip_linux_defconfig (路径:图示)  那么你可以看到androidopenharmony的区别了,android中,wlan芯片的驱动是编译成.ko,然后再复制到系统中,在启动的时候根据SDIO中读取的PIDVID值去比对,再加载对应驱动;在openharmony中,wlan驱动模块是一开始就加载到内核中去,随着内核启动一起启动。

  android的这种做法可以同时兼容多个wlan芯片,这个我觉得openharmony可以考虑一下去改进。

 

 

 

修改kernel配置文件

 

 

 

 这里的CONFIG_BCMDHD_FW_PATHCONFIG_BCMDHD_NVRAM_PATH指定了firmware的固件和nvram_ap6212a.txt的路径

 

CONFIG_WL_ROCKCHIP=y

# CONFIG_WIFI_BUILD_MODULE is not set

CONFIG_WIFI_LOAD_DRIVER_WHEN_KERNEL_BOOTUP=y

# CONFIG_WIFI_GENERATE_RANDOM_MAC_ADDR is not set

CONFIG_BCMDHD=y

CONFIG_AP6XXX_WIFI6=y

CONFIG_BCMDHD_FW_PATH="/vendor/etc/firmware/fw_bcm43438a1.bin"

CONFIG_BCMDHD_NVRAM_PATH="/vendor/etc/firmware/nvram.txt"

# CONFIG_BCMDHD_STATIC_IF is not set

# CONFIG_MAC80211_HWSIM is not set

CONFIG_USB_NET_RNDIS_WLAN=y

# CONFIG_VIRT_WIFI is not set

 

 

三、系统适配部分

3.1固件搬运

  那么接下来就是搬运固件和nvram_ap6212a.txt即可;

 

 

  首先在device/hihope/hardware/wifi目录下面创建属于我们芯片的目录比如rk3568,

  然后把我们从原厂那里拿到的固件放进去,再修改以下内容,其中 rk3568_ETC_DIR 就是我们刚才创建的目录,group(“rk3568”) deps ohos_prebuilt_etc(“fw_bcm43438a1.bin”) ohos_prebuilt_etc(“nvram_ap6212a.txt”),意思是rk3568这个组依赖于fw_bcm43438a1.binnvram_ap6212a.txt两个编译动作。

3.2固件配置

device/hihope/hardware/wifi/BUILD.gn

 

 

我们抽出一个来进行细看

ohos_prebuilt_etc("fw_bcm43438a1.bin") {

  source = "$rk3568_ETC_DIR/fw_bcm43438a1.bin"  //源文件

  install_images = [ vendor_base_dir ]  //安装路径以/vendor为基础

  relative_install_dir = "firmware" //安装到/vendor/firmware

  part_name = "rockchip_products" //rockchip_products是总的part名,可以不理会

  install_enable = true //使能安装

}

那么我们的rk3568这个group又由谁制定呢?我们来看上一层的BUILD.gn

3.3新增调度路径

device/rockchip/rk3568/hardware/BUILD.gn

 

import("//build/ohos.gni")

 

group("hardware_group") {

  deps = [

    "//device/hihope/hardware/isp:isp",

    "//device/hihope/hardware/mpp:mpp",

    "//device/hihope/hardware/wifi:rk3568",

  ]

}

 

Ps:路径标蓝,修改点标红