MTK MODEM(1)--- MTK平臺NV基本功能與操作
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相關檔案
Android守護程序位置
vendor\mediatek\libs\nvram_daemon
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