鸿蒙HarmonyOS烧录方法总结 精华

张飞电子
发布于 2020-9-22 09:55
浏览
11收藏

1. 烧录工具


理解 HarmonyOS 驱动框架,用户态 APP 和内核态驱动之间的通信机制。

HarmonyOS 烧录使用的海思自研的烧录工具 Hitool ,使用起来相对来说比较简单。整体界面如图:

鸿蒙HarmonyOS烧录方法总结-鸿蒙开发者社区

2.  烧录内容


这些文件分别是: OHOS_ Image.bin 复制文件,rootfs.img 和userfs.img 多个文件。烧录内容主要分为两部分,一部分是引导文件 fastboot 烧录,另一部分为项目文件烧录。

 

3.  烧录方法


本文以 sample_test demo 为例讲解烧录方法,开发板类型是 Hi 3516DV300。

烧录的第一步是打开 Hitool 工具,选择对应的芯片类型。如果你的开发板使用的是 Hi 3518ev300 的,请选择对应的芯片。鸿蒙HarmonyOS烧录方法总结-鸿蒙开发者社区

 

3.1  串口烧录


3.1.1  fastboot 烧录

 

Hiburn 请按照以下进行设置:

①  我手上用的开发板是 Hi3516DV300 的,它的外挂 flash 是spi nor 类型的,你们自己的设置请根据实际情况确定。

②  本示例所用的外接设备,计算机识别成 COM1 ,你们做开发时请设置成相应的端口号。

③  烧录方式选择 fastboot 。鸿蒙HarmonyOS烧录方法总结-鸿蒙开发者社区

鸿蒙HarmonyOS烧录方法总结-鸿蒙开发者社区

 

Uboot 所在目录(如果 uboot 不能正常启动,请从其他地方寻找相对老一点的版本 uboot):鸿蒙HarmonyOS烧录方法总结-鸿蒙开发者社区

 

点击开始烧录,开发板电源拔掉并重新接上。鸿蒙HarmonyOS烧录方法总结-鸿蒙开发者社区

 

烧写成功后,打开终端,连接串口可以进入 hisilion 命令行。鸿蒙HarmonyOS烧录方法总结-鸿蒙开发者社区

 

3.1.2  应用文件烧录


3.1.2.1  Hitool 设置:

 

首先软件的设置如下图所示,请参考图例正确设置:鸿蒙HarmonyOS烧录方法总结-鸿蒙开发者社区

 

这里面比较重要的就是开始地址和文件长度的确定,这个部分的规则如下:

①  Uboot的占用了 1M 的存储空间,所以OHOS _Image 。bin 的开始地址是 1M ,

②  文件大小不足 1M 的取值1M ,有时是本示例中OHOS _Image.bin 的大小是 5 656kb , Hiburn 中它的长度设置为 6M 。所以rootfs。img 烧录的起始地址是 1M +  6M =  7M 。

③  其余情况,以此类推。

 

本示例中,各文件长度如下图所示:鸿蒙HarmonyOS烧录方法总结-鸿蒙开发者社区

 

3.1.2.2  主轴

 

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

鸿蒙HarmonyOS烧录方法总结-鸿蒙开发者社区

 

3.1.2.3  开始烧录

 

点击 “烧写”,并给开发板重新上电,烧录就开始了。16M 的文件,用串口 1 1500bps 的烧写速度,是需要花费一段时间的,所以系统-及应用文件的烧录一般不建议使用串口。

 

烧录过程截图:鸿蒙HarmonyOS烧录方法总结-鸿蒙开发者社区

 

烧写完成,耗时 2 8 分钟。


鸿蒙HarmonyOS烧录方法总结-鸿蒙开发者社区

 

3.2  网口烧录

 

本示例网口烧录,硬件设备使用的是 UGREEN 的usb 转RJ45 网线接口,值得参考。

 

3.2.1  网口增加 IP 地址

 

首先为开发板互联网口添加 IP 地址:1 92.168.1.3 ,增加方法如下:鸿蒙HarmonyOS烧录方法总结-鸿蒙开发者社区

 

控制面板中找到与单板连接的网卡,右键打开属性。


选择 Internet 协议版本4 (TCP / IPv4 )。

按图配置 IP 地址和网关。

点击 “ 确定” 完成配置保存。

 

3.2.2  单板 IP 配置

 

单板与 PC 间连接串口后,将单板电,自动进入U-boot ,按键盘“ 回车” 键可在命令窗口输入命令,为单板配置192.168.1.10 的IP 地址,并指定192.168。 1.3 的服务器IP 地址,命令如下。

setenv serverip 192.168.1.3

setenv ipaddr 192.168.1.10

保存环境

 

配置完成后使用pri 命令确认查看配置结果,如下图所示。鸿蒙HarmonyOS烧录方法总结-鸿蒙开发者社区

 

