鴻蒙HarmonyOS燒錄方法總結(jié)
51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)
https://harmonyos.51cto.com/#zz
1 . 燒錄工具
理解 HarmonyOS 驅(qū)動框架,用戶態(tài) APP 和內(nèi)核態(tài)驅(qū)動之間的通信機制。
HarmonyOS 燒錄使用的海思自研的燒錄工具 Hitool ,使用起來相對來說比較簡單。整體界面如圖:

2. 燒錄內(nèi)容
這些文件分別是: OHOS_ Image.bin 復制文件,rootfs.img 和userfs.img 多個文件。燒錄內(nèi)容主要分為兩部分,一部分是引導文件 fastboot 燒錄,另一部分為項目文件燒錄。
3. 燒錄方法
本文以 sample_test demo 為例講解燒錄方法,開發(fā)板類型是 Hi 3516DV300。
燒錄的第一步是打開 Hitool 工具,選擇對應的芯片類型。如果你的開發(fā)板使用的是 Hi 3518ev300 的,請選擇對應的芯片。
3.1 串口燒錄
3.1.1 fastboot 燒錄
Hiburn 請按照以下進行設(shè)置:
① 我手上用的開發(fā)板是 Hi3516DV300 的,它的外掛 flash 是spi nor 類型的,你們自己的設(shè)置請根據(jù)實際情況確定。
② 本示例所用的外接設(shè)備,計算機識別成 COM1 ,你們做開發(fā)時請設(shè)置成相應的端口號。
③ 燒錄方式選擇 fastboot 。

Uboot 所在目錄(如果 uboot 不能正常啟動,請從其他地方尋找相對老一點的版本 uboot):

點擊開始燒錄,開發(fā)板電源拔掉并重新接上。

燒寫成功后,打開終端,連接串口可以進入 hisilion 命令行。

3.1.2 應用文件燒錄
3.1.2.1 Hitool 設(shè)置:
首先軟件的設(shè)置如下圖所示,請參考圖例正確設(shè)置:

這里面比較重要的就是開始地址和文件長度的確定,這個部分的規(guī)則如下:
① Uboot的占用了 1M 的存儲空間,所以O(shè)HOS _Image 。bin 的開始地址是 1M ,
② 文件大小不足 1M 的取值1M ,有時是本示例中OHOS _Image.bin 的大小是 5 656kb , Hiburn 中它的長度設(shè)置為 6M 。所以rootfs。img 燒錄的起始地址是 1M + 6M = 7M 。
③ 其余情況,以此類推。
本示例中,各文件長度如下圖所示:
3.1.2.2 主軸
開始燒錄前,首先先擴展打印信息的串口鏈接,把串口騰出來給燒錄器使用。

3.1.2.3 開始燒錄
點擊 “燒寫”,并給開發(fā)板重新上電,燒錄就開始了。16M 的文件,用串口 1 1500bps 的燒寫速度,是需要花費一段時間的,所以系統(tǒng)-及應用文件的燒錄一般不建議使用串口。
燒錄過程截圖:

燒寫完成,耗時 2 8 分鐘。

3.2 網(wǎng)口燒錄
本示例網(wǎng)口燒錄,硬件設(shè)備使用的是 UGREEN 的usb 轉(zhuǎn)RJ45 網(wǎng)線接口,值得參考。
3.2.1 網(wǎng)口增加 IP 地址
首先為開發(fā)板互聯(lián)網(wǎng)口添加 IP 地址:1 92.168.1.3 ,增加方法如下:

控制面板中找到與單板連接的網(wǎng)卡,右鍵打開屬性。
選擇 Internet 協(xié)議版本4 (TCP / IPv4 )。
按圖配置 IP 地址和網(wǎng)關(guān)。
點擊 “ 確定” 完成配置保存。
3.2.2 單板 IP 配置
單板與 PC 間連接串口后,將單板電,自動進入U-boot ,按鍵盤“ 回車” 鍵可在命令窗口輸入命令,為單板配置192.168.1.10 的IP 地址,并指定192.168。 1.3 的服務(wù)器IP 地址,命令如下。
setenv serverip 192.168.1.3
setenv ipaddr 192.168.1.10
保存環(huán)境
配置完成后使用pri 命令確認查看配置結(jié)果,如下圖所示。

檢查網(wǎng)絡(luò):在 PC 端使用ping 命令確定單板與PC 的網(wǎng)絡(luò),命令為“ ping 192.168.1.3” 。

3.2.3 主軸
開始燒錄前,首先先擴展打印信息的串口鏈接,把串口騰出來給燒錄器使用。

3.2.4 配置 Hitool 并燒錄
Hitool 配置如下,請參考。

配置完成后,點擊燒錄。燒錄成功截圖 :

