目录

问题的由来

烧写问题

启动问题

总结


问题的由来

润和HarmonyOS鸿蒙开发板 HiSpark AI Camera开发套件(下图)是OpenHarmony的小型设备和标准设备的代表,基于华为海思Hi3516DV300芯片,支持Linux、LiteOS、鸿蒙OS,实现图像采集识别。OpenHarmony的ipcamea_hispark_taurus、ipcamera_hispark_taurus_linux和hispark_taurus_standard都是针对这款板子设计的。

润和还有另一套开发板Taurus HCIP 认证套件(下图),这款开发板的配置和AI Camera开发套件非常类似,板子上甚至印着AI Camera 2.0的字样。两个开发板有一个明显的区别:AI Camera开发套件是由4块小板组成的,而HCIP 认证套件是由一块开发板组成的。

在润和的网站上,只有AI Camera开发套件的技术资料,而没有 HCIP 认证套件的资料。原本我们认为两块开发板只是结构上的不同,两块板子的程序是兼容的。但是在测试中我们发现其实两块板子还是有一些差别的,在华为和润和工程师的帮助下,终于使OpenHarmony的程序在HCIP 认证套件上运行了起来,今天把相关的过程记录一下。

烧写问题

刚开始我们下载了OpenHarmony 3.1的官方代码,编译之后直接使用DevEco Device Tool进行烧写,发现烧写失败,采用Hitool烧写,发现也是失败的。失败的现象在我的另一篇博客中有详细说明。之所以会出现烧写失败,是因为官方代码中的U-Boot在HCIP 认证套件上会死机,无法启动,而海思的镜像烧写工具是先烧写U-Boot,然后启动U-Boot,再利用U-Boot的mmc write烧写其他的分区。U-Boot无法启动就意味着烧写不会成功。在另一篇博客中也说了,利用厂商提供的u-boot_hi3516_ytb_3.1.bin文件替代官方的UBoot文件,就可以正常启动U-Boot并烧写成功其他分区的镜像。

启动问题

我们使用厂商提供的U-Boot和Linux镜像对硬件进行了测试,发现其功能基本正常。然后就编译了ipcamea_hispark_taurus,这是基于LiteOS-A的小型设备代码,但是发现烧写后的程序无法启动,问题如下:

System startup

Uncompress Ok!

U-Boot 2020.01 (Nov 09 2022 - 11:01:28 +0800)hi3516dv300

DRAM:  MMC:   
EMMC/MMC/SD controller initialization.
scan edges:2 p2f:6 f2p:8
mix set temp-phase 3
scan elemnts: startp:117 endp:107
Tuning SampleClock. mix set phase:[03/07] ele:[7d/15]
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

EMMC/MMC/SD controller initialization.
Card did not respond to voltage select!
mmc_init failed! err:-95
No SD device found !
himci: 0 (eMMC), himci: 1
Loading Environment from MMC... OK
In:    serial
Out:   serial
Err:   serial
@@@ 5 blocks read: OK
@@@ g_isRecovery = 0
@@@ bootArgs from misc       = mem=640M console=ttyAMA0,115200 mmz=anonymous,0,0xA8000000,384M clk_ignore_unused androidboot.selinux=permissive skip_initramfs rootdelay=10 hardware=Hi3516DV300 default_boot_device=soc/10100000.himci.eMMC init=/init root=/dev/ram0 blkdevparts=mmcblk0:1M(boot),15M(kernel),20M(updater),2M(misc),3307M(system),256M(vendor),-(userdata)
@@@ 1 blocks read: OK
@@@ bootArgs final from emmc = console=ttyAMA0,115200n8 root=emmc fstype=vfat rw rootaddr=10M rootsize=30M
Unable to use mmc for fat
Net:   eth0
Error: eth0 address not set.

Hit any key to stop autoboot:  0 

MMC read: dev # 0, block # 2048, count 18432 ... 18432 blocks read: OK
45.27 MB/s
Wrong Image Format for bootm command
ERROR: can't get kernel image!
hisilicon # 

从日志可以看出,U-Boot启动后无法加载内核镜像,显示“Wrong Image Format for bootm command”。

经过与厂商的讨论和反复尝试,厂商提供的u-boot_hi3516_ytb_3.1.bin是用于ipcamera_hispark_taurus_linux(Linux内核),u-boot-hi3516dv300-4L.bin用于ipcamea_hispark_taurus(LiteOS-A内核)。之所以会出现这个问题,是因为两个U-Boot版本所支持的分区格式不同,u-boot_hi3516_ytb_3.1.bin无法识别LiteOS-A所使用的vfat格式。

除了u-boot,其他模块都是用官方代码编译的。

总结

AI Camera开发套件和 HCIP 认证套件虽然非常相似,但是现在看还是有一些重要的区别导致U-Boot不兼容。当初采购 HCIP 认证套件是因为它便宜300块钱,但是没有想到遇到这么多麻烦。厂商的技术人员平时都是使用ipcamera_hispark_taurus_linux,所以他们对ipcamea_hispark_taurus也不太熟悉,所以我们以后的工作也会主要基于ipcamera_hispark_taurus_linux,否则出了问题,厂商也不能提供有力的支持。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