电子产业一站式赋能平台

PCB联盟网

搜索
查看: 1441|回复: 1
收起左侧

鸿蒙HarmonyOS烧录方法总结

[复制链接]

2607

主题

2607

帖子

7472

积分

高级会员

Rank: 5Rank: 5

积分
7472
发表于 2020-9-12 17:11:25 | 显示全部楼层 |阅读模式
鸿蒙HarmonyOS烧录方法总结,   
本帖最后由 o_dream 于 2020-9-10 17:31 编辑




1.  烧录工具 理解HarmonyOS驱动框架,用户态APP和内核态驱动之间的通信机制。 HarmonyOS烧录使用的海思自研的烧录工具Hitool,使用起来相对来说比较简单。整体界面如下所示:   

2.png (65.52 KB, 下载次数: 0)

下载附件  保存到相册  

前天 16:38 上传


2.  烧录内容 烧录内容主要分为两部分,一部分是引导文件FASTBOOT。烧录,另一部分为项目文件烧录这些文件分别是:OHOS_Image.bin可执行文件,rootfs.img和useRFs.img镜像文件。


3.  烧录方法 本文以sample_test demo为例讲解烧录方法,开发板类型是Hi3516DV300。 烧录的第一步是打开Hitool工具,选择对应的芯片类型。如果你的开发板使用的是Hi3518ev300的,请选择对应的芯片。   

3.png (65.68 KB, 下载次数: 0)

下载附件  保存到相册  

前天 16:16 上传


3.1  串口烧录
3.1.1   fastboot烧录 Hiburn请按照以下进行设置: ①  我手上用的开发板是Hi3516DV300的,它的外挂flash是spi nor类型的,你们自己的设置请根据实际情况确定。 ②  本示例所用的外接设备,计算机识别成COM1,你们做开发时请设置成相应的端口号。 ③  烧录方式选择fastboot。   

4.png (36.66 KB, 下载次数: 0)

下载附件  保存到相册  

前天 16:17 上传   

5.png (48.34 KB, 下载次数: 0)

下载附件  保存到相册  

前天 16:18 上传 Uboot所在目录(如果uboot不能正常启动,请从其他地方寻找相对老一点的版本uboot):   

6.png (23.9 KB, 下载次数: 0)

下载附件  保存到相册  

前天 16:18 上传 点击开始烧录,开发板电源拔掉并重新接上。   

7.png (37.93 KB, 下载次数: 0)

下载附件  保存到相册  

前天 16:19 上传 烧写成功后,打开终端,连接串口可以进入hisilion命令行。   

8.png (21.76 KB, 下载次数: 0)

下载附件  保存到相册  

前天 16:19 上传


3.1.2  应用文件烧录
3.1.2.1  Hitool设置: 首先软件的设置如下图所示,请参考图例正确设置:   

9.png (68.58 KB, 下载次数: 0)

下载附件  保存到相册  

前天 16:20 上传 这里面比较重要的就是开始地址和文件长度的确定,这个部分的规则如下: ①   的Uboot占用了1M的存储空间,所以OHOS_Image.bin的开始地址是1M, ②  文件大小不足1M的取值1M,例如本示例中OHOS_Image.bin的大小是5656kb,Hiburn中它的长度设置为6M。所以rootfs.img烧录的起始地址是1M + 6M = 7M。 ③  其余情况,以此类推。 本示例中,各文件长度如下图所示:   

10.png (78.27 KB, 下载次数: 0)

下载附件  保存到相册  

前天 16:21 上传


3.1.2.2 主轴 开始烧录前,首先先扩展打印信息的串口链接,把串口腾出来给烧录器使用。   

11.png (46.39 KB, 下载次数: 0)

下载附件  保存到相册  

前天 16:21 上传


3.1.2.3 开始烧录 16M的文件,用串口11500bps的烧写速度,是需要花费少量的,所以系统及应用文件的烧录一般不建议,请单击“烧写”,并给开发板重新上电,烧录就开始了。使用串口。 烧录过程截图:   

