MTK平台NV基本功能与操作
一、NVRAM基本概念
NV就是Non Volatile缩写,就是非易失性存储性,通俗来说,就是即使系统掉电后,存储在该存储器的数据也不会丢失。
为什么要备份恢复,NV值是需要通过校准和终测才能使手机硬件达到最佳工作状态,特别是其中的RF相关的NV项,经过校准及终测后,每台手机的这些NV值基本上都不一样,又加上NV数据是是存储在镜像文件,而镜像文件数据很可能遭到破坏(如:重新烧写版本),这时的NV数据也将被破坏,之前校准和终测后的NV数据也将无法恢复,使得手机将面临重新走校准、终测的生产流程。
图1-NVRAM框架图
Non-Volatile Repository Access Manager(MTK):
保存手机配置,比如IMEI, 射频校准数据,音量,来电铃声,界面语言,定时器,视频设置等等。应用程序能够安全保存数据到内存(NAND/NOR Flash,EMMC),系统崩溃时,能够保护日常配置数据,备份文件和默认配置不丢失。
AP BIN region:
智能手机AP侧备份一个NVRAM数据版本,包含了Modem NVRAM数据,譬如重要的RF校准数据等。(CALIBRAT, NVD_IMEI)
二、NVRAM数据结构
MTK平台采用LID(Logical Data Item)和LID Table哈希表的数据结构来管理NV Item列表。
描述了一个数据项,操作NV最小单位
Attributes
限制读写方式
Category
限制储存方式(物理分类)
LID table
限制存储方式(逻辑分类)
三、NVRAM添加步骤
NV添加LID基本步骤
1. 新增LID枚举型变量
2. 定义Record 大小和个数
3. 定义LID版本号(VERNO)
4. 声明默认值Default
5. 声明LID入口
四、NVRAM可调可测
NVRAM对外可编程接口如下,对特定NV进行读写操作
kal_bool nvram_external_read_data(nvram_lid_enum LID, kal_uint16 rec_index, kal_uint8 *buffer, kal_uint32 buffer_size);
kal_bool nvram_external_write_data(nvram_lid_enum LID, kal_uint16 rec_index, kal_uint8 *buffer, kal_uint32 buffer_size);
kal_bool nvram_external_reset_data(nvram_lid_enum LID, kal_uint16 rec_index, kal_uint16 rec_amount);
1
2
3
下面一个写NV操作
----------
//lid read
if( !nvram_external_read_data(ldi->LID, 1, (kal_uint8 *)cmp_buffer, ldi->size) )
{
nvram_ut_trace("[NVUT] nvram_security_test(): first read test LID fail!\n\r");
return KAL_FALSE;
}
if( KAL_TRUE == nvram_external_write_data(ldi->LID, 1, (kal_uint8 *)cmp_buffer, ldi->size) )
{
nvram_ut_trace("[NVUT] nvram_security_test(): write fail not happen!\n\r");
return KAL_FALSE;
}
else
{
nvram_ut_trace("[NVUT] nvram_security_test(): can't write when locked!\n\r");
}
//lid reset
nvram_reset_data_items(NVRAM_RESET_CERTAIN, NVRAM_APP_RESERVED, ldi, 1, ldi->total_records);
nvram_get_default_value_to_write(ldi, 1, (kal_uint8 *)data_buffer, ldi->size); //get new default value
if( !nvram_external_read_data(ldi->LID, 1, (kal_uint8 *)cmp_buffer, ldi->size) )
{
nvram_ut_trace("[NVUT] nvram_security_test(): third read test LID fail!\n\r");
return KAL_FALSE;
}
————————————————
PC META工具可以读写备份NV相关文件
ndroid守护进程位置
vendor\mediatek\libs\nvram_daemon
1
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE = nvram_daemon
LOCAL_MODULE_CLASS = EXECUTABLES
LOCAL_MODULE_OWNER = mtk
LOCAL_PROPRIETARY_MODULE = true
LOCAL_MODULE_TAGS = optional
LOCAL_SHARED_LIBRARIES = libnvram libcustom_nvram libfile_op libnvram_daemon_callback libhwm libc++
LOCAL_MULTILIB = 32
LOCAL_SRC_FILES_32 = arm/nvram_daemon
include $(BUILD_PREBUILT)
\vendor\mediatek\proprietary\external\nvram
\vendor\mediatek\proprietary\external\nvram\libcustom_nvram
\vendor\mediatek\proprietary\external\nvram\libnvram
\vendor\mediatek\proprietary\external\nvram\libnvram_daemon_callback
\vendor\mediatek\proprietary\external\nvram\nvramagentclient
相机相关NV位置
\vendor\mediatek\proprietary\hardware\mtkcam\feature\mfnr\modules\nvram
1
点赞
————————————————
版权声明:本文为CSDN博主「Jones_Nelson」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Jones_Nelson/article/details/78226817