原创 MTK之Flash篇三------NVRAM

2010-7-18 12:25 6104 6 6 分类: 软件与OS

注:为个人收集和理解所书,如有误请指正,转载请注明出处


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函数添加对应的初始化函数。


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
6
关闭 站长推荐上一条 /3 下一条