[]【HarmonyOS HiSpark AI Camera试用连载 】HiSpark AI Camera(Hi3516DV300)镜像烧录——两种方式

阅读量0
0
1


源码编译完成之后,便开始进行烧录了。这里介绍两种方式:一种是使用HiTool烧写,另一种是uboot下手动烧写。

先介绍第一种烧写方式:使用HiTool烧写。
在Windows 10 环境中,在润和官网(http://hihope.org/download/AllDocuments)下载HiTool(别处随意下载的不一定可靠,导致烧录失败,当心!),直接双击运行。
start.jpg

点击HiBurn;
1.jpg

选择芯片型号。点击“芯片”—>“切换芯片”—>“Hi3516DV300”,即HiSpark AI Camera开发板的SOC型号;
2.jpg

选择传输方式。这里推荐使用比较便捷的网口(注意防火墙,否则会导致板子tftp无法获取镜像,即超时TTTTT...);参数配置如图所示;其中:
本地PC配置:服务器IP为Windows 10的以太网网卡地址;
板端配置:IP地址为开发板网卡地址;
确保PC和开发板同处于同一局域网内,这里的网关是192.168.1.1。
3.jpg

分区烧写。
根据HiSpark AI Camera开发板的硬件参数选择“烧写eMMC”。
但是,注意一点,如果有些发烧友是第一次烧录,经验正在“大幅提升中”,而开发板已经能正常启动,这种情况下保险起见,暂时不要烧写fastboot,以免失败变砖。
点击绿色按钮“+”添加其他分区:kerne、rootfs、userfs,并勾选。
此处直接选择虚拟机 Ubuntu 16中通过Samba共享的编译出的镜像。
关于分区的划分,根据开发板资源以及编译出来的镜像大小,确定开始地址、长度如图所示。
4.jpg

开始烧录,点击“烧写”。
5.jpg

注意“控制台”窗口提示:串口已经连接,请给单板上电,若已经上电,请断电后重新上电。
此时需要给开发板上电或重新上电;
如果上电操作不及时、串口或其他端口为正确连接,若干秒后则会出现下载失败提示;
5-1.jpg

如果以上操作无误,则会开始执行烧写;直到烧写完成。
6.jpg
7.jpg

烧写完成后,HiTool自动reset开发板。注意观察开发板运行情况。


在此提醒注意两大坑:
一、全擦后默认环境变量只有bootcmd=distro_bootcmd,没有定义distro_bootcmd和bootargs,导致无法引导内核,
此时需要手动修改bootcmd(或添加distro_bootcmd定义 setenv distro_bootcmd xxx)和添加bootargs;
二、用HiTool烧写后,环境变量bootargs中分区要与HiTool中配置的一致,否则导致无法挂载文件系统;

========================================================
接下来介绍另一种烧写方式:uboot下手动烧写——通过tftp方式获取服务器上镜像。

通过开发板DEBUG串口监控运行情况,在uboot启动倒计时阶段按任意键或Ctrl+C中止倒计时。
查看开发板参数:hisilicon # pri
arch=arm
baudrate=115200
board=hi3516dv300
board_name=hi3516dv300
bootargs=console=ttyAMA0,115200n8 root=emmc fstype=vfat rootaddr=10M rootsize=15M rw
bootcmd=sf probe 0;mmc read 0x0 0x80000000 0x800 0x4800; go 0x80000000
bootdelay=2
cpu=armv7
ethact=eth0
soc=hi3516dv300
stderr=serial
stdin=serial
stdout=serial
vendor=hisilicon
verify=n

Environment size: 339/262140 bytes


配置网络参数,执行:
setenv gatewayip 192.168.1.1
setenv ipaddr 192.168.1.110
setenv serverip 192.168.1.145
setenv ethaddr 3a:9f:84:78:5A:A8
save
重启:reset
ping测试:
hisilicon # ping 192.168.1.145
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
host 192.168.1.145 is alive
说明网络配置已经OK。
确保宿主机Ubuntu服务器端的tftp服务配置完成,将准备烧写的镜像文件拷贝到tftp共享目录下,便可以在开发板上通过tftp下载各个镜像文件到RAM中,继而写入emmc。

这里需要使用mmc命令来完成emmc的读写操作,其中:
mmc list:用来查看mmc中设备分区情况;
        mmc list
mmc erase:擦除mmc
        mmc erase blk# cnt
mmc write:写入内存数据到mmc中:
        mmc write <device num> addr blk# cnt [partition]
mmc read:读取mmc数据到内存中:
        mmc read <device num> addr blk# cnt [partition]
参数:
        device num:是mmc的设备号,可以通过mmc list查询
        addr:是内存地址
        blk# 是mmc内的块号
        cnt:块数目
对于eMMC,“512B/sector”——即块(扇区)大小为512字节。则:
        blk * 512 即是在eMMC中的偏移地址,亦即镜像起始地址。
        cnt * 512 即是镜像的大小。

使用范例:
mmc write 2 0x90000000 0x600 0x10
把内存0x90000000开始,长度为(0x10)x512大小的数据,写入到第2个mmc设备块偏移位置为0x600处

mmc read 2 0x90000000 0x600 0x10
把第二个mmc设备块偏移为0x600处开始,长度为(0x10)x512大小的数据,读出到内存0x90000000处

根据此开发板emmc以及编译出来的镜像大小,确定镜像存储的开始地址、长度(这里选择与HiTool烧录时的配置保持一致)。演示如下。
首先,在这里详解kernel镜像的下载与写入分区。
下载kernel镜像:tftp 0x81000000 OHOS_Image.bin
hisilicon # tftp 0x81000000 OHOS_Image.bin
Hisilicon ETH net controler
eth0 : phy status change : LINK=UP : DUPLEX=FULL : SPEED=100M
Using eth0 device
TFTP from server 192.168.1.145; our IP address is 192.168.1.110
Filename 'OHOS_Image.bin'.
Load address: 0x81000000
Loading: ################################################################
################################################################
################################################################
################################################################
################################################################
################################################################
################################################################
################################################################
################################################################
################################################################
################################################################
################################################################
################################################################
################################################################
################################################################
          #####################################
         402.3 KiB/s
done
Bytes transferred = 5177028 (4efec4 hex)

擦除kernel分区:mmc erase 0x800 0x4800
hisilicon # mmc erase 0x800 0x4800

MMC erase: dev # 0, block # 2048, count 18432 ... 18432 blocks erased: OK
291.52 MB/s

写入kernel镜像到分区:mmc write 0 0x81000000 0x800 <镜像实际大小>
关于镜像实际大小:即tftp下载的镜像实际大小除以512,有余数则加1(保证写入镜像的完整性),
拿上述tftp下载举例:5177028÷512≈10111.3828125,则取值10112,转十六进制为0x2780。
hisilicon # mmc write 0 0x81000000 0x800 0x2780

MMC write: dev # 0, block # 2048, count 10112 ... 10112 blocks written: OK
37.04 MB/s

然后,同样的步骤操作rootfs和userfs:
tftp 0x81000000 rootfs.img
mmc erase 0x5000 0x7800
mmc write 0 0x81000000 0x5000 0x700E

tftp 0x81000000 userfs.img
mmc erase 0xC800 0x19000
mmc write 0 0x81000000 0xC800 0x19000

烧录完毕,重启开发板即可:
reset
(完毕)
网络下载tftp超时.jpg

回帖

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
链接复制成功,分享给好友