3.2.5 網(wǎng)口燒錄的命令分析
網(wǎng)口燒錄的命令刪除去中間的細節(jié)輸出,整理如下所示:
開始下載過程。
啟動成功啟動!
發(fā)送命令:getinfo版本
版本:U-Boot 2016.11
[EOT](確定)
發(fā)送命令:sf probe 0 / / 選擇spi flash 0
[EOT](確定)
發(fā)送命令:getinfo spi
塊:64KB芯片:16MB * 1
ID:0xC2 0x20 0x18
名稱:“ MX25L128XX”
[EOT](確定)
等待phy準備就緒,將需要8秒鐘。
發(fā)送命令:setenv serverip 192.168.1.3
[EOT](確定)
發(fā)送命令:setenv ethaddr 00:8c:55:07:b0:88
[EOT](確定)
發(fā)送命令:setenv ipaddr 192.168.1.10
[EOT](確定)
發(fā)送命令:setenv網(wǎng)絡(luò)掩碼255.255.255.0
[EOT](確定)
發(fā)送命令:setenv gatewayip 192.168.1.1
[EOT](確定)
Tftp服務(wù)器下載主頁切換到<\\ 10.175.126.15 \ zhuanjia \ zfdz \ camera0825 \ out \ ipcamera_hi3516dv300_liteos_a>
發(fā)送命令:mw.b 0x81000000 0xFF的0x590000 // 把內(nèi)存中從 0X 8100 開始的 0X 590000 個字節(jié)全部置 1
[EOT](確定)
發(fā)送命令:tftp 0x81000000 OHOS_Image.bin // 把OHOS_Image.bin 文檔加載到內(nèi)存中去,起始地址為 0x 81000000。
海思ETH網(wǎng)絡(luò)控制器
eth0:PHY狀態(tài)更改:LINK = UP:DUPLEX = FULL:SPEED = 100M
使用eth0設(shè)備
來自服務(wù)器192.168.1.3的TFTP; 我們的IP地址是192.168.1.10
文件名“ OHOS_Image.bin”。
加載地址:0x81000000
傳輸?shù)淖止?jié)數(shù)= 5791744(586000 hex)
[EOT](確定)
發(fā)送命令:crc32 81000000 586000
crc32 for 81000000 ... 81585fff ==> 78b90ed7
[EOT](確定)
發(fā)送命令:sf probe 0 / / 選擇spi flash 0
[EOT](確定)
發(fā)送命令:sf擦除0x100000 0x600000 // 把閃存存儲中從 0x 100000 開始的6M 字節(jié)的存儲空間清零。
發(fā)送命令:SF寫0x81000000的0x100000 0x590000 // 把內(nèi)存中從 0X 8100 開始的 0X 590000 字節(jié)的內(nèi)容復制到閃存中,閃存中存儲的起始地址是 0X 100000
設(shè)備0偏移量0x100000,大小為0x590000
發(fā)送命令:mw.b 0x81000000 0xFF的0x780000 // 把內(nèi)存中從 0X 8100 開始的0x780000 個字節(jié)全部置 1
[EOT](確定)
發(fā)送命令:tftp 0x81000000 rootfs.img // 加載rootfs.img 到內(nèi)存中去,存儲單位的起始地址是 0x81000000
海思ETH網(wǎng)絡(luò)控制器
eth0:PHY狀態(tài)更改:LINK = UP:DUPLEX = FULL:SPEED = 100M
使用eth0設(shè)備
來自服務(wù)器192.168.1.3的TFTP; 我們的IP地址是192.168.1.10
文件名“ rootfs.img”。
發(fā)送命令:crc32 81000000 772314
crc32為81000000 ... 81772313 ==> ba26d341
[EOT](確定)
發(fā)送命令:sf probe 0 // 選擇spi flash 0
[EOT](確定)
發(fā)送命令:sf擦除0x700000 0x800000 // 把閃存存儲中從 0x 700000 開始的8M 字節(jié)的存儲空間清零。
發(fā)送命令:SF寫0x81000000 0x700000 0x780000 // 把內(nèi)存中從 0X 8100 開始的0x780000 字節(jié)的內(nèi)容復制到閃存中,閃存中存儲的起始地址是0x700000
設(shè)備0偏移量0x700000,大小為0x780000
發(fā)送命令:mw.b 0x81000000 0xFF 0x10000 // 把內(nèi)存中從 0x 81000000 開始的0x10000 個字節(jié)全部置 1
[EOT](確定)
發(fā)送命令:tftp 0x81000000 userfs.img // 加載userfs.img 到內(nèi)存中去,存儲單位的起始地址是 0x81000000
海思ETH網(wǎng)絡(luò)控制器
eth0:PHY狀態(tài)更改:LINK = UP:DUPLEX = FULL:SPEED = 100M
使用eth0設(shè)備
來自服務(wù)器192.168.1.3的TFTP; 我們的IP地址是192.168.1.10
文件名“ userfs.img”。
加載地址:0x81000000
載入中:* ##
0字節(jié)/秒
做完了
傳輸?shù)淖止?jié)數(shù)= 3020(密件抄送十六進制)
[EOT](確定)
發(fā)送命令:crc32 81000000 bcc
crc32為81000000 ... 81000bcb ==> 0361fc92
[EOT](確定)
發(fā)送命令:sf probe 0 / / 選擇spi flash 0
[EOT](確定)
發(fā)送命令:sf擦除0xf00000 0x100000 // 把閃存存儲中從 0x F00000 開始的1M 字節(jié)的存儲空間清零。
發(fā)送命令:sf write 0x81000000 0xf00000 0x10000 // 把內(nèi)存中從 0x 81000000 開始的0x10000 字節(jié)的內(nèi)容復制到flash 中, flash 中存儲的起始地址是0xf00000
設(shè)備0偏移量0xf00000,大小為0x10000
以0xf10000進行寫入-100%完成。
SF:65536字節(jié)@ 0xf00000書面:OK
[EOT](確定)
分區(qū)成功燒毀!
發(fā)送命令:重置
重置成功!
分區(qū)燒毀完成!
串行通道已成功關(guān)閉。
3.3 USB 燒錄
硬件使用的雙母口 USB 線。
3.3.1 Hitool 工具配置

