NVRAM读写方法

11人阅读 评论(0) 收藏 举报
分类:

0.前言:有的时候业务需要读写NVRAM里面的数据,比如读MAC地址或者自定义NVRAM节点然后读写操作其节点值(NVRAM里面的值恢复出厂设置后还存在)

1.实际在需要读写nvram的地方导入NVRAMUtils.java和NvRAMAgent.java文件(注意文件的包名与添加的路径要一致),然后用

NVRAMUtils.readNvRAMFile(NVRAM的路径名)和 writeNvRAMFile就可以进行读写操作了,且读写的是byte数组,实际可能需要再转换为string类型的数据

2.实际调试可以通过adb shell然后cd到具体的节点路径,然后通过cat和echo读写里面的值,然后也可以pull出那个文件通过相关的软件查看里面的值(实际保存的为byte类型,文件查看到的为16进制数据)

========================

NVRAMUtils.java

import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;
import android.os.ServiceManager;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public static byte[] readNvRAMFile(String filename) {
IBinder binder = ServiceManager.getService("NvRAMAgent");
        NvRAMAgent agent = NvRAMAgent.Stub.asInterface(binder);
byte[] buff = null;
        try {
            buff = agent.readFileByName(filename);
return buff;
        } catch (Exception e) {
                e.printStackTrace();
        }
return null;
    }
public static void writeNvRAMFile(String filename,byte[] buff) {
IBinder binder = ServiceManager.getService("NvRAMAgent");
        NvRAMAgent agent = NvRAMAgent.Stub.asInterface(binder);
        try {
            agent.writeFileByName(filename,buff);
Log.i("xiaozheng", "ready backupToBinRegionAll");
agent.backupToBinRegionAll();
        } catch (Exception e) {
Log.i("xiaozheng", "writeNvRAMFile e="+e);
            e.printStackTrace();
        }
    }

=======================

NvRAMAgent.java

import android.os.IBinder;

public interface NvRAMAgent extends android.os.IInterface
{
    /** Local-side IPC implementation stub class. */
    public static abstract class Stub extends android.os.Binder implements NvRAMAgent {
        private static final java.lang.String DESCRIPTOR = "NvRAMAgent";
        /** Construct the stub at attach it to the interface. */
        public Stub() {
            this.attachInterface(this, DESCRIPTOR);
        }
        /**
         * Cast an IBinder object into an NvRAMAgent interface,
         * generating a proxy if needed.
         * @param obj represents IBinder class.
         * @return the object of NvRAMAgent.
         */
        public static NvRAMAgent asInterface(android.os.IBinder obj) {
            if ((obj == null)) {
                return null;
            }


            android.os.IInterface iin = (android.os.IInterface)
                                    obj.queryLocalInterface(DESCRIPTOR);


            if (((iin != null) && (iin instanceof NvRAMAgent))) {
                return ((NvRAMAgent) iin);
            }


            return new NvRAMAgent.Stub.Proxy(obj);
        }


        public android.os.IBinder asBinder() {
            return this;
        }


        public boolean onTransact(int code, android.os.Parcel data,
                    android.os.Parcel reply, int flags) throws android.os.RemoteException {
            switch (code) {
                case INTERFACE_TRANSACTION: {
                reply.writeString(DESCRIPTOR);
                return true;
            }
                case TRANSACTION_READFILE: {
                data.enforceInterface(DESCRIPTOR);
                int _arg0;
                _arg0 = data.readInt();
                byte[] _result = this.readFile(_arg0);
                reply.writeNoException();
                reply.writeByteArray(_result);
                return true;
            }
                case TRANSACTION_WRITEFILE: {
                data.enforceInterface(DESCRIPTOR);
                int _arg0;
                _arg0 = data.readInt();
                byte[] _arg1;
                _arg1 = data.createByteArray();
                int _result = this.writeFile(_arg0, _arg1);
                reply.writeNoException();
                reply.writeInt(_result);
                return true;
            }
case TRANSACTION_backupToBinRegionAll:{
data.enforceInterface(DESCRIPTOR);
int _result = this.backupToBinRegionAll();
reply.writeNoException();
reply.writeInt(_result);
return true;
}
                default: {
                break;
            }
            }


            return super.onTransact(code, data, reply, flags);
        }
        private static class Proxy implements NvRAMAgent
        {
            private android.os.IBinder mRemote;
            Proxy(android.os.IBinder remote)
            {
                mRemote = remote;
            }
            public android.os.IBinder asBinder()
            {
                return mRemote;
            }
            public java.lang.String getInterfaceDescriptor()
            {
                return DESCRIPTOR;
            }
            public byte[] readFile(int file_lid) throws android.os.RemoteException
            {
                android.os.Parcel _data = android.os.Parcel.obtain();
                android.os.Parcel _reply = android.os.Parcel.obtain();
                byte[] _result;


                try {
                    _data.writeInterfaceToken(DESCRIPTOR);
                    _data.writeInt(file_lid);
                    mRemote.transact(Stub.TRANSACTION_READFILE, _data, _reply, 0);
                    _reply.readException();
                    _result = _reply.createByteArray();
                }
                finally {
                    _reply.recycle();
                    _data.recycle();
                }


                return _result;
            }
            public int writeFile(int file_lid, byte[] buff) throws android.os.RemoteException
            {
                android.os.Parcel _data = android.os.Parcel.obtain();
                android.os.Parcel _reply = android.os.Parcel.obtain();
                int _result;


                try {
                    _data.writeInterfaceToken(DESCRIPTOR);
                    _data.writeInt(file_lid);
                    _data.writeByteArray(buff);
                    mRemote.transact(Stub.TRANSACTION_WRITEFILE, _data, _reply, 0);
                    _reply.readException();
                    _result = _reply.readInt();
                }
                finally {
                    _reply.recycle();
                    _data.recycle();
                }


                return _result;
            }