检查网络:在 PC 端使用ping 命令确定单板与PC 的网络,命令为“ ping 192.168.1.3” 。鸿蒙HarmonyOS烧录方法总结-鸿蒙开发者社区

 

3.2.3  主轴

 

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

鸿蒙HarmonyOS烧录方法总结-鸿蒙开发者社区

 

3.2.4  配置 Hitool 并烧录

 

Hitool 配置如下,请参考。鸿蒙HarmonyOS烧录方法总结-鸿蒙开发者社区

配置完成后,点击烧录。烧录成功截图:鸿蒙HarmonyOS烧录方法总结-鸿蒙开发者社区

 

3.2.5  网口烧录的命令分析

 

网口烧录的命令删除去中间的细节输出,整理如下所示:

 

开始下载过程。

 

启动成功启动!

 

发送命令:getinfo版本

版本:U-Boot 2016.11

[EOT](确定)

 

发送命令:sf probe 0 / / 选择spi flash 0

[EOT](确定)

 

发送命令:getinfo spi

块:64KB芯片:16MB * 1

ID:0xC2 0x20 0x18

名称:“ MX25L128XX”

[EOT](确定)

等待phy准备就绪,将需要8秒钟。

发送命令:setenv serverip 192.168.1.3

[EOT](确定)

发送命令:setenv ethaddr 00:8c:55:07:b0:88

[EOT](确定)

发送命令:setenv ipaddr 192.168.1.10

[EOT](确定)

发送命令:setenv网络掩码255.255.255.0

[EOT](确定)

发送命令:setenv gatewayip 192.168.1.1

[EOT](确定)

Tftp服务器下载主页切换到<\\ 10.175.126.15 \ zhuanjia \ zfdz \ camera0825 \ out \ ipcamera_hi3516dv300_liteos_a>

发送命令:mw.b 0x81000000 0xFF的0x590000 // 把内存中从 0X 8100 开始的 0X 590000 个字节全部置 1

[EOT](确定)

 

发送命令:tftp 0x81000000 OHOS_Image.bin // 把OHOS_Image.bin 文档加载到内存中去,起始地址为 0x 81000000。

海思ETH网络控制器

eth0:PHY状态更改:LINK = UP:DUPLEX = FULL:SPEED = 100M

使用eth0设备

来自服务器192.168.1.3的TFTP; 我们的IP地址是192.168.1.10

文件名“ OHOS_Image.bin”。

加载地址:0x81000000

传输的字节数= 5791744(586000 hex)

[EOT](确定)

 

发送命令:crc32 81000000 586000

crc32 for 81000000 ... 81585fff ==> 78b90ed7

[EOT](确定)

发送命令:sf probe 0 / / 选择spi flash 0

[EOT](确定)

发送命令:sf擦除0x100000 0x600000 // 把闪存存储中从 0x 100000 开始的6M 字节的存储空间清零。

发送命令:SF写0x81000000的0x100000 0x590000 // 把内存中从 0X 8100 开始的 0X 590000 字节的内容复制到闪存中,闪存中存储的起始地址是 0X 100000

设备0偏移量0x100000,大小为0x590000

发送命令:mw.b 0x81000000 0xFF的0x780000 // 把内存中从 0X 8100 开始的0x780000 个字节全部置 1

 

[EOT](确定)

发送命令:tftp 0x81000000 rootfs.img // 加载rootfs.img 到内存中去,存储单位的起始地址是 0x81000000

海思ETH网络控制器

eth0:PHY状态更改:LINK = UP:DUPLEX = FULL:SPEED = 100M

使用eth0设备

来自服务器192.168.1.3的TFTP; 我们的IP地址是192.168.1.10

文件名“ rootfs.img”。

发送命令:crc32 81000000 772314

crc32为81000000 ... 81772313 ==> ba26d341

[EOT](确定)

发送命令:sf probe 0 // 选择spi flash 0

[EOT](确定)

发送命令:sf擦除0x700000 0x800000 // 把闪存存储中从 0x 700000 开始的8M 字节的存储空间清零。

发送命令:SF写0x81000000 0x700000 0x780000 // 把内存中从 0X 8100 开始的0x780000 字节的内容复制到闪存中,闪存中存储的起始地址是0x700000

设备0偏移量0x700000,大小为0x780000

发送命令:mw.b 0x81000000 0xFF 0x10000 // 把内存中从 0x 81000000 开始的0x10000 个字节全部置 1

 

[EOT](确定)

发送命令:tftp 0x81000000 userfs.img // 加载userfs.img 到内存中去,存储单位的起始地址是 0x81000000

海思ETH网络控制器

eth0:PHY状态更改:LINK = UP:DUPLEX = FULL:SPEED = 100M

使用eth0设备

来自服务器192.168.1.3的TFTP; 我们的IP地址是192.168.1.10

