当前位置: 首页 > 科技观察

HarmonyOS烧录方法总结_0

时间:2023-03-14 18:55:44 科技观察

更多内容请访问:与华为共建的HarmonyOS技术社区https://harmonyos.51cto.com/#zz1。烧录工具了解HarmonyOS驱动框架,用户态APP与内核态驱动的通信机制。HarmonyOS编程使用的海思自研编程工具Hitool,使用起来比较简单。整体界面如图:2.烧录内容这几个文件是:OHOS_Image.bin拷贝文件,rootfs.img和userfs.img多个文件。烧录内容主要分为两部分,一是引导文件fastboot烧录,二是工程文件烧录。3、烧录方法本文以sample_testdemo为例,讲解烧录方法。开发板型号为Hi3516DV300。烧录第一步是打开Hitool工具,选择对应的芯片类型。如果您的开发板使用Hi3518ev300,请选择对应的芯片。3.1串口编程3.1.1Fastboot编程Hiburn请如下设置:①我使用的开发板是Hi3516DV300,外接flash是spinor类型。请根据实际情况确定自己的设置。②本例中使用的外部设备被电脑识别为COM1,开发时请设置为对应的端口号。③烧录方式选择fastboot。uboot所在目录(如果uboot无法正常启动,请从其他地方找比较老版本的uboot):点击开始烧录,拔下开发板电源重新连接。烧写成功后,打开终端,连接串口,进入海思亮命令行。3.1.2应用文件烧录3.1.2.1Hitool设置:首先软件设置如下图所示,请参考图示正确设置:这里比较重要的是确定起始地址和文件长度,规则这部分内容如下:①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开始烧录点击“Program”,给开发板重新上电,即可开始烧录。16M的文件使用串口11500bps烧写速度需要一段时间,所以一般不建议使用串口烧写系统和应用文件。烧录过程截图:烧录完成,耗时28分钟。3.2网口编程本例网口编程,硬件设备使用优格瑞的usb转RJ45网线接口,值得参考。3.2.1添加网口IP地址首先为开发板的网口添加一个IP地址:192.168.1.3。添加方法如下:在控制面板中找到板子连接的网卡,右键打开属性。选择Internet协议版本4(TCP/IPv4)。如图所示配置IP地址和网关。单击“确定”保存配置。3.2.2单板IP配置单板与PC串口连接好后,单板上电自动进入U-boot,按键盘上的“Enter”键在命令窗口输入命令进行配置单板地址IP为192.168.1.10,指定192.168。1.3服务器IP地址,命令如下。setenvserverip192.168.1.3setenvipaddr192.168.1.10保存环境配置后,使用pri命令确认并查看配置结果,如下图所示。检查网络:在PC端使用ping命令确定板卡与PC之间的网络,命令为“ping192.168.1.3”。3.2.3主轴烧录前,先扩展打印信息的串口链接,腾出串口给烧录器使用。3.2.4配置Hitool并烧录Hitool配置如下,请参考。配置完成后,点击烧录。烧录成功截图:3.2.5网口烧录命令分析网口烧录命令删除了中间的详细输出,整理如下:开始下载过程。启动成功!发送命令:getinfoversionVersion:U-Boot2016.11[EOT](OK)发送命令:sfprobe0//selectspiflash0[EOT](OK)发送命令:getinfospiblock:64KBChip:16MB*1ID:0xC20x200x18Name:"MX25L128XX"[EOT](OK)等待phy就绪,需要8秒。发送命令:setenvserverip192.168.1.3[EOT](OK)发送命令:setenvethaddr00:8c:55:07:b0:88[EOT](OK)发送命令:setenvipaddr192.168.1.10[EOT](OK)发送命令:setenvnetmask255.255.255.0[EOT](OK)发送命令:setenvgatewayip192.168.1.1[EOT](OK)Tftp服务器下载主页切换到<\\10.175.126.15\zhuanjia\zfdz\camera0825\out\ipcamera_hi3516dv300_liteos_a>Sendcommand:mw.b0x810000000x590000of0xFF//设置内存中从0X8100开始的所有0X590000字节为1[EOT](OK)Sendcommand:tftp0x81000000OHOS_Image.bin//SetOHOS_Image.bin文件加载到内存中,起始地址为0x81000000。海思ETH网络控制器eth0:PHY状态改变:LINK=UP:DUPLEX=FULL:SPEED=100MTFTPfromserver192.168.1.3usingeth0device;我们的IP地址是192.168.1.10文件名“OHOS_Image.bin”。加载地址:0x81000000Bytestransferred=5791744(586000hex)[EOT](OK)发送命令:crc3281000000586000crc32for81000000...81585fff==>78b90ed7[EOT](OK)发送命令:sfprobe0//选择spiflash0[EOT](OK)andsendcommand:sferase0x1000000x600000//清除flash存储器中从0x100000开始的6M字节的存储空间。发送命令:SFwrites0x1000000x590000of0x81000000//将内存中从0X8100开始的0X590000字节的内容复制到闪存中,闪存中存储的起始地址为0X100000设备0偏移量0x100000,大小为0x590000发送命令:mw.b0x810000000x780000of0xFF//将内存中从0X8100开始的所有0x780000字节设置为1[EOT](OK)发送命令:tftp0x81000000rootfs.img//加载rootfs.img到内存中去,开始存储单元的地址是0x81000000HiSiliconETH网络控制器eth0:PHY状态更改:LINK=UP:DUPLEX=FULL:SPEED=100M使用来自服务器192.168.1.3的eth0设备TFTP;我们的IP地址是192.168.1.10文件名“rootfs.img”。发送指令:crc3281000000772314crc32is81000000...81772313==>ba26d341[EOT](OK)发送指令:sfprobe0//selectspiflash0[EOT](OK)发送指令:sferase0x7000000x800000//清除flashmemory中从0x700000开始的8M字节存储空间。发送命令:SFwrites0x810000000x7000000x780000//将内存中从0X8100开始的0x780000个字节的内容复制到闪存中,闪存中存储的起始地址为0x700000设备0偏移量0x700000,大小为0x780000发送命令:mw.b0x810000000xFF0x10000//将内存中从0x81000000开始的所有0x10000字节设置为1[EOT](OK)发送命令:tftp0x81000000userfs.img//将userfs.img加载到内存中,存储单元起始地址为0x81000000HiSiliconETH网络控制器eth0:PHY状态更改:LINK=UP:DUPLEX=FULL:SPEED=100M使用来自服务器192.168.1.3的eth0设备TFTP;我们的IP地址是192.168.1.10文件名“userfs.img”。加载地址:0x81000000加载:*##0bytes/secDoneBytestransferred=3020(bcchex)[EOT](OK)Sendcommand:crc3281000000bccrc32is81000000...81000bcb==>0361fc92[EOT](OK)sendcommand:sfprobe0//selectspiflash0[EOT](OK)sendcommand:sferase0xf000000x100000//savethe1Mfrom0xF00000intheflashmemory字节存储空间被清空。发送命令:sfwrite0x810000000xf000000x10000//将内存中从0x81000000开始的0x10000字节的内容复制到flash中。flash中存储的起始地址为0xf00000device0offset0xf00000,大小为0x10000。写入-100%完成。SF:65536bytes@0xf00000Written:OK[EOT](OK)分区烧录成功!发送指令:reset复位成功!分区刻录完成!串行通道成功关闭。3.3用于USB编程硬件的双母USB电缆。3.3.1Hitool工具配置文件目录只需要包含三个文件:OHOS_Image.bin、rootfs.img和userfs.img,位置不限。编程方式必须选择DDR编程。3.3.2烧录步骤:3.3.2.1烧录OHOS_Image.bin文件在串口终端输入以下命令。各命令的具体含义可以参考网口烧录相关部分的说明:mw.b0x800000000xff0x600000;//0x600000是OHOS_Image.bin占用的空间(四舍五入)usbtftp0x80000000OHOS_Image.bin;sf探针0;sf擦除0x1000000x600000;sf写0x800000000x1000000x600000;,请将指令中的0x80000000改为0x40000000。3.3.2.2烧录rootfs。img文件,在串口终端输入以下命令。各命令的具体含义可以参考网口烧录相关部分的说明:mw.b0x800000000xff0x800000;//0x800000是rootfs.img占用的空间(四舍五入)usbtftp0x80000000rootfs.img;SF探头0;SF擦除0x7000000x800000;SF写0x800000000x7000000x800000;//起始地址是0x100000+0x600000=0x700000。变成0x40000000。3.3.2.3烧录userfs.img文件在串口终端输入以下命令。各命令的具体含义可以参考网口烧录相关部分的说明:mw.b0x800000000xff0x100000;//0x100000被userfs.img空间占用(take)usbtftp0x80000000userfs.img;SF探头0;SF擦除0xf000000x100000;sf写在0x800000000xf000000x100000;/////起始地址为0x100000+0x600000+0x800000=0xf00000,请将指令中的0x80000000改为0x40000000。3.3.2.4烧录过程中的控制台信息:4、烧录开源板子emmc时,选择eMMC方式。这里我们选择通过网口烧录eMMC,网口的配置参考上面。烧录完成后uboot的启动命令就不一样了。在eMMC中,存储以512B为单位。如果我们的文件(通常是OHOS_Image.bin)大小为6M(10位),我们需要将其转换成16二进制,具体转换公式如下:10二进制文件总大小:6*1024*1024bytes=6291456Byte,那么总共有多少个5个12KB的块?我们用6个291456/512=12288个块(十进制),然后将1个2288个块十进制转化为十六进制,得到0X3000。也就是说0x3000处一共有5个12Byte的块。“;setenvbootcmd”SF探测0;MMC读取0x00x800000000x8000x3000;";setenvbootargs"console=ttyAMA0,115200n8root=emmcfstype=vfatrootaddr=7Mrootsize=15Mrw";saveenv;Usb录音方式和网口录音方式比较,区别如下:网速口烧录和USB烧录基本一样,串口烧录可能太慢了,所以一般情况下不建议串口烧录。综上所述,仅从效率的角度考虑,烧录器选择的优先级是:网络口编程>USB编程>串口编程6.其他问题我们在用开发板子Flash只有16M,程序太大无法烧录,所以做项目的时候,外接的flash会更大,预留足够的空间,课程链接:HarmonyOS南向驱动调试(gpio和wifi)以及烧录方法总结,更多内容请访问:鸿蒙科技社区联合built与华为官方https://harmonyos.51cto.com/#zz