(转载) MTK之NVRAM研究[三]
MTK之NVRAM研究[三]
Appendix2:
2009-12-16 下午 05:24:18
一,下面来具体看看两个不同的NV项的实现过程,具体的步骤还是和上面的一样的;
这里面实现两中NV项:
NV项一:_LZQ_TEST_ :他的数据结构比较简单,只是一个数组;
NV项二:__HL_WEB_PHONE__ :他的数据结构是个结构体,和NV项一相比有些地方实现不一样;
具体实现如下:
//--------------------在文件中定义NV项的LID:nvram_user_defs.h----------
#ifdef _LZQ_TEST_ //__HQ_ADD_BOOKMARK_DEFAULT__
NVRAM_EF_MY_NEW_DATA_LID,
#endif
#ifdef __HL_WEB_PHONE__
NVRAM_EF_MY_WEB_PHONE_DATA_LID,
#endif
//--------------------在文件中定义NV项的大小和个数:nvram_user_defs.h----------
#ifdef _LZQ_TEST_ //__HQ_ADD_BOOKMARK_DEFAULT__
#define NVRAM_EF_MY_NEW_DATA_SIZE 10 // 10 byte each record
#define NVRAM_EF_MY_NEW_DATA_TOTAL 9 //9 records
#endif
#ifdef __HL_WEB_PHONE__
typedef struct
{
kal_uint8 status; //open or close;
kal_uint32 phone_number[11]; //本机号码;
kal_uint8 number_exten[10];//号码前缀;
kal_uint8 number_zone[8]; //本地区号;
}MY_WEB_PHONE;
#define NVRAM_EF_MY_WEB_PHONE_DATA_SIZE sizeof(MY_WEB_PHONE) //MY_WEB_PHONE
#define NVRAM_EF_MY_WEB_PHONE_DATA_TOTAL 1 //1
#endif
//lzq说明:注意这里,新添加的NV项如果用到了数据结构,则一定要和它声明结构体大小的地方一起声明,不然编译时找不到结构体;
//---------------------------在文件中设置NV的默认值:nvram_user_config.c---------
#ifdef _LZQ_TEST_ //__HQ_ADD_BOOKMARK_DEFAULT__
static kal_uint8 const NVRAM_EF_MY_NEW_DATA_DEFAULT[90] ={
0x12,0x34,0x56,0x78,0x90,
0x12,0x34,0x56,0x78,0x90
};
#endif
//在这里由于NV项二不用默认值,他只要使用平台的默认0值就可以了,所以在这里他不用声明和定义默认值;
//---------------------------在文件中设置NV的属性:nvram_user_config.c---------
#ifdef _LZQ_TEST_ //__HQ_ADD_BOOKMARK_DEFAULT__
,{
NVRAM_EF_MY_NEW_DATA_LID,
NVRAM_EF_MY_NEW_DATA_SIZE,
NVRAM_EF_MY_NEW_DATA_TOTAL,
NVRAM_EF_MY_NEW_DATA_DEFAULT,//lzq:当不好设置默认值时就用默认的0代替;
NVRAM_ATTR_MULTIPLE,
NVRAM_CATEGORY_USER,
"CT52", //lzq:这是做什么的?
VER(NVRAM_EF_MY_NEW_DATA_LID), //lzq:这是做什么的?
"My new data\0", //lzq:这是做什么的?
NVRAM_INVALID_VALUE
}
#endif
#ifdef __HL_WEB_PHONE__ //__HQ_ADD_BOOKMARK_DEFAULT__
,{
NVRAM_EF_MY_WEB_PHONE_DATA_LID,
NVRAM_EF_MY_WEB_PHONE_DATA_SIZE,
NVRAM_EF_MY_WEB_PHONE_DATA_TOTAL,
NVRAM_EF_ZERO_DEFAULT,//NVRAM_EF_MY_NEW_DATA_DEFAULT,//lzq:当不好设置默认值时就用默认的0代替;
NVRAM_ATTR_MULTIPLE,
NVRAM_CATEGORY_USER,
"CT53", //lzq:这是做什么的?
VER(NVRAM_EF_MY_WEB_PHONE_DATA_LID), //lzq:这是做什么的?
"My new data2\0", //lzq:这是做什么的?
NVRAM_INVALID_VALUE
}
#endif
//-----------在文件中设置NV的版本号:custom_nvram_editor_data_item.h---------------
//lzq: 为新添加的NV项添加版本号;
#ifdef _LZQ_TEST_ //__HQ_ADD_BOOKMARK_DEFAULT__
#define NVRAM_EF_MY_NEW_DATA_LID_VERNO "002"
#endif
//lzq: 为新添加的NV项添加版本号;
#ifdef __HL_WEB_PHONE__ //__HQ_ADD_BOOKMARK_DEFAULT__
#define NVRAM_EF_MY_WEB_PHONE_DATA_LID_VERNO "000"
#endif
//-----------在文件中设置meta属性值:custom_nvram_editor_data_item.h---------------
--------------先添加meta说明的结构体-------------------------------
//lzq: 为新添加的NV项添加NV META工具中的说明结构体;
#ifdef _LZQ_TEST_ //__HQ_ADD_BOOKMARK_DEFAULT__
typedef struct
{
kal_uint8 nvram_ef_my_new_data_field[NVRAM_EF_MY_NEW_DATA_SIZE];
}nvram_ef_my_new_data_struct;
#endif
//lzq: 为新添加的NV项添加NV META工具中的说明结构体;
#ifdef __HL_WEB_PHONE__ //__HQ_ADD_BOOKMARK_DEFAULT__
typedef struct
{
MY_WEB_PHONE nvram_ef_my_new_data2_field;
}nvram_ef_my_new_data2_struct;
#endif
//lzq说明:在这里声明nvram_ef_my_new_data2_field时一定要用自己的数据结构来声明,不然在meta工具中看不到自己的数据;
----------------然后设置meta说明结构体:---------------------------
//lzq: 为新添加的NV项添加NV META工具中的说明字符串;
#ifdef _LZQ_TEST_ //__HQ_ADD_BOOKMARK_DEFAULT__
LID_BIT VER_LID(NVRAM_EF_MY_NEW_DATA_LID) nvram_ef_my_new_data_struct* NVRAM_EF_MY_NEW_DATA_TOTAL
{
nvram_ef_my_new_data_field:"my_new_data setting";
nvram_ef_my_new_data_field[2]
{
MynewData:6 "lzq"
{
};
};
};
#endif
//lzq: 为新添加的NV项添加NV META工具中的说明字符串;
#ifdef __HL_WEB_PHONE__ //__HQ_ADD_BOOKMARK_DEFAULT__
LID_BIT VER_LID(NVRAM_EF_MY_WEB_PHONE_DATA_LID) nvram_ef_my_new_data2_struct* NVRAM_EF_MY_WEB_PHONE_DATA_TOTAL
{
};
#endif
具体的结果看下图:
注意:在步骤六中出现了这样的问题:
Reading custom_data succeeded.
Start to parse the custom NVRAM DATA!
make: *** [.\tst\database_classb\BPLGUInfoCustomAppSrc] Error 1
因为在结构体中使用了说明字符串:
LID_BIT VER_LID(NVRAM_EF_MY_WEB_PHONE_DATA_LID) nvram_ef_my_new_data2_struct* NVRAM_EF_MY_WEB_PHONE_DATA_TOTAL
{
//-------------------web phone-----------
nvram_ef_my_new_data2_field:"my_web_phone setting"{};
status:"open or close switch"{};
phone_number:"the phone number"{};
number_exten:"the phone number pre extern"{};
number_zone:"the zone number"{};
};
此时只要将上面的这段红色的代码注释掉就可以了,本来按照文档的解释这样写是没问题的,但不知道为什么会出现问题;高手路过多指教;
另外附上平台的一个NV的流程,仅作参考:
//------1---------在文件中定义LID: nvram_common_defs.h ---------------------------------
NVRAM_EF_WAP_PROFILE_CONTENT_LID,
//-------2----------在文件中 定义 结构体common_nvram_editor_data_item.h---------------------------------------
typedef struct
{
kal_uint8 editable;
kal_uint8 empty;
kal_uint16 proxy_port;
kal_uint8 homepage_url[NVRAM_WAP_PROFILE_HOMEPAGE_URL_LEN];
kal_uint8 data_account;
kal_uint8 conn_type;
kal_uint8 proxy_ip[4];
kal_uint8 username[NVRAM_WAP_PROFILE_USERNAME_LEN];
kal_uint8 password[NVRAM_WAP_PROFILE_PASSWORD_LEN];
} nvram_wap_profile_content_struct;
//-------3--------------在文件中定义内存大小:Nvram_common_defs.h------------------------------------------
#define NVRAM_EF_WAP_PROFILE_CONTENT_SIZE sizeof(nvram_wap_profile_content_struct)
#define NVRAM_EF_WAP_PROFILE_CONTENT_TOTAL 10
//--------4-------------在文件中定义默认值:Nvram_common_config.c--------------------------------------------
nvram_wap_profile_content_struct const NVRAM_EF_WAP_PROFILE_CONTENT_DEFAULT[NVRAM_WAP_PROFILE_MAX]=
{
#ifdef CUSTOM_WAP_PROFILE_CONTENT_DEFAULT
CUSTOM_WAP_PROFILE_CONTENT_DEFAULT
#else
{
1,0,80,"http://mobile.fetnet.net",10,1,210,241,199,199,"",""
},
{
1,0,8080,"http://wap.emome.net",11,1,10,1,1,1,"",""
},
}
//-----------5----------------在文件中设置属性nvram_common_config.c--------------------------------------------
,{
NVRAM_EF_WAP_PROFILE_CONTENT_LID,
NVRAM_EF_WAP_PROFILE_CONTENT_SIZE,
NVRAM_EF_WAP_PROFILE_CONTENT_TOTAL,
(kal_uint8*)NVRAM_EF_WAP_PROFILE_CONTENT_DEFAULT,
NVRAM_ATTR_AVERAGE | NVRAM_ATTR_MULTIREC_READ,
NVRAM_CATEGORY_MULTI_DEFAULT,
"MP2U",
VER(NVRAM_EF_WAP_PROFILE_CONTENT_LID),
"wap profile\0",
NVRAM_RESERVED_VALUE
}
//该nv项的lid为:NVRAM_EF_WAP_PROFILE_CONTENT_LID,
//------------6-----------在文件中:common_nvram_editor_data_item.h中设置mata属性-----------------------;
typedef struct
{
nvram_wap_profile_content_struct wapProfile1;
nvram_wap_profile_content_struct wapProfile2;
nvram_wap_profile_content_struct wapProfile3;
nvram_wap_profile_content_struct wapProfile4;
nvram_wap_profile_content_struct wapProfile5;
nvram_wap_profile_content_struct wapProfile6;
nvram_wap_profile_content_struct wapProfile7;
nvram_wap_profile_content_struct wapProfile8;
nvram_wap_profile_content_struct wapProfile9;
nvram_wap_profile_content_struct wapProfile10;
} nvram_meta_wap_profile_content_struct;
LID_BIT VER_LID(NVRAM_EF_WAP_PROFILE_CONTENT_LID)
nvram_meta_wap_profile_content_struct *NVRAM_EF_WAP_PROFILE_CONTENT_TOTAL
{
};
【lzq2010-4-7 下午 04:28:22 补充】
1,在手机中隐藏了一个盘符:C盘;在modis上我们能看到这个盘符里的文件,都是临时文件和NV文件;这个盘符很重要因为在down软件时半擦不会将这个盘里的文件删除;而如果是全擦的话就会删除这里的全部文件;所以半擦时没有升级版本号的NV不会生效;
另外,升级了版本号的NV是如何生效的需要另外深入研究;
转载于:https://www.cnblogs.com/sierllen/archive/2012/05/07/2486836.html
(转载) MTK之NVRAM研究[三]相关推荐
- MTK之NVRAM研究[三]
一,下面来具体看看两个不同的NV项的实现过程,具体的步骤还是和上面的一样的: 这里面实现两中NV项: NV项一:LZQ_TEST :他的数据结构比较简单,只是一个数组: NV项二:HL_WEB_PHO ...
- MTK之NVRAM研究
MTK之NVRAM研究[一] 由NVRAM文件管理器管理的数据单元都是逻辑数据项,一个数据项可以被看作为一个固定大小的记录,所以我们根据他们的记录的大小将所有的逻辑数据项分为两种类型: 1,透明数据元 ...
- MTK之NVRAM研究[一]
[size=large] 由NVRAM文件管理器管理的数据单元都是逻辑数据项,一个数据项可以被看作为一个固定大小的记录,所以我们根据他们的记录的大小将所有的逻辑数据项分为两种类型: 1,透明数据元(T ...
- mtk NVRAM研究系列
MTK之NVRAM研究[一] 由NVRAM文件管理器管理的数据单元都是逻辑数据项,一个数据项可以被看作为一个固定大小的记录,所以我们根据他们的记录的大小将所有的逻辑数据项分为两种类型: 1,透明数据元 ...
- C#多线程学习(三) 生产者和消费者 (转载系列)——继续搜索引擎研究
前面说过,每个线程都有自己的资源,但是代码区是共享的,即每个线程都可以执行相同的函数.这可能带来的问题就是几个线程同时执行一个函数,导致数据的混乱,产生不可预料的结果,因此我们必须避免这种情况的发生. ...
- C#多线程学习(四) 多线程的自动管理(线程池) (转载系列)——继续搜索引擎研究...
在多线程的程序中,经常会出现两种情况: 一种情况: 应用程序中,线程把大部分的时间花费在等待状态,等待某个事件发生,然后才能给予响应 这一般使用ThreadPo ...
- C#多线程学习(五) 多线程的自动管理(定时器) (转载系列)——继续搜索引擎研究...
Timer类:设置一个定时器,定时执行用户指定的函数. 定时器启动后,系统将自动建立一个新的线程,执行用户指定的函数. 初始化一个Timer对象: Timer timer ...
- 图像信噪比计算公式_CT 科研设计之图像质量对比研究三步曲
CT科研是CT技术的窗口,帮助医务工作者开展CT科研也是我们的责任和义务! 问 如何科学地比较不同重建技术的图像质量? 答 首先要排除其他影响图像质量的因素, 然后进行客观指标的比较, 最后进行主观指 ...
- 【转载】VMware vSphere中三种磁盘规格的解释说明
在VMware vSphere中,不管是以前的5.1版本,或者是现在的6.5版本,创建虚拟机时,在创建磁盘时,都会让选择磁盘的置备类型,如下图所示,分为: 厚置备延迟置零 厚置备置零 Thin Pro ...
- java写三次函数导数,用导数研究三次函数
<用导数研究三次函数>由会员分享,可在线阅读,更多相关<用导数研究三次函数(14页珍藏版)>请在人人文库网上搜索. 1.用导数研究三次函数1. 知识点解析1.定义:定义1.形如 ...
最新文章
- 中国软件正版化的理想模型
- 高性能MySQL——查询性能优化
- 上传文件显示进度条_文件上传带进度条进阶-断点续传
- wps for linux alpha 15 语言包,WPS Office for Linux Alpah 7发布
- 【Java】JDBC连接MySQL驱动
- TiDB 源码阅读系列文章(十八)tikv-client(上) 1
- 人工智能是计算机科学的一个分支下定义,阅读中有一篇叫人工智能什么,是说明文...
- Atitit 算法之道 attilax著 1. 第二部分(Part II) 排序与顺序统计(Sorting and Order Statistics)	1 2. 第六章 堆排序(Heapsort)
- ajax调用网易云APi遇到跨域问题
- 程序设计语言与语言程序处理程序基础(软件设计师备考笔记)
- python实现分词和词云制作
- 如何评价近几年顶会的超分,去噪,去模糊等图像复原文章?
- 【苹果相册推】Xcode项目,我们将其命名为mypushchat,以及调试的iOS设备
- html5 figure和figcaption
- Windows API一日一练(29)SelectObject和DeleteObject函数
- 网盘搜索引擎以及网盘分享社区地址
- PAT乙级1034题解
- jionlp:一款解析地址信息的神奇 Python 库
- 计算机网络(17)——虚电路网络与数据报网络
- Android 12.0修改系统默认设备类型的平板电脑类型为设备类型
热门文章
- jquery富文本编译器_jQuery 移动端artEditor富文本编辑器
- 搭建mqtt服务器apollo
- 阶段3 3.SpringMVC·_01.SpringMVC概述及入门案例_03.入门程序之需求分析
- 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第3节 两种获取Stream流的方式_5_Stream流中的常用方法_map...
- 阶段1 语言基础+高级_1-3-Java语言高级_07-网络编程_第4节 模拟BS服务器案例_2_模拟BS服务器代码实现...
- 案例:手动输入一个字符串,打散放进一个列表,小写字母反序 大写字母保持不变...
- CF125E MST Company
- 前端学习01-07图像标签
- 利用SusuCMS快速创建网站(一)
- JS 使用RSA加密解密