12.png (35.55 KB, 下载次数: 0)

下载附件  保存到相册  

前天 16:22 上传 烧写完成,耗时28分钟。   

13.png (28.22 KB, 下载次数: 0)

下载附件  保存到相册  

前天 16:23 上传


3.2  网口烧录 本示例网口烧录,硬件设备使用的是UGREEN的usb转RJ45网线接口,值得参考。
3.2.1  网口增加IP地址 首先为开发板互联网口添加IP地址:192.168.1.3,增加方法如下:   

14.png (111.45 KB, 下载次数: 0)

下载附件  保存到相册  

前天 16:23 上传 1.        控制面板中找到与单板连接的网卡,右键打开属性。 2.        选择Internet协议版本4(TCP / ipv4)。 3.        按图配置IP地址和网关。 4.        单击“确定”完成配置保存。


3.2.2 单板IP配置 单板与PC间连接串口后,将单板电,自动进入U-boot,按键盘“回车”键可在命令窗口输入命令,为单板配置192.168.1.10的IP地址,并指定192.168.1.3的服务器IP地址,命令如下。
setenvserverip 192.168.1.3
setenvipaddr 192.168.1.10
保存环境 配置完成后使用
pri命令确认查看配置结果,如下图所示。   

15.png (26.74 KB, 下载次数: 0)

下载附件  保存到相册  

前天 16:24 上传 检查网络:在PC端使用ping命令确定单板与PC的网络,命令为“ ping 192.168.1.3”。   

16.png (13.95 KB, 下载次数: 0)

下载附件  保存到相册  

前天 16:25 上传


3.2.3断开串口 开始烧录前,首先先扩展打印信息的串口链接,把串口腾出来给烧录器使用。   

17.png (46.39 KB, 下载次数: 0)

下载附件  保存到相册  

前天 16:25 上传


3.2.4配置Hitool并烧录 Hitool配置如下,请参考。   

18.png (68.2 KB, 下载次数: 0)

下载附件  保存到相册  

前天 16:26 上传 配置完成后,点击烧录。烧录成功截图:   

19.png (25.71 KB, 下载次数: 0)

下载附件  保存到相册  

前天 16:27 上传


3.2.5网口烧录的命令分析 网口烧录的命令删除去中间的细节输出,整理如下所示: start download process.

Boot started successfully!

Send command:       getinfo version version: U-Boot 2016.11 [EOT](OK)

Send command:      
sf probe 0//
选择spi flash 0 [EOT](OK)

Send command:       getinfo spi Block:64KB Chip:16MB*1 ID:0xC2 0x20 0x18 Name:“MX25L128XX“ [EOT](OK) waiting phy ready, it will take 8s. Send command:       setenv serverip 192.168.1.3 [EOT](OK) Send command:       setenv ethaddr 00:8c:55:07:b0:88 [EOT](OK) Send command:       setenv ipaddr 192.168.1.10 [EOT](OK) Send command:       setenv netmask 255.255.255.0 [EOT](OK) Send command:       setenv gatewayip 192.168.1.1 [EOT](OK)          Tftpserver Download Home switched to <\\10.175.126.15\zhuanjia\zfdz\camera0825\out\ipcamera_hi3516dv300_liteos_a> Send command:      
mw.b 0x81000000 0xFF 0x590000//
把内存中从0x81000000
开始的0x590000
个字节全部置1 [EOT](OK)

Send command:      
tftp 0x81000000 OHOS_Image.bin//
把OHOS_Image.bin
文档加载到内存中去,起始地址为0x81000000. Hisilicon ETH net controler eth0 : phy status change : LINK=UP :DUPLEX=FULL : SPEED=100M Using eth0 device TFTP from server 192.168.1.3; our IPaddress is 192.168.1.10 Filename \“OHOS_Image.bin\“. Load address: 0x81000000 Bytes transferred = 5791744 (586000 hex) [EOT](OK)