文件目錄中只要包含 OHOS_Image.bin,rootfs.img,userfs.img 三個文件即可,不限定位置。
燒寫方式一定要選擇 DDR 燒寫。
3.3.2 燒錄步驟:
3.3.2.1 燒錄 OHOS_Image.bin 文件
在串口終端中輸入以下命令,每條命令的具體含義請參考網(wǎng)口燒錄相關(guān)部分的描述:
mw.b 0x80000000 0xff 0x600000; // 0x600000 就是OHOS_Image.bin 所占的空間(取整)
usbtftp 0x80000000 OHOS_Image.bin;
sf探針0; sf擦除0x100000 0x600000; sf寫入0x80000000 0x100000 0x600000; / / 起始地址為 0X 100000
如果是 Hi3518ev300 的板子,請把命令中的 0x80000000 改成0x40000000 。

3.3.2.2 燒錄 rootfs 。img 文件
在串口終端中輸入以下命令,每條命令的具體含義請參考網(wǎng)口燒錄相關(guān)部分的描述:
mw.b 0x80000000 0xff 0x800000; // 0x800000 就是 rootfs .img 所占的空間(取整)
usbtftp 0x80000000 rootfs.img;
sf探針0; sf擦除0x700000 0x800000; sf寫入0x80000000 0x700000 0x800000; / / 起始地址為 0X 100000 + 0x600000 = 0X 7 00000
如果是 Hi3518ev300 的板子,請把命令中的 0x80000000 改成0x40000000 。

3.3.2.3 燒錄 userfs.img 文件
在串口終端中輸入以下命令,每條命令的具體含義請參考網(wǎng)口燒錄相關(guān)部分的描述:
mw.b 0x80000000 0xff 0x100000; // 0x100000 就是userfs.img 所占的空間(取整)
usbtftp 0x80000000 userfs.img;
sf探針0; sf擦除0xf00000 0x100000; sf寫入0x80000000 0xf00000 0x100000; / / 起始地址為 0X 100000 + 0x600000 + 的0x800000 = 0xf00000
如果是 Hi3518ev300 的板子,請把命令中的 0x80000000 改成0x40000000 。

3.3.2.4 燒錄過程中控制臺信息:

4. 開源板 emmc 燒錄
燒錄的時候,選擇 eMMC 方式。我們這里選擇通過網(wǎng)口燒錄 eMMC ,網(wǎng)口的配置參考上文。

燒錄完成之后, uboot 的啟動命令還有所不同,在 eMMC 中,存儲以 5 12B 為單位的,如果我們的文件(通常是 OHOS _Image.bin )大小為 6M (1 0 位數(shù)),我們需要把它轉(zhuǎn)換成 1 6 二進制,具體轉(zhuǎn)換的公式如下:
1 0 二進制中文件總大小: 6 * 1024 * 1024 字節(jié)= 6291456Byte ,那么總共是多少個 5 12KB 的塊呢?我們用 6 291456/512 = 12288 個塊(十進制),再把十進制中的 1 2288 塊個轉(zhuǎn)換分類中翻譯 1 6 進制,得 0X 3000 。那么也就是說一共有 0x3000處個5 12Byte 的塊。
“; setenv bootcmd” SF探針0; MMC讀取0x0 0x80000000 0x800 0x3000;“;
setenv bootargs“控制臺= ttyAMA0,115200n8 root = emmc fstype = vfat rootaddr = 7M rootsize = 15M rw”; saveenv;
5. 不同燒錄方法之間的比較
Usb 燒錄方式和網(wǎng)口燒錄方式想象,不同之處比較如下:

網(wǎng)口燒錄和 USB 燒錄的速度基本是相同的,大約在串口燒錄就太慢了,所以正常情況下不推薦串口燒錄。
綜上比較,只從效率的角度看,燒錄器的選擇優(yōu)先級為:
網(wǎng)口燒錄 > USB 燒錄 > 串口燒錄
6. 其他問題
我們現(xiàn)在用的開發(fā)板 Flash 只有 1 6M ,如果程序過大,則無法進行燒錄。所以做項目的時候,外掛的 flash 會大一些,留有足夠的預備空間。
課程鏈接:HarmonyOS南向驅(qū)動調(diào)試(gpio以及wifi)及燒錄方法總結(jié)
51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)
https://harmonyos.51cto.com/#zz