nvram是程序用来搭建FAT文件系统的那一块,是flash后面分出的一块.
“flash后面分出的一块”:
在Build/CUSTOMER/scatCUSTOMER.txt中这样一行(Flash 64+32(Unit:Mbits),即8MB ROM,4MB RAM,(Unit:MBytes) ):
;SCHEME : external 7MB flash memory and 4MB SRAM
(除去文件系统后ROM还有7MB空间,RAM为 4MB).
在NVRAM中存储的数据包括:
1)校准数据
2)用户数据,如Phone book, SMS, to-do list 等
3)协议层数据,IMEI,TCM等
4)MMI设置、control values,wallpaper(墙纸),theme(主题),profiles等
DF: Dedicated File 专用文件
EF: Elementary File 基本文件
MF: Master File 主文件
EF三种类型:
Transparent EF 以Hex Binary形式存储
Linear-Fix EF 如电话号码,短信
Cyclic EF 如通话记录
nvram/src/Nvram_data_items.c中的logical_data_item_table_core中定义了各项存储。
LID Logical Data Item Identifier
Size size of one record
Total_records if = 1,it is transparent,otherwise linear-fixed
Attr attributes(Important/Writeprotect/Multiple/Confidential/
Multirec_Read/OTP/Difference)
Category category(User/System/Composed/Factory/Multi_Default/Custpack/
Branch/Shadow/Shadow_MS)
Size和Total_records定义在custom/common/pluto_mmi/Nvram_common_defs.h
Nvram_drv_type_enum Device type(FDM/EEPROM/MMC)
Fileprefix 文件前缀
File verno Version number of the data item
Description Human-reable description for data item
LIDclass (average LID / important LID)
Record Internally used by NVRAM
Transparent:the record size of this kind of data item is one byte.That is,data item consist of a sequences of bytes.
(Logical) Data Item:The basic management unit of NVRAM
向NVRAM中添加存储项
以存储Mobile ID为例。
① custom/common/Pluto_mmi/Common_nvram_editor_data_item.h
定义结构体
typedef struct
{
kal_uint8 marker[16];
} nvram_ef_mobile_id_struct;
定义LID版本号
#define NVRAM_EF_MOBILE_ID_LID_VERNO "001"
LID与结构体关联
LID_BIT VER_LID(NVRAM_EF_MOBILE_ID_LID)
nvram_ef_mobile_id_struct *NVRAM_EF_MOBILE_ID_TOTAL
{
};
② custom/common/Pluto_mmi/Nvram_common_defs.h
定义结构体对应的大小,总个数
#define NVRAM_EF_MOBILE_ID_SIZE sizeof(nvram_ef_mobile_id_struct)
#define NVRAM_EF_MOBILE_ID_TOTAL 1
定义LID
在结构体nvram_lid_commapp_enum的NVRAM_EF_LAST_LID_COMMAPP之前添加
NVRAM_EF_MOBILE_ID_LID
③ custom/common/Pluto_mmi/Nvram_common_config.c
定义结构体存储的默认值
static nvram_ef_mobile_id_struct const NVRAM_EF_MOBILE_ID_DEFAULT[] =
{
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
};
在结构体logical_data_item_table_comm_app的{ NVRAM_EF_RESERVED_LID }之前添加
{
NVRAM_EF_MOBILE_ID_LID, //LID号
NVRAM_EF_MOBILE_ID_SIZE, //结构体大小
NVRAM_EF_MOBILE_ID_TOTAL, //总个数
NVRAM_NORMAL((kal_uint8 const*)NVRAM_EF_MOBILE_ID_DEFAULT), //默认值
NVRAM_ATTR_AVERAGE,
NVRAM_CATEGORY_USER,
"MP9B", //序号
VER(NVRAM_EF_MOBILE_ID_LID), //LID版本号
"MOBILE ID/0", //该存储结构名称
NVRAM_RESERVED_VALUE
}
在该结构中添加的位置最好与声明的LID号在nvram_lid_commapp_enum中的结构对应。之前有次因为二者添加的位置不对应而导致Socket连接是ABM请求总是失败,无法连接。我想这样有可能是打乱了调用的某些东东,具体原因不详。
如果想在task初始化的时候初始化存储结构中的值可以在
Plutommi/mmi/framework/tasks/TasksSrc/MMITask.c中的InitNvramData函数添加对应的初始化函数。