[RK3288][Android6.0] WiFi的Firmware和Nvram文件

Platform: Rockchip
OS: Android 6.0
Kernel: 3.10.92
Wifi: AP6335

概念:

  • Firmware:

WiFi芯片内部有一个小系统,用来运行802.11协议,此部分代码就叫Firmware。有些芯片(例如 broadcom)的Firmware是以文件的形式存放的,有些芯片(例如 realteck)的Firmware是做到驱动代码中的。

  • Nvram:

WiFi芯片需要作相应的RF参数校准,校准值等信息一般放到到Nvram中。例如,同一个芯片bcm4330,做成不同的模块时,需要不同的Nvram。另外,有些芯片(例如realtek)将RF参数校准等信息写到芯片的EEPROM中,这部分工作在模块出厂时完成
WiFi芯片工作前,需要host先下载Firmware文件到WiFi芯片中,此部分工作在WiFi驱动中完成。

路径:
Firmware与Nvram文件存放于external/wlan_loader/firmware/目录中,最终被编译到系统的/system/etc/firmware
[RK3288][Android6.0] WiFi的Firmware和Nvram文件_第1张图片

加载:
系统开机默认就加载好firmware和nvram文件了,过程可参考 [RK3288][Android6.0] WiFi的驱动初始化过程小结
rk_wifi_config.c

int rkwifi_set_firmware(char *fw, char *nvram)
{
    int chip = get_wifi_chip_type();

    if (chip == WIFI_AP6335) {
        sprintf(fw, "%s%s", ANDROID_FW_PATH, "fw_bcm4339a0_ag.bin");
        sprintf(nvram, "%s%s", ANDROID_FW_PATH, "nvram_AP6335.txt");
    }
}

因此对应的文件是fw_bcm4339a0_ag.bin

在framework虽然也有调reload firmware
SoftapController.cpp

int SoftapController::fwReloadSoftap(int argc, char *argv[])
{
    char *fwpath = NULL;

    if (argc < 4) {
        ALOGE("SoftAP fwreload is missing arguments. Please use: softap  ");
        return ResponseCode::CommandSyntaxError;
    }

    if (strcmp(argv[3], "AP") == 0) {
        fwpath = (char *)wifi_get_fw_path(WIFI_GET_FW_PATH_AP);
    } else if (strcmp(argv[3], "P2P") == 0) {
        fwpath = (char *)wifi_get_fw_path(WIFI_GET_FW_PATH_P2P);
    } else if (strcmp(argv[3], "STA") == 0) {
        fwpath = (char *)wifi_get_fw_path(WIFI_GET_FW_PATH_STA);
    }
    if (!fwpath)
        return ResponseCode::CommandParameterError;
    if (wifi_change_fw_path((const char *)fwpath)) {
        ALOGE("Softap fwReload failed");
        return ResponseCode::OperationFailed;
    }
    else {
        ALOGD("Softap fwReload - Ok");
    }
    return ResponseCode::SoftapStatusResult;
}

这些宏定义是在wifi_bt_common.mk中

WIFI_DRIVER_FW_PATH_STA     := "/system/etc/firmware/fw_bcm4329.bin"
WIFI_DRIVER_FW_PATH_P2P     := "/system/etc/firmware/fw_bcm4329_p2p.bin"
WIFI_DRIVER_FW_PATH_AP      := "/system/etc/firmware/fw_bcm4329_apsta.bin"

但是在external/wlan_loader/firmware并不存在,虽然驱动加载,但是softap和p2p可能会有问题

你可能感兴趣的:(子类__WiFi)