如果有问题,请加QQ群 891339868 进行交流
鸿蒙1.0已经开源一年多了,现在已经发展到了1.1.0LTS版本,一直想玩玩儿,现在终于有时间了,目前openharmony1.1.0支持hi3516dv300、hi3518ev300、hi3861,手里正好有一个原来买的荣品的hi3516dv300的板子,说来惭愧,本来去年要学习海思平台的MPP的,刚买了个板子,华为就被美国制裁了,海思平台短时间内缺货的不行,想想海思平台以后估计不行了,就转投RK了,这个板子就扔那落灰了。现在正好可以学学鸿蒙,废话少说,开工。
首先去下载openharmony源码,在gitee仓库里面直接可以下载,openharmony项目的主页是OpenHarmony: OpenHarmony是由开放原子开源基金会(OpenAtom Foundation)孵化及运营的开源项目,目标是面向全场景、全连接、全智能时代,搭建一个智能终端设备操作系统的框架和平台,促进万物互联产业的繁荣发展。,源码下载页是https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/get-code/%E6%BA%90%E7%A0%81%E8%8E%B7%E5%8F%96.md,到底是国产系统,使用国产仓库平台,比github快多了,我是直接下载了v1.1.0的全量代码,解压后,先看一下文件夹结构,如下图所示:
和3516先关的配置和默认的镜像文件在device文件夹里面,具体的路径为/device/hisilicon/hispark_taurus/sdk_liteos/uboot,uboot的源码在/device/hisilicon/third_party/uboot/u-boot-2020.01,在openharmony官方的文档中介绍说: Hi3516DV300单板的U-boot文件获取路径:device/hisilicon/hispark_taurus/sdk_liteos/uboot/out/boot/u-boot-hi3516dv300.bin,找到这个文件夹,嗨,还真有这个文件,二话不说,先把这个镜像烧进板子再说,openharmony的官方文档推荐的使用vs code 加 deveco device tool插件进行烧写,这种方式搞了好久,也没成功,而且还让身体的某个部位疼,最后没有办法,使用海思的hitool,可是烧录成功后,总是启动不起来,总是提示这个:
但是使用荣品提供的sdk里面uboot镜像是可以启动的,估计是配置的问题,最后发现是寄存器配置文件的问题,咋发现的呢?首先看一下openharmony里面的uboot的makefile文件,具体的路径在/device/hisilicon/hispark_taurus/sdk_liteos/uboot/Makefile:
##########################################################################################
# prepare param
##########################################################################################
export OSDRV_DIR=$(shell pwd)
export OSDRV_CROSS
export CHIP?=hi3516dv300
export ARCH=arm
export CROSS_COMPILE=$(OSDRV_CROSS)-
BOOT_MEDIA?=emmc
ifneq ($(BOOT_MEDIA),spi)
ifneq ($(BOOT_MEDIA),emmc)
$(error you must set valid BOOT_MEDIA:spi or emmc!)
endif
endif
ifeq ($(OSDRV_CROSS), )
OSDRV_CROSS=arm-none-eabi
#OSDRV_CROSS=$(OSDRV_DIR)/../../../../../prebuilts/gcc/linux-x86/arm/gcc-arm-none-eabi-7-2017-q4-major/bin/arm-none-eabi
endif
UBOOT_VER:=u-boot-2020.01
UBOOT_TAR:=$(UBOOT_VER).tgz
UBOOT:=u-boot-$(CHIP).bin
UBOOT_REG_BIN:=reg_info_$(CHIP).bin
ifeq ($(BOOT_MEDIA),emmc)
export UBOOT_CONFIG:=$(CHIP)_$(BOOT_MEDIA)_smp_config
else
export UBOOT_CONFIG:=$(CHIP)_smp_config
endif
NORMAL_UBOOT_DIR:=$(OSDRV_DIR)/../../../third_party/uboot
##########################################################################################
# set task
##########################################################################################
all: prepare hiboot hipctools build_done
clean: hiboot_clean hipctools_clean
distclean: clean pub_clean clean_done
##########################################################################################
##task [0] prepare out directory
##########################################################################################
prepare:
@echo "------- task [0] prepare out dir -------"
mkdir $(OSDRV_DIR)/out/boot -p
##########################################################################################
#task [1] build uboot
##########################################################################################
hiboot:
@echo "---------task [1] build boot"
find $(NORMAL_UBOOT_DIR)/$(UBOOT_VER) | xargs touch
make -C $(NORMAL_UBOOT_DIR)/$(UBOOT_VER) ARCH=arm CROSS_COMPILE=$(OSDRV_CROSS)- $(UBOOT_CONFIG)
pushd $(NORMAL_UBOOT_DIR)/$(UBOOT_VER);make ARCH=arm CROSS_COMPILE=$(OSDRV_CROSS)- -j 20 >/dev/null;popd
chmod +x $(NORMAL_UBOOT_DIR)/$(UBOOT_VER)/arch/arm/cpu/armv7/$(CHIP)/hw_compressed/gzip
cp $(OSDRV_DIR)/reg/$(UBOOT_REG_BIN) $(NORMAL_UBOOT_DIR)/$(UBOOT_VER)/.reg
pushd $(NORMAL_UBOOT_DIR)/$(UBOOT_VER);make ARCH=arm CROSS_COMPILE=$(OSDRV_CROSS)- u-boot-z.bin >/dev/null;popd
cp $(NORMAL_UBOOT_DIR)/$(UBOOT_VER)/u-boot-$(CHIP).bin $(OSDRV_DIR)/out/boot
cp $(NORMAL_UBOOT_DIR)/$(UBOOT_VER)/u-boot-$(CHIP).bin $(OSDRV_DIR)/secureboot_release
hiboot_clean:
@cd $(NORMAL_UBOOT_DIR)/$(UBOOT_VER)/;make distclean
@echo "---------boot clean"
##########################################################################################
##task [2] make hipctools
##########################################################################################
hipctools:prepare
@echo "---------task [2] build tools run on pc"
hipctools_clean:
##########################################################################################
#task [4] clean out
##########################################################################################
pub_clean:
rm $(OSDRV_DIR)/out/* -rf
build_done:
@echo "------- osdrv build done -------"
clean_done:
@echo "------- clean done -------"
其中的一行和寄存器相关:cp $(OSDRV_DIR)/reg/$(UBOOT_REG_BIN) $(NORMAL_UBOOT_DIR)/$(UBOOT_VER)/.reg,把所有的变量展开后,其实是cp /device/hisilicon/hispark_taurus/sdk_liteos/uboot/reg/reg_info_hi3516dv300.bin /device/hisilicon/third_party/uboot/u-boot-2020.01/.reg,其实就是将reg_info_hi3516dv300.bin这个配置文件放到uboot的源码中,并且改名为.reg,说实话,第一次搞海思平台的底层,和新塘、rk、全志之类的还真不太一样。我猜测估计是这里的问题,所以就将荣品提供的sdk里面的uboot源码中的.reg文件改为reg_info_hi3516dv300.bin,并且放到openharmony源码的/device/hisilicon/hispark_taurus/sdk_liteos/uboot/reg/里面,前提是要将原来的文件备份,接着直接在/device/hisilicon/hispark_taurus/sdk_liteos/uboot这个文件夹里面make,最后在/device/hisilicon/hispark_taurus/sdk_liteos/uboot/out/boot里面生成u-boot-hi3516dv300.bin这个文件,再通过hitool烧写,试一下,果然成功了:
看一下串口打印信息:
可以看到烧写的是2020.01版本的uboot,是openharmony里面配套的,好了,今天就记录到此吧