高通平台读写nv总结
一,引言
1. 什么是NV
高通平台的NV,保存了系统运行过程中各个模块可能用到的一些参数值,它是以单个文件的形式保存在EFS中,但用户是不能随意访问的,只能通过QXDM来进行读写。对于60X0平台,NV就有将近5千多项。
2. 为什么要备份恢复NV
NV值是需要通过校准和终测才能使手机硬件达到最佳工作状态,特别是其中的RF相关的NV项,经过校准及终测后,每台手机的这些NV值基本上都不一样,又加上NV数据是是存储在EFS,而EFS的数据很可能遭到破坏(如:重新烧写版本),这时的NV数据也将被破坏,之前校准和终测后的NV数据也将无法恢复,使得手机将面临重新走校准、终测的生产流程。
3. 备份恢复的原则
备份:首先要确定需要备份的NV有那些项(一般是RF相关的),一旦检测到对NV项的修改,则在EFS中创建一个标志文件,在每次开机时判断这个标志文件是否存在而执行是否做备份。
恢复:同样在每次开机的时候判断EFS中是否存在恢复标志文件,如果不存在则恢复NV,然后创建这个标志文件,创建成功后,下次开机就会不进行恢复。
二,NV的备份
1. 备份的区域
由于所需要备份的NV项不是很多(一般就几十项),所以我们可以在FLASH上开辟一块区域专门用于保存NV备份数据。备份区域是以一定的组织格式来存放数据的(如图):

