MTK:MVRAM操作

https://blog.csdn.net/Jones_Nelson/article/details/78226817

 

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;
    }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

PC META工具可以读写备份NV相关文件

Android守护进程位置

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)
1
2
3
4
5
6
7
8
9
10
11
12
\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
1
2
3
4
5
相机相关NV位置

\vendor\mediatek\proprietary\hardware\mtkcam\feature\mfnr\modules\nvram
————————————————
版权声明:本文为CSDN博主「Jones_Nelson」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Jones_Nelson/article/details/78226817

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值