1、背景
(1)在openharmony的I2S例子中,有播放特定地址的音频文件的代码,但是没有说明HiBurn怎么操作来向特定的地址烧录内容。查了一些资料,也没有头绪。
(2)因为业务的需要,也需要在特定的地址存放大量数据。如果使用HiBurn烧录,也比繁琐。
所以,为了更加方便打包程序和烧录固件,想做一个小工具来解决这个问题。不知道是不是重复造轮子。
2、规划
想要在固件中存放数据,目前看有几种方法:
(1)在程序编译的之前添加上。比如在代码中创建一个大的数组等。但是据说在openharmony这么做有bug,会导致莫名其妙的运行问题。于是放弃,没有尝试。
(2)在程序编译数据后,打包数据之前,添加数据。浏览了一下python的源代码,基本的流程了解,但是没敢这么做,担心因为自己的理解不到位,修改错误出bug,导致生成的原生allinone固件都有问题。另外资料有限,自己的能力也有限,不知道工作量有多大。所以,放弃该方案。
(3)在生成的最终固件(allinone)中添加需要的文件,该方案可以保证不影响allinone固件。该方案应该是比较笨的方案,但是是最稳妥的方案。确定了方案之后,开始造轮子。
3、思路
首选,我们需要温习一下之前整理的allinone.bin固件格式。原文如下:
https://ost.51cto.com/posts/10816。
基本的方案为:
(1)解析bin文件,将数据拆分成数据头,以及三个文件(Hi3861_loader_signed.bin、Hi3861_wifiiot_app_burn.bin、Hi3861_boot_signed_B.bin)。
(2)在第二个文件(Hi3861_wifiiot_app_burn.bin)的后面特定地址(程序配置界面设定的开始地址)添加需要烧录的文件数据。
(3)按照规则合成文件。修改数据长度,CRC等信息。
4、成果
代码通过VS编写,运行需要.net4.7的库。
(1)打开按键,为选择allinone的固件。
(2)参数配置,为选择需要写入的开始地址和结束地址。超出地址范围报错。
(3)添加文件,此处可以添加需要烧录的文件。如音频文件等。
(4)执行生成,执行完成之后,会根据设定的文件名进行存储,跟allinone同目录。
5、总结
不知道该工具,是否会有小伙伴需要。