[从0到1搭嵌入式工程]设备信息和配置信息的保存

    对于一个嵌入式的工程, 设备信息是指出厂时固化在设备上的信息,类似手机的IMEI,会有DID等可以认证的信息,特点是,在出厂时只写入一次到flash中,永远不丢(升级不丢、重置不丢)。 配置信息是指用户通过某一种方式,可以对设备进行配置, 比如配置wifi, 设置开关等, 这些信息掉电不能丢失,要保存在flash上, 用户升级固件以后,也能正常使用,只有在用户重置设备以后,配置信息才恢复为默认值。

    这两个信息,都是在flash的分区中实现的。在linux kernel中,配置两个分区的起始地址和大小,一个是设备信息分区a, 一个是用户配置信息分区b, 这两个分区都不会被打包进升级固件中, 所以在固件升级时,不会覆盖flash上这两个分区所在的空间,也就能实现升级不丢失

    设备信息在出厂的时候由固件的写入工具,把信息以某一种结构或者文本形式写入到这个分区,或者挂载该分区后,写入到分区下的文件中。如果不想挂载,可直接把数据写入分区, 在出厂以后,使用mmap把分区映射到内存中直接使用里面的值;如果挂载,可以用文件的形式写和读。

    为了安全,可以在第一位放置一个magic num, 读出来以后如果魔术数不对,认为是错误的信息,可以从另外一个备份的文件中读取或者放弃。 这样,在设备启动之后,设备的id信息就会被读取到内存的一个全局变量中去, 供应用程序使用。

    用户配置信息在出厂时候不需要用固件工具写入分区, 默认值写在固件代码里,如果在读取时没有这个文件,或者文件的magic num不对时,直接用默认值作为用户配置信息。

    当用户设置一个开关时, 就写入这个文件一次,当用户重置设备时,删除这个文件,重启读取时,就会按照默认值的来, 适当时重建文件并写入文件。

猜你喜欢

转载自blog.csdn.net/bingyu880101/article/details/80083104