【HarmonyOS HiSpark AI Camera】映像烧录
HiSpark AI Camera开发板的鸿蒙系统有4个映像:
u-boot-hi3516dv300.bin、OHOS_Image.bin、rootfs.img和useRFs.img。
目前支持串口、USB、网口三种方式进行映像烧录。
在映像烧录前,需要确认每个映像在EMMC中的存储起始地址和存储空间大小即映像分区表。
HiSpark AI Camera开发板分区表如下:
(文件路径部分请用户根据自己的镜像目录进行修改!!!)
<?xml version="1.0" encoding="GB2312" ?>
<Partition_Info>
<Part Sel="1" PartitionName="fastboot" FlashType="emmc" FileSystem="none" Start="0" Length="1M" SelectFile="D:\img\hmos\u-boot-hi3516dv300.bin"/>
<Part Sel="1" PartitionName="kernel" FlashType="emmc" FileSystem="none" Start="1M" Length="9M" SelectFile="D:\img\hmos\OHOS_Image.bin"/>
<Part Sel="1" PartitionName="rootfs" FlashType="emmc" FileSystem="none" Start="10M" Length="15M" SelectFile="D:\img\hmos\rootfs.img"/>
<Part Sel="1" PartitionName="userfs" FlashType="emmc" FileSystem="none" Start="25M" Length="50M" SelectFile="D:\img\hmos\userfs.img"/>
</Partition_Info>
镜像名称 | 起始地址 | 长度 |
u-boot-hi3516dv300.bin | 0x0 | 0x100000 |
OHOS_Image.bin | 0x100000 | 0x900000 |
rootfs.img | 0xa00000 | 0xf00000 |
userfs.img | 0x1900000 | 0x3200000 |
在烧录映像前,需要通过串口线、网线连接PC和单板,同时连接单板的电源线,保证单板可正常上电和通信。
HiTool工具烧写
HiTool是海思芯片的映像烧录工具,在映像烧录前,先选择对应的芯片,见下图:
映像烧录方法见下图:
1、PC与板端配置
本地PC配置:串口:设置单板和PC之间连接的串口号;服务器IP:设置PC的IP地址。
板端配置:IP地址:设置单板的IP地址 ;网关和子网掩码正常配置即可。
传输方式:选择网口,下载速度比较快。
2、烧写eMMMC
使用“浏览”选择分区表,选择需要烧录的映像,点击”烧写“。
3、上电
按照提示给单板重新上电。
注:在下载映像时,其它串口工具不能占用HiTool下载使用的串口。
IDE工具烧录
IDE工具烧录映像方法:
https://device.harmonyos.com/cn/docs/start/introduce/oem_camera_start_first_example-0000001051610926
其中“镜像烧写”详细介绍了烧录过程。
U-boot命令烧录
在U-boot命令行模式下,可以使用tftpboot进行映像文件下载,使用mmc write命令将映像保存到EMMC中。
由于tftpboot使用网络通信,需要先在PC端打开tftp工具,配置映像路径;然后在U-boot命令行模式下配置环境变量:ethaddr、ipaddr和serverip。
环境变量配置可参考“HiSpark AI Camera U-boot环境变量”。
U-boot映像下载:
hisilicon # tftpboot 0x80000000 u-boot-hi3516dv300.bin
Hisilicon ETH net controler
eth0 : phy status change : LINK=DOWN : DUPLEX=FULL : SPEED=100M
eth0 : phy status change : LINK=UP : DUPLEX=FULL : SPEED=100M
Using eth0 device
TFTP from server 10.20.16.12; our IP address is 10.20.16.110
Filename 'u-boot-hi3516dv300.bin'.
Load address: 0x80000000
Loading: #################
44.9 KiB/s
done
Bytes transferred = 237403 (39f5b hex)
hisilicon #
hisilicon # mmc write 0 0x80000000 0x0 0x1d0
MMC write: dev # 0, block # 0, count 464 ... 464 blocks written: OK
28.74 MB/s
tftpboot命令参数:
第一个参数0x80000000是下载U-boot映像的内存起始地址;第二个参数u-boot-hi3516dv300.bin是U-boot映像名。其他映像下载方法类似。
mmc write命令参数:
第一个参数0是mmc设备号;
第二个参数0x80000000是tftpboot下载U-boot映像的内存起始地址。
第三个参数0是U-boot映像保存在EMMC的起始地址/512;
第四个参数0x1d0是U-boot映像文件大小/512。
U-boot映像文件大小:建议在PC端右键U-boot映像,选择“属性”,使用“占用空间”大小。
注:如果没有Hitool工具,不建议更新U-boot映像,否则一旦出错,后果不堪设想。
内核映像下载:
hisilicon # tftpboot 0x80000000 OHOS_Image.bin
Hisilicon ETH net controler
eth0 : phy status change : LINK=DOWN : DUPLEX=FULL : SPEED=100M
eth0 : phy status change : LINK=UP : DUPLEX=FULL : SPEED=100M
Using eth0 device
TFTP from server 10.20.16.12; our IP address is 10.20.16.110
Filename 'OHOS_Image.bin'.
Load address: 0x80000000
Loading: #################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#############################
829.1 KiB/s
done
Bytes transferred = 5185276 (4f1efc hex)
hisilicon # mmc write 0 0x80000000 0x800 0x2790
MMC write: dev # 0, block # 2048, count 10128 ... 10128 blocks written: OK
37.65 MB/s
hisilicon #
在调试内核时,也可以不用写入到EMMC,直接使用go命令,进行内核映像加载(系统重启后,需要重新下载内核映像),命令如下:
hisilicon # tftpboot 0x80000000 OHOS_Image.bin
Hisilicon ETH net controler
eth0 : phy status change : LINK=DOWN : DUPLEX=FULL : SPEED=100M
eth0 : phy status change : LINK=UP : DUPLEX=FULL : SPEED=100M
Using eth0 device
TFTP from server 10.20.16.12; our IP address is 10.20.16.110
Filename 'OHOS_Image.bin'.
Load address: 0x80000000
Loading: #################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#############################
838.9 KiB/s
done
Bytes transferred = 5185276 (4f1efc hex)
hisilicon # go 0x80000000
Starting application at 0x80000000 ...
******************Welcome******************
Processor : Cortex-A7 * 2
Run Mode : SMP
GIC Rev : GICv2
build time : Sep 21 2020 19:13:35
Kernel : Huawei LiteOS 2.0.0.35/debug
rootfs.img和userfs.img下载方式类似,不再介绍。
U-boot启动信息
在空EMMC中烧录鸿蒙系统映像后,U-boot启动log如下:
System startup
Uncompress Ok!
U-Boot 2020.01 (Sep 01 2020 - 09:25:23 +0800)hi3516dv300
DRAM: MMC:
EMMC/MMC/SD controller initialization.
scan edges:2 p2f:6 f2p:1
mix set temp-phase 3
scan elemnts: startp:5 endp:123
Tuning Sampleclock. mix set phase:[04/07] ele:[2d/16]
MMC/SD Card:
MID: 0x15
Read Block: 512 Bytes
Write Block: 512 Bytes
Chip Size: 7456M Bytes (High Capacity)
Name: "8GTF4"
Chip Type: MMC
Version: 0.0
Speed: 100000000Hz
Bus Width: 4bit
himci: 0 (eMMC)
Loading Environment from MMC... *** Warning - bad CRC, using default environment
In: serial
Out: serial
Err: serial
Net: eth0
Error: eth0 address not set.
Hit any key to stop autoboot: 0
Error: "distro_bootcmd" not defined
hisilicon #
从上面log看出,U-boot直接进入命令行模式(出现hisilicon#提示),无法正常引导内核和文件系统。因此,需要重新配置U-boot环境变量bootargs和bootcmd。
注:出厂的单板已经配置过环境变量bootargs和bootcmd,系统可以正常启动,不会出现上面情况。
原创作者:田曙亮
👍👍👍
感谢大神,想请教下,如果这样子烧,就需要很长的时间,如果我只是添加application的一个小功能,可以只烧一个模块吗?