应用层从mtd获取mac等boot env
一.背景知识
烧录空片:指的是将bootloader或者其他固件写入到flash,一般在写入之前会格式化flash所有空间。
烧录image:将镜像文件写入到flash指定位置。两者区别空片对整个flash操作。
mac地址对于开发板或者一个设备来说,在网络通信上相当于他的身份证。所有如果对于不同的设备,不同的mac地址尤为重要。
设备第一次完成空片烧录后,会获取到boot env变量,并将这些env写入flash。
在uboot下输入printenv,可看见所有的boot env变量。
在uboot下也可通过增加变量,不建议直接在这修改mac地址,容易产生冲突,且修改成组播地址,会使网络用不了
//add/modify env
setenv xxx xxx
//save env
saveenv
在uboot下修改和增加的ethaddr会更新mtd的env变量,kernel下查看会和uboot保存一致
二.应用层从mtd获取env
最开打算是通过追溯代码,来获取uboot将env写入flash的什么位置,但是发现追溯过程比较曲折,建立哈希表啥的,放弃了追溯。
由于我使用的开发板将boot的env单独写入一个mtd存储.
在kernel下可通过cat /dev/mtd2来查看env。
所以我在应用层解决方案是直接读取mtd设备的数据,以此来获取想要的env变量。
由于此系统平台获取mtd的数据,通过00来分割各个变量,所以通过strstr获取变量名不可行。
提供一个demo,供参考
此外网络驱动也提供了api接口,通过访问api也可获取mac地址