            public byte[] readFileByName(String filename) throws android.os.RemoteException
            {
                android.os.Parcel _data = android.os.Parcel.obtain();
                android.os.Parcel _reply = android.os.Parcel.obtain();
                byte[] _result;


                try {
                    _data.writeInterfaceToken(DESCRIPTOR);
                    _data.writeString(filename);
                    mRemote.transact(Stub.TRANSACTION_READFILEBYNAME, _data, _reply, 0);
                    _reply.readException();
                    _result = _reply.createByteArray();
                }
                finally {
                    _reply.recycle();
                    _data.recycle();
                }


                return _result;
            }


            public int writeFileByName(String filename, byte[] buff)
                throws android.os.RemoteException {
                android.os.Parcel _data = android.os.Parcel.obtain();
                android.os.Parcel _reply = android.os.Parcel.obtain();
                int _result;


                try {
                    _data.writeInterfaceToken(DESCRIPTOR);
                    _data.writeString(filename);
                    _data.writeByteArray(buff);
                    mRemote.transact(Stub.TRANSACTION_WRITEFILEBYNAME, _data, _reply, 0);
                    _reply.readException();
                    _result = _reply.readInt();
                }
                finally {
                    _reply.recycle();
                    _data.recycle();
                }


                return _result;
            }
public int backupToBinRegionAll()
throws android.os.RemoteException {
android.os.Parcel _data = android.os.Parcel.obtain();
android.os.Parcel _reply = android.os.Parcel.obtain();
int _result;
try {
_data.writeInterfaceToken(DESCRIPTOR);
mRemote.transact(Stub.TRANSACTION_backupToBinRegionAll, _data, _reply,
0);
_reply.readException();
_result = _reply.readInt();
} finally {
_reply.recycle();
_data.recycle();
}
return _result;
}
        }


        static final int TRANSACTION_READFILE = (IBinder.FIRST_CALL_TRANSACTION + 0);
        static final int TRANSACTION_WRITEFILE = (IBinder.FIRST_CALL_TRANSACTION + 1);
        static final int TRANSACTION_READFILEBYNAME = (IBinder.FIRST_CALL_TRANSACTION + 2);
        static final int TRANSACTION_WRITEFILEBYNAME = (IBinder.FIRST_CALL_TRANSACTION + 3);
static final int TRANSACTION_backupToBinRegionAll = (IBinder.FIRST_CALL_TRANSACTION + 4);
    }
    public byte[] readFile(int file_lid) throws android.os.RemoteException;
    public int writeFile(int file_lid, byte[] buff) throws android.os.RemoteException;
    public byte[] readFileByName(String filepath) throws android.os.RemoteException;
    public int writeFileByName(String filepath, byte[] buff) throws android.os.RemoteException;
public int backupToBinRegionAll() throws android.os.RemoteException;

}



查看评论

连续调用ReadRecord读取NVRAM的数据出错的原因

在MMI task中连续调用ReadRecord,在ReadRecord函数中会先发送消息MSG_ID_MMI_EQ_NVRAM_READ_REQ到L4C,然后进入while(1) loop等待L4C...
  • sergeycao
  • sergeycao
  • 2012-11-02 09:30:36
  • 6508

Android下NVRAM读写例程

  • 2015年12月21日 16:25
  • 1.39MB
  • 下载

【NvRAM】apk中中读写nvram

nvram中LID对应的结构体如: typedef struct {       int uid; } NVRAM_AMOI_TEST_STRUCT;   demo code:    //将int型...
  • andylao62
  • andylao62
  • 2014-02-19 20:07:44
  • 4326

mtk 中 nvram 的读写操作

定义NVRAM 数据有三种方式: (一)、在nvram_editor_data_item.h、nvram_data_item.h、nvram_data_item.c三个文件中添加。 1、在nvram_...
  • Epll_apple
  • Epll_apple
  • 2010-04-02 10:17:00
  • 4313

mtk中NVRAM的读写方法

  • 2010年02月26日 20:26
  • 30KB
  • 下载

MTK 中的NVRAM读写操作指南

Nvram操作说明Nvram性质和文件一样,不过,对它进行读写数据,在手机格式化后还存在。1, 在Nvram_user_defs.h的 nvram_lid_cust_enum中添加自定义的lid名称可...
  • nie_feilong
  • nie_feilong
  • 2010-05-07 01:00:00
  • 5444

【NvRAM】Native层读写nvram

写nvram的流程:       1,NVM_GetFileDesc(file_lid, &rec_size, &rec_num,true);//读打开       2,read       3,NV...
  • andylao62
  • andylao62
  • 2014-02-19 20:05:55
  • 2854

Flashtec NVRAM加速卡以次微秒级延迟实现一千五百万次 IOPS

PMC新近为超大规模数据中心的运营者及企业级存储供应商提供了一款崭新的产品,助其打造更为前卫的存储基础设施。PMC公司成立于三十年前,作为一家广受业界认可的半导体公司,过去专营通信领域的设备,于七年前...
  • u014602076
  • u014602076
  • 2014-08-22 13:31:45
  • 1720

MTK————nvram读写方法

  • 2009年09月27日 13:19
  • 22KB
  • 下载

如何重置 Mac 上的 NVRAM

了解有关电脑的 NVRAM 的信息以及何时及如何重置 NVRAM。 什么是 NVRAM? NVRAM 是一小部分电脑内存,全称“非易失的随机访问存储器”,用于将某些设置存储...
  • bluewindaa
  • bluewindaa
  • 2015-10-20 19:36:09
  • 908
    个人资料
    等级:
    访问量: 2259
    积分: 249
    排名: 32万+
    文章存档