Send command:       crc32 81000000 586000 crc32 for 81000000 ... 81585fff ==>78b90ed7 [EOT](OK) Send command:      
sf probe 0//
选择spi flash 0 [EOT](OK) Send command:      
sf erase 0x100000 0x600000//
把flash
存储器中从0x100000
开始的6M
字节的存储空间清零。 Send command:      
sf write 0x81000000 0x100000 0x590000//
把内存中从0x81000000
开始的0x590000
字节的内容copy
到flash
中,flash
中存储的起始地址是0x100000 device 0 offset 0x100000, size 0x590000 Send command:      
mw.b 0x81000000 0xFF 0x780000//
把内存中从0x81000000
开始的0x780000
个字节全部置1

[EOT](OK) Send command:      
tftp 0x81000000 rootfs.img//
加载rootfs.img
到内存中去,存储单位的起始地址是0x81000000 Hisilicon ETH net controler eth0 : phy status change : LINK=UP :DUPLEX=FULL : SPEED=100M Using eth0 device TFTP from server 192.168.1.3; our IPaddress is 192.168.1.10 Filename \“rootfs.img\“. Send command:       crc32 81000000 772314 crc32 for 81000000 ... 81772313 ==>ba26d341 [EOT](OK) Send command:      
sf probe 0//
选择spi flash 0 [EOT](OK) Send command:      
sf erase 0x700000 0x800000//
把flash
存储器中从0x700000
开始的8M
字节的存储空间清零。 Send command:      
sf write 0x81000000 0x700000 0x780000//
把内存中从0x81000000
开始的0x780000
字节的内容copy
到flash
中,flash
中存储的起始地址是0x700000 device 0 offset 0x700000, size 0x780000 Send command:      
mw.b 0x81000000 0xFF 0x10000//
把内存中从0x81000000
开始的0x10000
个字节全部置1

[EOT](OK) Send command:      
tftp 0x81000000 userfs.img//
加载userfs.img
到内存中去,存储单位的起始地址是0x81000000 Hisilicon ETH net controler eth0 : phy status change : LINK=UP :DUPLEX=FULL : SPEED=100M Using eth0 device TFTP from server 192.168.1.3; our IPaddress is 192.168.1.10 Filename \“userfs.img\“. Load address: 0x81000000 Loading: *##           0 Bytes/s done Bytes transferred = 3020 (bcc hex) [EOT](OK) Send command:       crc32 81000000 bcc crc32 for 81000000 ... 81000bcb ==>0361fc92 [EOT](OK) Send command:      
sf probe 0//
选择spi flash 0 [EOT](OK) Send command:      
sf erase 0xf00000 0x100000//
把flash
存储器中从0xF00000
开始的1M
字节的存储空间清零。 Send command:      
sf write 0x81000000 0xf00000 0x10000//
把内存中从0x81000000
开始的0x10000
字节的内容copy
到flash
中,flash
中存储的起始地址是0xf00000 device 0 offset 0xf00000, size 0x10000 Writing at 0xf10000 -- 100% complete. SF: 65536 bytes @ 0xf00000 Written: OK [EOT](OK) Partition burnt successfully! Send command:       reset reset success! Partition burnt completed! Serial channels were closed successfully.


3.3 USB烧录 硬件使用的双母口USB线。


3.3.1 Hitool工具配置   

20.png (52.16 KB, 下载次数: 0)

下载附件  保存到相册  

前天 16:28 上传 文件目录中只要包含OHOS_Image.bin,rootfs.img,userfs.img三个文件即可,不限定位置。 烧写方式一定要选择DDR烧写。


3.3.2烧录步骤:
3.3.2.1烧录OHOS_Image.bin文件

