海思Hiproinfo工具给自己的板子写mac地址(标记独立板子所用) |
您所在的位置:网站首页 › 海思芯片hi3798烧写文件 › 海思Hiproinfo工具给自己的板子写mac地址(标记独立板子所用) |
发下牢骚,海思的资料真是乱的可以。没有瑞芯微这么亲民,下边转入正题: 需求:要能给板子flash写入唯一MAC地址且能在安卓系统运行的时候读出来; 平台:cpu hi3798mv200;eMMC(作者用的是emmc) 实现原理:用Hiproinfo工具往deviceinfo区域写入私人订制的mac地址,比如11:22:33:44:55:66,然后在安卓系统中跑service读取出来另作它用; 实现步骤如下: 1.SDK里取出配置Hiproinfo工具(路径device/hisilicon/bigfish/sdk/tools/windows/HiProInfo/HiProInfo_en)放到windows环境去,注意这里最好用_en版本,不要_cn版本,本人吃过用不了的亏; 2.修改HiProInfo_en里的BurnConfig.ini文件,把“ProgrammerFileName = advca_programmer.bin”挡掉,不影响后边使用。另外“MacBurnAddress=0x1600000” 不要改动,不要自做聪明按照提示改成MacBurnAddress=0xc00000(其实这里SDK已经修改好了,只是 提示没修改,因为deviceinfo的起始地址是0x1600000!!!); 3.这时你的HiProInfo已经可以写MAC地址了,如图所示 4.板子接好串口,Hiproinfo工具按下“确定”按钮后,板子重新上电,烧写完成;具体步骤参考文档海思hi3798mv200之《量产烧写 使用指南》 5.在此顺便解释一下个人对Hiproinfo工具的理解,该工具应该是起动板子的fastboot,并且在fastboot阶段通过boot的命令把MAC地址写入0x1000000内存位置,把该位置的1个block(512字节)写入flash deviceinfo 起始地址0x16000000处;
下边是烧写完成后,Hiproinfo的log。 。。。略 Boot Env on eMMC Env Offset: 0x00100000 Env Size: 0x00010000 Env Range: 0x00010000 start download process. //写入11:22:33:44:55:66 (OK) 'mw.b 0x1000000 0xff 0x200' 命令返回成功! ====》往内存0x1000000处以字节为单位写入0x200 个0xff (OK) 'mw.l 0x1000000 0x323a3131 1' 命令返回成功! ====》往内存0x1000000处以4个字节为单位 写入"11:2" (OK) 'mw.l 0x1000004 0x33333a32 1' 命令返回成功! ====》往内存0x1000004处以4个字节为单位 写入"2:33" (OK) 'mw.l 0x1000008 0x3a34343a 1' 命令返回成功! ====》往内存0x1000000处以4个字节为单位 写入":44:" (OK) 'mw.l 0x100000c 0x363a3535 1' 命令返回成功! ====》往内存0x1000000处以4个字节为单位 写入"55:6" (OK) 'mw.l 0x1000010 0x4d000036 1' 命令返回成功! ====》往内存0x1000000处以4个字节为单位 写入"6" (OK) 。。。。中间略过 'mw.l 0x100003c 0x3d5748 1' 命令返回成功! MMC write: dev # 0, block # 4 5056, count 1 ... 1 blocks written: OK (OK) 'mmc write 0 0x1000000 0xb000 1' 命令返回成功! ====》把内存地址0x1000000 长度为1*512大小的内容拷到第0个block偏移0xb000位置(具体我没搞懂,但实际位置应该是deviceinfo的起始地址0x16000000) 烧写成功! 6.安卓中读取MAC地址 使用java反射获取getDeviceinfo方法代码如下,具体反射如何使用参考巨人们的链接: private void getBoxMacInfo(){ Class aClass = null; try { aClass = Class.forName("com.hisilicon.android.hisysmanager.HiSysManager"); //获取到getDeviceinfo的类 } catch (ClassNotFoundException e) { e.printStackTrace(); Log.e(TAG, "getBoxMacInfo: error!"); } Log.d(TAG, "getBoxMacInfo: getNAME" + aClass.getSimpleName()); //获取到getDeviceinfo的类的名字 // Method[] methods = aClass.getMethods(); // for(Method method: methods){ // Log.d(TAG, "getBoxMacInfo: " + method.getName()); // } Method mt = null; try { mt = aClass.getMethod("getDeviceinfo", int.class, int.class); } catch (NoSuchMethodException e) { e.printStackTrace(); Log.e(TAG, "getBoxMacInfo: getMethod error"); } try { Log.d(TAG, "getBoxMacInfo: " + mt.invoke(aClass.newInstance(), 0, 512));//调用getDeviceinfo方法,打印MAC地址,即11:22:33:44:55:66 ,注意此处地址0是offset,512是长度 } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } }
反射方法的使用参考: 1.Android Studio导入framework.jar等系统jar包方式https://blog.csdn.net/zhuzp_blog/article/details/51674468?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control 但是里边要改正一下,不是compile files('libs/framwork.jar'),而是implementation files('libs/framework.jar') 补充: Android framework编译出来的framework.jar和classes.jar的位置 为了能在android studio里使用framework层隐藏的接口,需要自己编译下framework的源码,得到framework.jar和classes.jar。具体路径如下: 如果编译debug版本: src/out/target/product/projectXX/system/framewor framework.jar 如果是user版本: src/out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar 把classes.jar拷贝成framework.jar就可以了,。
另:class.forName( )方法中一定要填写完整类名(即包名+类名),即便该类与调用forName方法的类在同一包下,也需填写完整类名! 2.https://www.cnblogs.com/liweixml/p/11462813.html 3.https://blog.csdn.net/qq_39301804/article/details/78784887?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&dist_request_id=12fd439f-e54b-48a1-b05c-55c600e04879&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control 下图为系统中带hide的方法 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |