android nvram读写,MTK Android平台Nvram与Gensor数据获取

本文详细介绍了在MTK Android设备中,如何获取和更新WiFi MAC地址,以及如何读取和分析NVRAM中的数据。通过分析源码,揭示了MAC地址的生成逻辑和NVRAM文件的结构。同时,文章还探讨了Gsensor数据的存储和校准流程,提供了一个简单的校准程序示例。
摘要由CSDN通过智能技术生成

微信公众号:morixinguan

关注可了解更多的教程。问题或建议,请公众号留言;

如果你觉得本文对你有帮助,欢迎赞赏

f8413b95ea049acd5525bcc5daada119.png

▲长按图片保存可分享至朋友圈

在MTK的机器中,如果不用特定的工具烧写MAC地址,在开机后打开WIFI后会显示: “NVRAM WARNING: Err=0x10” 这就是没有烧写mac地址的原因,所以每次打开wifi,wifi的MAC地址都是一个随机产生的值,为什么会这样?

答案在:

ndor/mediatek/proprietary/packages/apps/CdsInfo/src/com/mediatek/connnectivity/CdsWifiInfoActivity.java

源码描述如下:

public class CdsWifiInfoActivity extends Activity{ private static final StringTAG= "CDSINFO/WifiInfo"; private static final int MAC_ADDRESS_ID= 30; private static final int MAC_ADDRESS_DIGITS= 6; private static final int MAX_ADDRESS_VALUE= 0xff; private static final int INVALID_RSSI=-200; //定义了MAC地址存储的文件的绝对路径 private static final StringMAC_ADDRESS_FILENAME= "/data/nvram/APCFG/APRDEB/WIFI"; private static final String[]WIFI_SYSTEM_PROPERTY= new String[]{ "net.hostname", "dhcp.wlan0.ipaddress", "net.dns1", "net.dns2", 。。。。

以下是获取mac地址的方法:

//获取mac地址的方法 private void getMacAddr(){ try { tService("NvRAMAgent"); MAgent.Stub.asInterface(binder); new short[MAC_ADDRESS_DIGITS]; if (mUserMode){ l.setVisibility(View.GONE); AddrEdit.setVisibility(View.GONE); etVisibility(View.GONE); else { new StringBuilder(); new Random(); atter= new DecimalFormat("00"); int end1=rand.nextInt(100); int end2=rand.nextInt(100); ringnum2=formatter.format(end2); //这几位是固定的值 "00:08:22:11:"); ":").append(num2); drLabel.setVisibility(View.VISIBLE); out.println("stringbuffer:" +sb); dom=sb.toString(); catch (Exceptione){

更新mac地址的方法:

//更新mac地址 private void updateMacAddr(){ try { int i= 0; r.getService("NvRAMAgent"); ; //parsemacaddressfirstly okenizertxtBuffer= new StringTokenizer(mMacAddrEdit.getText().toString(), ":"); while (txtBuffer.hasMoreTokens()){ (short)Integer.parseInt(txtBuffer.nextToken(), 16); out.println(i+ ":" +mRandomMacAddr[i]); if (i!= 6){ "Theformatofmacaddressisnotcorrect"); return; byte[]buff= null; try { eadFileByName(MAC_ADDRESS_FILENAME); catch (Exceptione){ ); //随机产生的buff[i+4]开始就是mac地址存储的位置 for (i= 0;i34 buff[i+ 4]=(byte)mRandomMacAddr[i]; int flag= 0; try { catch (Exceptione){ intStackTrace(); if (flag> 0){ "Updatesuccessfully.rnPleaserebootthisdevice"); else { ext("Updatefailed"); catch (Exceptione){ ":" +e.getCause());

从这个代码中可以分析得知,此时的Wifi MAC地址除了前面几位是固定值,而后面都是随机产生的。 但只有一个文件才是正确的WIFI MAC地址保存的值。如果没有烧写WIFI MAC地址,那么这个文件的第4到第9个字节是固定为0的,只有烧写了MAC地址,这6个字节才是有数据的。 通过代码分析,得知烧写mac地址后的文件是保存在: /data/nvram/APCFG/APRDEB/WIFI 这个文件中。

通过adb pull /data/nvram/APCFG/APRDEB/WI

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值