Hi3861在特定地址燒錄音頻文件工具
??想了解更多內(nèi)容,請(qǐng)?jiān)L問:??
??51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)??
1、背景
(1)在openharmony的I2S例子中,有播放特定地址的音頻文件的代碼,但是沒有說明HiBurn怎么操作來向特定的地址燒錄內(nèi)容。查了一些資料,也沒有頭緒。
(2)因?yàn)闃I(yè)務(wù)的需要,也需要在特定的地址存放大量數(shù)據(jù)。如果使用HiBurn燒錄,也比繁瑣。
所以,為了更加方便打包程序和燒錄固件,想做一個(gè)小工具來解決這個(gè)問題。不知道是不是重復(fù)造輪子。
2、規(guī)劃
想要在固件中存放數(shù)據(jù),目前看有幾種方法:
(1)在程序編譯的之前添加上。比如在代碼中創(chuàng)建一個(gè)大的數(shù)組等。但是據(jù)說在openharmony這么做有bug,會(huì)導(dǎo)致莫名其妙的運(yùn)行問題。于是放棄,沒有嘗試。
(2)在程序編譯數(shù)據(jù)后,打包數(shù)據(jù)之前,添加數(shù)據(jù)。瀏覽了一下python的源代碼,基本的流程了解,但是沒敢這么做,擔(dān)心因?yàn)樽约旱睦斫獠坏轿?,修改錯(cuò)誤出bug,導(dǎo)致生成的原生allinone固件都有問題。另外資料有限,自己的能力也有限,不知道工作量有多大。所以,放棄該方案。
(3)在生成的最終固件(allinone)中添加需要的文件,該方案可以保證不影響allinone固件。該方案應(yīng)該是比較笨的方案,但是是最穩(wěn)妥的方案。確定了方案之后,開始造輪子。
3、思路
首選,我們需要溫習(xí)一下之前整理的allinone.bin固件格式。原文如下:
https://ost.51cto.com/posts/10816。
基本的方案為:
(1)解析bin文件,將數(shù)據(jù)拆分成數(shù)據(jù)頭,以及三個(gè)文件(Hi3861_loader_signed.bin、Hi3861_wifiiot_app_burn.bin、Hi3861_boot_signed_B.bin)。
(2)在第二個(gè)文件(Hi3861_wifiiot_app_burn.bin)的后面特定地址(程序配置界面設(shè)定的開始地址)添加需要燒錄的文件數(shù)據(jù)。
(3)按照規(guī)則合成文件。修改數(shù)據(jù)長度,CRC等信息。
4、成果
代碼通過VS編寫,運(yùn)行需要.net4.7的庫。
(1)打開按鍵,為選擇allinone的固件。
(2)參數(shù)配置,為選擇需要寫入的開始地址和結(jié)束地址。超出地址范圍報(bào)錯(cuò)。
(3)添加文件,此處可以添加需要燒錄的文件。如音頻文件等。
(4)執(zhí)行生成,執(zhí)行完成之后,會(huì)根據(jù)設(shè)定的文件名進(jìn)行存儲(chǔ),跟allinone同目錄。
5、總結(jié)
不知道該工具,是否會(huì)有小伙伴需要。
??想了解更多內(nèi)容,請(qǐng)?jiān)L問:??
??51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)??