文件名“ userfs.img”。

加载地址:0x81000000

载入中:* ##

 0字节/秒

做完了

传输的字节数= 3020(密件抄送十六进制)

[EOT](确定)

发送命令:crc32 81000000 bcc

crc32为81000000 ... 81000bcb ==> 0361fc92

[EOT](确定)

发送命令:sf probe 0 / / 选择spi flash 0

[EOT](确定)

发送命令:sf擦除0xf00000 0x100000 // 把闪存存储中从 0x F00000 开始的1M 字节的存储空间清零。

发送命令:sf write 0x81000000 0xf00000 0x10000 // 把内存中从 0x 81000000 开始的0x10000 字节的内容复制到flash 中, flash 中存储的起始地址是0xf00000

设备0偏移量0xf00000,大小为0x10000

以0xf10000进行写入-100%完成。

SF:65536字节@ 0xf00000书面:OK

[EOT](确定)

分区成功烧毁!

发送命令:重置

重置成功!

分区烧毁完成!

串行通道已成功关闭。

 

3.3  USB 烧录

 

硬件使用的双母口 USB 线。

 

3.3.1  Hitool 工具配置鸿蒙HarmonyOS烧录方法总结-鸿蒙开发者社区

文件目录中只要包含 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; sf写入0x80000000 0x100000 0x600000; / / 起始地址为 0X 100000

如果是 Hi3518ev300 的板子,请把命令中的 0x80000000 改成0x40000000 。

 

鸿蒙HarmonyOS烧录方法总结-鸿蒙开发者社区

 

3.3.2.2  烧录 rootfs 。img 文件

 

在串口终端中输入以下命令,每条命令的具体含义请参考网口烧录相关部分的描述:

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 。

 

鸿蒙HarmonyOS烧录方法总结-鸿蒙开发者社区

 

3.3.2.3  烧录 userfs.img 文件


在串口终端中输入以下命令,每条命令的具体含义请参考网口烧录相关部分的描述:

 

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 。

 

鸿蒙HarmonyOS烧录方法总结-鸿蒙开发者社区

 

3.3.2.4  烧录过程中控制台信息:鸿蒙HarmonyOS烧录方法总结-鸿蒙开发者社区

 

4.  开源板 emmc 烧录

 

烧录的时候,选择 eMMC 方式。我们这里选择通过网口烧录 eMMC ,网口的配置参考上文。鸿蒙HarmonyOS烧录方法总结-鸿蒙开发者社区

 

烧录完成之后, uboot 的启动命令还有所不同,在 eMMC 中,存储以 5 12B 为单位的,如果我们的文件(通常是 OHOS _Image.bin )大小为 6M (1 0 位数),我们需要把它转换成 1 6 二进制,具体转换的公式如下:


1 0 二进制中文件总大小: 6 *  1024 *  1024 字节= 6291456Byte ,那么总共是多少个 5 12KB 的块呢?我们用 6 291456/512 =  12288 个块(十进制),再把十进制中的 1 2288 块个转换分类中翻译 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 烧录方式和网口烧录方式想象,不同之处比较如下:鸿蒙HarmonyOS烧录方法总结-鸿蒙开发者社区

 

网口烧录和 USB 烧录的速度基本是相同的,大约在串口烧录就太慢了,所以正常情况下不推荐串口烧录。

综上比较,只从效率的角度看,烧录器的选择优先级为:

网口烧录 > USB 烧录 > 串口烧录


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

 

课程链接:HarmonyOS南向驱动调试(gpio以及wifi)及烧录方法总结

 

分类
已于2020-9-22 09:58:29修改
16
收藏 11
回复
举报
9条回复
按时间正序
/
按时间倒序
jojo
jojo

太棒了 感谢楼主分享!

回复
2020-9-22 10:10:16
鲜橙加冰
鲜橙加冰

对于楼主的才华,必须点赞。

回复
2020-9-22 10:22:42
tjm2613165s
tjm2613165s

太棒了 感谢楼主分享!

回复
2020-9-22 10:30:58
meimei昵
meimei昵

赞,感谢楼主分享

回复
2020-9-22 10:34:44
啧啧啧GKD
啧啧啧GKD

干干货  太好了 收藏了

回复
2020-9-22 10:38:25
langrisser
langrisser

这么用心的帖 必须三连 (๑•̀ㅂ•́)و✧

回复
2020-9-22 14:04:20
超心累
超心累

good, 666666666666

回复
2020-9-22 18:40:57
wx60a57b4eeffb0
wx60a57b4eeffb0

用老手机试试!看看能否烧录

回复
2021-6-3 18:03:00
wx62257cda844c2
wx62257cda844c2

uboot 去哪可以下载 还是有其他方式获取

回复
2022-3-7 11:51:25
回复
    相关推荐