其中每个Item都是以:Item号+内容大小(Byte)+内容 的形式来存放的。比如第10项NV可能有2个值,分别是0x11,0x22,则它在FLASH中存放的形式就是:
0a 00 00 00 02 00 00 00 11 22 --------(这里Item号、内容大小都是UINT32 类型)。
2. 备份的时机
一般一台机器在出厂前,都要通过终测仪进行校准、终测。这个过程就会修改到一些RF相关的NV项,也就是我们需要备份的NV。对于软件上来说,不管是用终测仪,或则高通的QPST,QXDM工具来修改NV项,最后都会调用到写NV的函数:nvdiag_write(),我们可以在这个函数里面创建备份标志文件,在下次系统启动时读取这个文件是否存在来判断是否要做备份。
3. 备份的方法
之前说过,高通的NV都是以单个文件的形式存放在EFS中,每个文件的文件名就是NV项的序列号,所以我们可以直接调用EFS的读函数nv_read来读取某个特定的NV项的值。
三,NV的恢复
1. 恢复的时机
恢复就是备份的逆过程,即把存放在FLASH中的备份数据恢复到EFS中对应的NV项中去。如果手机出厂以后一旦要进行软件升级,并且同时需要破坏EFS,则就不得不进行NV项的恢复。所以系统在每次开机运行时,都会检查文件系统中是否存在恢复标志文件,如果不存在则进行恢复并创建;反之则不恢复。这就要求我们每次发布的软件版本中打包的EFS不能包含这个标志文件。
2. 恢复的方法
进行恢复的时候就要读取备份区域中备份的每项NV,然后同样调用EFS的写函数nv_write把数据写到对于的NV项中。
高通平台读写nv总结的更多相关文章
- 高通平台读写nv总结【转】
本文转载自:https://blog.csdn.net/suofeng12345/article/details/52713993 一,引言 1. 什么是NV 高通平台的NV,保 ...
- Android高通平台调试Camera驱动全纪录
项目比较紧,3周内把一个带有外置ISP,MIPI数据通信,800万像素的camera从无驱动到实现客户全部需求. 1日 搭平台,建环境,编译内核,烧写代码. 我是一直在Window下搭个虚拟机登服务器 ...
- 高通平台启动log概述(PBL log、sbl1 log、kernel log)【转】
本文转自:https://blog.csdn.net/RadianceBlau/article/details/78416776?utm_source=blogxgwz9 高通平台启动log概述(PB ...
- 高通平台点亮LCD个人总结
点击打开链接 高通平台LCD模块大致分为两部分:KERNEL和LK.在进行点屏之前,应该认真查看LCD原理图,弄清楚LCD亮屏需要满足的条件和上电时序,同时可以跟LCD IC原厂拿到初始化代码. 首先 ...
- 高通平台手机开发之LCD
4.1. LCD 参考文档: 1) 80-NA157-174_E_DSI_Programing_Guide_B-Family_Android_Devices.pdf 2) 80-NN766-1_A_L ...
- 高通平台如何避免误入FFBM模式
前面两篇博客分别介绍了通过fastboot和QFIL工具退出FFBM模式的方法.虽然售后的同学可以这么指导用户做恢复,但步骤多操作也麻烦,且属于事后处理,如果大面积高概率地出现,会严重影响用户体验.这 ...
- 高通平台获取secure boot,串号等状态
adb shell下 运行./system/bin/r address 其中address对应各个flag参数的地址,具体如下: 无法打开/dev/mem节点(没有该节点),这时只需在内核配置中选上C ...
- 高通平台如何使用QPST抓DUMP
一 :确认手机状态 手机系统死机白屏后,使用USB线 连接手机和计算机.打开计算机设备管理器 ,当其中与手机相关的端口只有DIAG 口 项(9006端口)时,表明手机处于DUMP 模式,可以抓DUMP ...
- 【shell】分享高通平台刷版本简单的一个shell脚本
#!/bin/shadb wait-for-deviceadb reboot bootloaderecho "start download"wait 5sudo fastboot ...
随机推荐
- plsql快速入门
汉化plsql方法: 本来想直接使用英文版的,但是太多专业名词看不懂,只好先汉化熟悉一下先. 安装好plsq后,百度下载plsql汉化包 执行汉化包里面的安装程序,安装目标路径选择plsql的安装路径 ...
- vscode vue eslint 快捷键格式化代码
添加vetur , eslint插件 在工作区添加以下代码 "workbench.startupEditor": "welcomePage", &quo ...
- js检测字符串的字节数
在js中字符串可以存放数字,字母或者汉字,但是又一个问题就是,数字和字母都是占一个字节,而一个汉字占2个字节.如果在一个字符串中既有字母又有汉字怎么判断字节数呢 第一种简单粗暴 var str = ' ...
- 使用Jenkins 安装和自动化部署项目
安装 jenkins 安装方法可以使用war 安装 或者服务安装.我这里使用 rpm 安装 第一步: 我们使用的 centos ,选着这个,直接 下载传到服务器上.或者 复制下载链接 到 服务器上 ...
- python核心类库:urllib使用详解
python版本:2.7.15 1.简单用法urllib.urlopen() 语法:urllib.urlopen(url[, data[, proxies]]) :打开一个url的方法,返回一个文件对 ...
- angular2中如何引入scss
如何在ng2的模块或者组件中引入sass文件? 很简单,两个步骤 1.安装style-loader css加载器 npm install --save-dev style-loader 2.在ts文件 ...
- mysql官方测试 DB
https://dev.mysql.com/doc/employee/en/ http://blog.51cto.com/dnsliu/ http://blog.csdn.net/zengxuewen ...
- 根据数据库结构生成TreeView
procedure TUIOperate.FillTree(treeview: TTreeView); var findq: TADOQuery; node: TTreeNode; //这个方法是根据 ...
- Thinkphp 3.1. 3 ueditor 1.4.3 添加水印
1.引入Ueditor <!-- 实例化编辑器 --> <script type="text/javascript"> window.UEDITOR_HO ...
- 【巷子】---flux---【react】
一.什么是Flux Flux 是一种架构思想,专门解决软件的结构问题.它跟MVC 架构是同一类东西,但是更加简单和清晰. 二.flux的基本概念 (1) .Flux由4部分组成 1.View:视图层 ...