MTK NVRam添加Lid,以及读、写、备份
来源:互联网 发布:北大青鸟软件开发 编辑:程序博客网 时间:2024/05/21 17:18
具体流程分为三步
1、添加一个新的Lid,用来保存数据
2、在userspace进行读写备份操作
3、往上提供接口
1.添加Lid,MTK有相关文档直接按照说明操作即可,不同的版本可能有些区别
这边我使用的MT8163,android6.0的版本,贴出一个diff文件供大家参考
Diff文件链接NvRam.diff
2.操作NVram,主要需要两个so库。libnvram libfile_op,代码如下可供参考
Android.mk
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_SRC_FILES := backnvram.cppLOCAL_C_INCLUDES := $(MTK_PATH_SOURCE)/external/nvram/libnvram $(MTK_PATH_SOURCE)/kernel/include/ $(MTK_PATH_SOURCE)/external/nvram/libfile_op $(MTK_PATH_CUSTOM)/cgen/inc $(MTK_PATH_CUSTOM)/cgen/cfgfileinc $(MTK_PATH_CUSTOM)/cgen/cfgdefaultLOCAL_SHARED_LIBRARIES := libnvram libfile_op libutils liblog#LOCAL_STATIC_LIBRARIES := LOCAL_MODULE := nvramtestLOCAL_ALLOW_UNDEFINED_SYMBOLS := trueLOCAL_MODULE_TAGS := optional#LOCAL_PRELINK_MODULE := false#LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES)LOCAL_UNSTRIPPED_PATH := $(TARGET_ROOT_OUT_SBIN_UNSTRIPPED)include $(BUILD_EXECUTABLE)
NVRamTest.cpp
#include "libnvram.h"#include "libfile_op.h"#include <fcntl.h>#include <stdio.h>#include <string.h>#include "Custom_NvRam_LID.h"char buf[491520] = {0};int test_read(){ int rec_size=0 , rec_num = 0 , result; float buf[20] = {0}; F_ID f_id = NVM_GetFileDesc(AP_CFG_CUSTOM_FILE_CUSTOM1_LID, &rec_size, &rec_num,1); result = read(f_id.iFileDesc,&buf,rec_num*rec_size); printf("read-result:%d\n" , result); printf("read:%s\n" ,buf); for(int i ; i < 9 ; i++) printf("%f\n" , buf[i]); NVM_CloseFileDesc(f_id); printf("-----------------%d-------------------size:%d*%d=%d\n",AP_CFG_CUSTOM_FILE_CUSTOM1_LID, rec_size ,rec_num ,rec_num*rec_size); return 0;} int test_write(){ int rec_size=0 , rec_num = 0 , result; char buf[400]; F_ID f_id = NVM_GetFileDesc(AP_CFG_CUSTOM_FILE_CUSTOM1_LID, &rec_size, &rec_num,0); memset(buf , 'Z' , sizeof(buf)); buf[AP_CFG_CUSTOM_FILE_CUSTOM1_LID-1] = '\n'; result = write(f_id.iFileDesc,&buf,rec_num*rec_size); printf("write:%d\n" ,result); NVM_CloseFileDesc(f_id); int ret = FileOp_BackupToBinRegion_All(); printf("FileOp_BackupToBinRegion_All return%d\n", ret); printf("-----------------%d-------------------size:%d*%d=%d\n",AP_CFG_CUSTOM_FILE_CUSTOM1_LID, rec_size ,rec_num ,rec_num*rec_size); return 0;}int main(int argc, const char** argv){ printf("AP_CFG_CUSTOM_FILE_CUSTOM1_LID=%d\n" , AP_CFG_CUSTOM_FILE_CUSTOM1_LID); test_write(); test_read();}
3.第三步,一般我们添加Nvram的接口主要给java层调用,一般通过JNI接口,但是使用jNI调用会出现失败。这是因为android的SELinux权限机制,可以添加一个daemon放到init.rc中(放到init.rc也需要给SELinux权限),通过socket和java通信。这部分以后有时间再试咯。
阅读全文
0 0
- MTK NVRam添加Lid,以及读、写、备份
- mt2503[CB]MODEM里与CB有关的NVRAM,以及每个NVRAM LID的作用是什么
- meta nvram mtk
- mtk NVRAM研究系列
- MTK NVRAM学习
- MTK之NVRAM研究
- MTK NVRAM 总结
- mtk NVRAM研究系列
- Mtk Android 之NvRAM customer
- Mtk Android 之NvRAM customer
- Mtk Android 之NvRAM customer
- Mtk Android 之NvRAM customer
- mtk 中 nvram 的读写操作
- mtk 中 nvram 的读写操作
- MTK 中的NVRAM读写操作指南
- mtk 中 nvram 的读写操作
- MTK 中的NVRAM读写操作指南
- MTK 中的NVRAM读写操作指南
- ie7下z-index失效问题解决方法(详细分析)
- Excel COUNTIF函数解决列包含判断问题
- ffmpeg解码数据保存为yuv格式
- Union, Union All, Intersect, Minus 摘记
- 关于swift迁移
- MTK NVRam添加Lid,以及读、写、备份
- Opencv+Kdtree在C++和Python下的使用
- Vue 折腾记
- angularJS 中html 标签绑定样式,ng-class的使用
- QT与菜鸟的opengl贴图
- (HDU
- Vue组件通信
- android面试题(2)——Fragment篇
- 获取UWP配置文件中的版本信息