HarmonyOS的烧录方法介绍

1.烧录工具
理解harmonyos驱动框架,用户态app和内核态驱动之间的通信机制。
harmonyos烧录使用的海思自研的烧录工具hitool,使用起来相对来说比较简单。整体界面如图所示:
2.烧录内容
烧录内容主要分为两部分,一部分是引导文件fastboot烧录,另一部分为项目文件烧录。这些文件分别是:ohos_image.bin可执行文件,rootfs.img和userfs.img镜像文件。
3.烧录方法
本文以sample_test demo 为例讲解烧录方法,开发板类型是hi3516dv300.
烧录的第一步是打开hitool工具,选择对应的芯片类型。如果你的开发板使用的是hi3518ev300的,请选择对应的芯片。
3.1
3.1.1
hiburn请按照如图进行设置:
① 我手上用的开发板是hi3516dv300的,它的外挂flash是spi nor类型的,你们自己的设置请根据实际情况确定。
② 本示例所用的串口设备,计算机识别成com1,你们做开发时请设置成相应的端口号。
③ 烧录方式选择fastboot。
uboot所在目录(如果uboot不能正常启动,请从其他地方寻找相对老一点的版本uboot):
点击开始烧录,开发板电源拔掉并重新接上。
烧写成功后,打开终端,连接串口可以进入hisilion命令行。
3.1.2
3.1.2.1
首先软件的设置如下图所示,请参考图例正确设置:
这里面比较重要的就是开始地址和文件长度的确定,这个部分的规则如下:
① uboot占用了1m的存储空间,所以ohos_image.bin的开始地址是1m,
② 文件大小不足1m的取值1m,比如本示例中ohos_image.bin的大小是5656kb,hiburn中它的长度设置为6m。所以rootfs.img烧录的起始地址是1m+ 6m = 7m。
③ 其余情况,以此类推。
本示例中,各文件长度如下图所示:
3.1.2.2
开始烧录前,首先先断开打印信息的串口链接,把串口腾出来给烧录器使用。
3.1.2.3
点击“烧写”,并给开发板重新上电,烧录就开始了。16m的文件,用串口11500bps的烧写速度,是需要花费一段时间的,所以系统及应用文件的烧录一般不建议使用串口。
烧录过程截图:
烧写完成,耗时28分钟。
3.2
本示例网口烧录,硬件设备使用的是ugreen的usb转rj45网线接口,仅供参考。
3.2.1
首先为开发板互联网口添加ip地址:192.168.1.3,增加方法如下:
控制面板中找到与单板连接的网卡,右键打开属性。
选择internet协议版本4(tcp/ipv4)。
按图配置ip地址和网关。
点击“确定”完成配置保存。
3.2.2
单板与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
saveenv
配置完成后使用pri命令确认查看配置结果,如下图所示。
检查网络:在pc端使用ping命令确定单板与pc的网络,命令为ping 192.168.1.3。
3.2.3
开始烧录前,首先先断开打印信息的串口链接,把串口腾出来给烧录器使用。
3.2.4
hitool配置如下,请参考。
配置完成后,点击烧录。烧录成功截图:
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)
tftp server download home switched to
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 ip address 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 ip address 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 ip address 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线。
3.3.1
文件目录中只要包含ohos_image.bin,rootfs.img,userfs.img三个文件即可,不限定位置。
烧写方式一定要选择ddr烧写。
3.3.2
3.3.2.1
在串口终端中输入以下命令,每条命令的具体含义请参考网口烧录相关部分的描述:
mw.b 0x80000000 0xff 0x600000;// 0x600000就是ohos_image.bin所占的空间(取整)
usbtftp 0x80000000 ohos_image.bin;
sf probe 0;sf erase 0x100000 0x600000;sf write 0x80000000 0x100000 0x600000;//起始地址为0x100000
如果是hi3518ev300的板子,请把命令中的0x80000000改成0x40000000。
3.3.2.2
在串口终端中输入以下命令,每条命令的具体含义请参考网口烧录相关部分的描述:
mw.b 0x80000000 0xff 0x800000;//0x800000就是rootfs.img所占的空间(取整)
usbtftp 0x80000000 rootfs.img;
sf probe 0;sf erase 0x700000 0x800000;sf write 0x80000000 0x700000 0x800000;//起始地址为0x100000+0x600000 = 0x700000
如果是hi3518ev300的板子,请把命令中的0x80000000改成0x40000000。
3.3.2.3
在串口终端中输入以下命令,每条命令的具体含义请参考网口烧录相关部分的描述:
mw.b 0x80000000 0xff 0x100000;//0x100000就是userfs.img所占的空间(取整)
usbtftp 0x80000000 userfs.img;
sf probe 0;sf erase 0xf00000 0x100000;sf write 0x80000000 0xf00000 0x100000;//起始地址为0x100000+0x600000+0x800000=0xf00000
如果是hi3518ev300的板子,请把命令中的0x80000000改成0x40000000。
3.3.2.4
4.开源板emmc烧录
烧录的时候,选择emmc方式。我们这里选择通过网口烧录emmc,网口的配置参考上文。
烧录完成之后,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 probe 0;mmc read 0x0 0x80000000 0x800 0x3000;;
setenv bootargs console=ttyama0,115200n8 root=emmc fstype=vfat rootaddr=7m rootsize=15m rw; saveenv;
5.不同烧录方法之间的比较
usb烧录方式和网口烧录方式想象,不同之处比较如下:
网口烧录和usb烧录的速度基本是相同的,相比之下串口烧录就太慢了,所以正常情况下不推荐串口烧录。
综上比较,只从效率的角度看,烧录器的选择优先级为:
网口烧录> usb 烧录>串口烧录
6.其他问题
我们现在用的开发板flash只有16m,如果程序过大,则无法进行烧录。所以做项目的时候,外挂的flash尽可能大一些,留有足够的预备空间。


2020年全球半导体销售额整体增长了6.5%,达到了4,390亿美元
欣旺达电动汽车将为磷酸铁锂菱智CM5EV供应动力电池总成产品
TD-SCDMA终端直接变频收发信机的设计
图像的点云是如何拼接在一起的?
FPC插头激光切割技术你了解有多少
HarmonyOS的烧录方法介绍
飞兆半导体推出了一款高性价比的LED驱动器FAN5701
SK海力士CEO李锡熙赴日本欲解决原材料问题
污水流量计的种类_污水流量计的性能
工业物联网方案中数据采集模块的作用
浅谈激光锡焊设备在电子行业应用的重要性
魅族MX7今年发布?不!黄章今年做不出来!从产品打磨还是处理器交涉上都还为时尚早
为什么贯流风机逐渐转变使用微型无刷直流电机?
2018世界移动大会盛大开启,中国联通惊艳亮相
瑞萨电子推出RZ/T1实时处理器解决方案
中国联通发布5G终端战略
虹科分享丨如何运用AR技术提升制造效率?这里有答案!
Modbus Poll和Modbus Slave汉化版分享
智慧用电是个什么系统?
航天公司蓝色起源揭晓了一款全新的月球登陆器“Blue moon”