[DESCRIPTION]
客户有需求修改wifi的参数,如打开5G支持项等,同时需要可以半擦和OTA升级,但是原本的WIFI MAC地址不可以丢失。
[SOLUTION]
WIFI nVRam参数更新升级,同时保留MAC地址,可以按照以下步骤修改:
- 修改 AP_CFG_RDEB_FILE_WIFI_LID_VERNO,将此值增加 1.
Custom_NvRam_LID.h (alps\mediatek\custom$projet\cgen\inc)
#define AP_CFG_RDEB_FILE_WIFI_LID_VERNO "000" 修改为 "001"
- 修改 CFG_file_info_custom.h 中的 wifi 项
CFG_file_info_custom.h (alps\mediatek\custom\$projet\cgen\inc)
{
"/data/nvram/APCFG/APRDEB/WIFI", VER(AP_CFG_RDEB_FILE_WIFI_LID),
CFG_FILE_WIFI_REC_SIZE,
CFG_FILE_WIFI_REC_TOTAL, SIGNLE_DEFUALT_REC, (char *)&stWifiCfgDefault,
DataReset, null
},
最后两个参数改为:
{
"/data/nvram/APCFG/APRDEB/WIFI", VER(AP_CFG_RDEB_FILE_WIFI_LID),
CFG_FILE_WIFI_REC_SIZE,
CFG_FILE_WIFI_REC_TOTAL, SIGNLE_DEFUALT_REC, (char *)&stWifiCfgDefault,
DataConvert , WIFI_ConvertFunc
},
- 添加客制化函数 WIFI_ConvertFunc.
int WIFI_ConvertFunc(int currentVerID, int NewVerID, char *pSrcMem, char
*pDstMem)
{
int rec_size = CFG_FILE_WIFI_REC_SIZE;
int rec_num = CFG_FILE_WIFI_REC_TOTAL;
UINT_8 aucMacAddress[6] = {0};
WIFI_CFG_PARAM_STRUCT *p_wifi_para;
if(NULL == pSrcMem || NULL == pDstMem){
return false;
}
else{
// get the old wifi mac addr //保存原始MAC数据
p_wifi_para = (WIFI_CFG_PARAM_STRUCT*)pSrcMem;
meMCPy(aucMacAddress, p_wifi_para->aucMacAddress, sizeof(aucMacAddress));
//write the new wifi parameter //赋值新的WIFI参数
memcpy(pDstMem, &stWifiCfgDefault, sizeof(WIFI_CFG_PARAM_STRUCT));
//restore the wifi mac addr //回写原始MAC数据
p_wifi_para = (WIFI_CFG_PARAM_STRUCT*)pDstMem;
memcpy(p_wifi_para->aucMacAddress, aucMacAddress, sizeof(aucMacAddress));
return true;
}
}
然后 **mmm 编译到 external/nvram/libcustom_nvram **
通过OTA 的方式使之生效
adb push ota.zip /data/update.zip
adb shell
aeon6737t_66_d_n:/ # mkdir -p cache/recovery
aeon6737t_66_d_n:/ # uncrypt /data/update.zip /cache/recovery/block.map
aeon6737t_66_d_n:/ # echo "--update_package=@/cache/recovery/block.map" > /cache/recovery/command
aeon6737t_66_d_n:/ # reboot recovery