在串口终端中输入以下命令,每条命令的具体含义请参考网口烧录相关部分的描述: mw.b 0x80000000 0xff 0x600000;
// 0x600000
就是OHOS_Image.bin
所占的空间(取整) usbtftp 0x80000000 OHOS_Image.bin; sf探针0; sf擦除0x100000 0x600000; sfwrite 0x80000000 0x100000 0x600000;
//
起始地址为0x100000 如果是Hi3518ev300的板子,请把命令中的0x80000000改成0x40000000。   

21.png (44.31 KB, 下载次数: 0)

下载附件  保存到相册  

前天 16:29 上传


3.3.2.2烧录rootfs.img文件 在串口终端中输入以下命令,每条命令的具体含义请参考网口烧录相关部分的描述: mw.b 0x80000000 0xff 0x800000;
// 0x800000
就是rootfs.img
所占的空间(取整) usbtftp 0x80000000 rootfs.img; sf探针0; sf擦除0x700000 0x800000; sfwrite 0x80000000 0x700000 0x800000;
//
起始地址为0x100000 + 0x600000 = 0x700000 如果是Hi3518ev300的板子,请把命令中的0x80000000改成0x40000000。   

22.png (58.71 KB, 下载次数: 0)

下载附件  保存到相册  

前天 16:30 上传


3.3.2.3烧录userfs.img文件 在串口终端中输入以下命令,每条命令的具体含义请参考网口烧录相关部分的描述: mw.b 0x80000000 0xff 0x100000;
// 0x100000
就是userfs.img
所占的空间(取整) usbtftp 0x80000000 userfs.img; sf探针0; sf擦除0xf00000 0x100000; sfwrite 0x80000000 0xf00000 0x100000;
//
起始地址为0x100000 + 0x600000 + 0x800000 = 0xf00000 如果是Hi3518ev300的板子,请把命令中的0x80000000改成0x40000000。   

23.png (66.67 KB, 下载次数: 0)

下载附件  保存到相册  

前天 16:30 上传


3.3.2.4烧录过程中控制台信息:   

24.png (43.13 KB, 下载次数: 0)

下载附件  保存到相册  

前天 16:31 上传


4.开源板emmc烧录 烧录的时候,选择eMMC方式。我们这里选择通过网口烧录eMMC,网口的配置参考上文。   

25.png (65.54 KB, 下载次数: 0)

下载附件  保存到相册  

前天 16:31 上传

烧录完成之后,uboot的启动命令还有所不同,在eMMC中,存储以512B为单位的,如果我们的文件(通常是OHOS_Image.bin)大小为6M(10进制),我们需要把它转换成16进制,具体转换的公式如下: 10二进制中文件总大小:6 * 1024 * 1024 Byte = 6291456Byte,那么总共是多少个512KB的块呢?我们用6291456/512 = 12288个块(十进制),再把十进制中的12288个块转换成16二进制,得0x3000。那么最初一共有0x3000个512Byte的块。 setenv bootcmd“ sf探针0; mmc读取0x0 0x80000000 0x800 0x3000;”; setenv bootargs“控制台= ttyAMA0,115200n8 root = emmc fstype = vfat rootaddr = 7M rootsize = 15Mrw”; saveenv;


5.不同烧录方法之间的比较 Usb烧录方式和网口烧录方式想象,不同之处比较如下:
   烧录方式      文件导入命令      内存起始地址      命令输入方式      校正证据   
   USB烧录      usbtftp      0x80000000      手工的      无   
   网口烧录      ftp      0x81000000      自动      有   
网口烧录和USB烧录的速度基本是相同的,大约在串口烧录就太慢了,所以正常情况下不推荐串口烧录。 综上比较,只从效率的角度看,烧录器的选择优先级为:
网口烧录> USB
烧录>
串口烧录


6.其他问题 我们现在用的开发板Flash只有16M,如果程序过大,则无法进行烧录。所以做项目的时候,外挂的flash会大一些,留有足够的预备空间。


注:文档和视频中所有的图片及代码截图皆为示意图,具体以HarmonyOS官网发布内容为准。

文章来源:张飞实战电子
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表