一、源码编译

本次源码编译使用Ubuntu20.0.4版本进行编译,硬件环境Win10,虚拟机配置8G内存、4核CPU(腾讯云服务器2G内存版本内存太小编译不通过)。

1、源码下载及基础软件配置参考Hi3516系列小型系统源码编译及烧录

编译好的固件: https://yunpan.midea.com/#/sharelist?sharekey=reuP4tpjqN

2、安装依赖工具(标准系统编译需要更多的依赖工具)

安装命令如下

sudo apt-get install binutils git-core git-lfs gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip m4 python2.7 python-minimal

注:python-minimal安装过程中失败,但其实编译未受影响

3、获取标准系统源码(获取方式和小系统一致,一套代码维护

4、获取prebuilts

切换到OpenHarmony工作目录。 cd OpenHarmony 下载脚本。

curl https://gitee.com/landwind/script-tools/raw/master/Shell/OpenHarmony/OpenHarmony_2.0_canary_prebuilts_download.sh >./prebuilts_download.sh

下载并解压prebuilts压缩包到指定位置。

bash ./prebuilts_download.sh

二进制默认存放在与OpenHarmony同目录下的OpenHarmony_2.0_canary_prebuilts下,如需修改默认位置,请编辑prebuilts_download.sh修改bin_dir值。

5、配置NodeJS环境和获取Node_modules依赖包

为了编译JS Framework,开发者需要在Linux服务器下载配置NodeJS(注意:步骤中OpenHarmony目录指代当前工程的根目录,可自定义),具体操作如下:

开发者在Linux服务器下载Nodejs。

mkdir -p OpenHarmony/prebuilts/build-tools/common/nodejs  #创建nodejs目录  
cd OpenHarmony/prebuilts/build-tools/common/nodejs        #进入nodejs目录
wget --no-check-certificate https://nodejs.org/download/release/v12.18.4/node-v12.18.4-linux-x64.tar.gz #下载nodejs
tar -zxvf node-v12.18.4-linux-x64.tar.gz                    #解压nodejs压缩包
cd -                                                        #切换到之前的目录 

配置NodeJS环境变量,下载node_modules包。

cd OpenHarmony/third_party/jsframework                 #进入jsframework目录
export PATH=../../prebuilts/build-tools/common/nodejs/node-v12.18.4-linux-x64/bin:${PATH} #设置NodeJS环境变量
npm install                                             #下载node_modules包
cd -                                                    #切换到之前的目录

把下载的node_modules包放入OpenHarmony代码的prebuilts/build-tools/common/js-framework目录下。

mkdir -p OpenHarmony/prebuilts/build-tools/common/js-framework      #创建js-framework目录
cp -rp OpenHarmony/third_party/jsframework/node_modules OpenHarmony/prebuilts/build-tools/common/js-framework/

6、开始编译

使用Docker环境的开发者可参照Docker使用指导进行编译。采用安装包方式的开发者在Linux环境进行如下操作。

进入源码根目录,执行如下命令进行版本编译。

./build.sh --product-name Hi3516DV300

{product_name}为当前版本支持的平台。

检查编译结果。编译完成后,log中显示如下:

copy modules...
[12937/12939] STAMP obj/build/ohos/packages/phone_install_modules.stamp
[12938/12939] STAMP obj/build/ohos/packages/make_packages.stamp
[12939/12939] STAMP obj/build/core/gn/packages.stamp
used: 3591 seconds
pycache statistics
manage pycache contents
pycache daemon exit
c targets overlap rate statistics
subsystem files NO. percentage builds NO. percentage overlap rate
third_party 4579 60.3% 4740 61.2% 1.04
aafwk 107 1.4% 107 1.4% 1.00
account 13 0.2% 13 0.2% 1.00
ace 765 10.1% 765 9.9% 1.00
appexecfwk 234 3.1% 234 3.0% 1.00
communication 323 4.3% 323 4.2% 1.00
developtools 65 0.9% 65 0.8% 1.00
distributeddatamgr 286 3.8% 286 3.7% 1.00
distributedschedule 27 0.4% 27 0.3% 1.00
global 17 0.2% 17 0.2% 1.00
graphic 33 0.4% 33 0.4% 1.00
hdf 43 0.6% 43 0.6% 1.00
hiviewdfx 98 1.3% 98 1.3% 1.00
miscservices 5 0.1% 5 0.1% 1.00
multimedia 38 0.5% 38 0.5% 1.00
multimodalinput 29 0.4% 29 0.4% 1.00
notification 37 0.5% 37 0.5% 1.00
powermgr 48 0.6% 48 0.6% 1.00
security 169 2.2% 169 2.2% 1.00
startup 51 0.7% 51 0.7% 1.00
telephony 200 2.6% 200 2.6% 1.00
updater 85 1.1% 85 1.1% 1.00
utils 211 2.8% 211 2.7% 1.00
wpa_supplicant-2.9 103 1.4% 103 1.3% 1.00
 
c overall build overlap rate: 1.02
 
 
post_process
build_target=''
/home/ubuntu/harmonyos/OpenHarmony/out/ohos-arm-release/packages/phone/images/root /home/ubuntu/harmonyos/OpenHarmony
/home/ubuntu/harmonyos/OpenHarmony
build vendor image successful.
build system image successful.
build userdata image successful.
ohos_build_out_dir = /home/ubuntu/harmonyos/OpenHarmony/out/ohos-arm-release/packages/phone
build updater image successful.
=====build Hi3516DV300 successful.
2021-07-10 11:45:59
++++++++++++++++++++++++++++++++++++++++
root@ubuntu:/home/ubuntu/harmonyos/OpenHarmony#

编译所生成的文件都归档在out/ohos-arm-release/目录下,结果镜像输出在 out/ohos-arm-release/packages/phone/images/ 目录下。

二、烧录

Hi3516系列支持串口、USB、网线三种方式烧录,但是USB、网线烧录都需要同时连上串口;串口烧录太慢(不推荐),USB烧录没有成功。

刷机包可以从论坛已经编译好的镜像下载体验

https://pan.baidu.com/s/1rGf75ifUCRZ1btJjsKkiCw 提取码:ohos

1、请连接好电脑和待烧录开发板,以Hi3516DV300为例,需要同时连接串口、网口和电源;

image.png

2、打开电脑的设备管理器,查看并记录对应的串口号;

image.png

3、将网线连接电脑,更改电脑IP地址

image.png

4、打开DevEco Device Tool,创建一个新工程

image.png 选择开发版芯片为Hi3516DV300,工程名自取,组件选为无;

image.png

5、在Projects中,点击Settings打开工程配置界面

image.png

6、在Partition Configuration页签中,按照下表内容填写烧录文件信息,包括:

Name Binary Memory System Address Length Board Type
fastboot 选择“u-boot-hi3516dv300_emmc.bin” emmc none 0x000000 0x100000 固定选择“hi3516dv300” NA
boot 选择“uImage” emmc none 0x100000 0xf00000 NA
updater 选择“updater.img” emmc ext3/4 0x1000000 0x1400000 NA
misc 空白,不用选择 emmc none 0x2400000 0x100000 NA
system 选择“system.img” emmc ext3/4 0x2500000 0xceb00000 NA
vendor 选择“vendor.img” emmc ext3/4 0xd1000000 0x10000000 NA
userdata 选择“userdata.img” emmc ext3/4 0xe1000000 0x5b800000 NA

7、在“hi3516dv300”页签,设置烧录选项,包括upload_port、upload_partitions和upload_protocol

  • upload_port:选择步骤2中查询的串口号。
  • upload_protocol:选择烧录协议,固定选择“hiburn-net”。
  • upload_partitions:选择待烧录的文件,包括fastboot、boot、updater、misc、system、vendor和userdata。 注意upload_partitions,需要烧录几个就选择几个,如果是第一次从小系统,烧录到标准系统需要全部烧录;

8、设置网口烧录的IP地址信息,设置如下选项:

  • upload_net_server_ip:选择步骤3中设置的IP地址信息。例如192.168.1.2
  • upload_net_client_mask:设置开发板的子网掩码,工具会自动根据选择的upload_net_server_ip进行设置。例如255.255.255.0
  • upload_net_client_gw:设置开发板的网关,工具会自动根据选择的upload_net_server_ip进行设置。例如192.168.1.1
  • upload_net_client_ip:设置开发板的IP地址,工具会自动根据选择的upload_net_server_ip进行设置。例如192.168.1.3

9、所有的配置都修改完成后,在工程配置页签的顶部,点击Save进行保存。

10、擦除fastboot

image.png

Windows上擦除成功之后,可能无法继续烧录,可以使用Hitools工具烧录 image.png

11、开始烧录,点击Upload直接开始烧录

image.png 12、出现下面提示后,断开电源再上电,重新上电后会开始传输数据开始烧录 image.png image.png

13、大概十分钟左右烧录成功 image.png

烧录成功会直接开机,标准系统样式如下 image.png

三、烧录过程中遇到的问题

1、标准系统更新系统烧录不能点亮屏幕,启动日志如下,这是因为烧录系统时,没有擦除fastboot导致的;

解决方案:先擦除fastboot,然后再进行烧录;如果擦除后不能烧录,可以参考下面第二点解决方案;

@@@ bootArgs from misc       = mem=640M console=ttyAMA0,115200 mmz=anonymous,0,0xA8000000,384M clk_ignore_unused androidboot.selinux=permissive skip_initramfs rootdelay=10 init=/init root=/dev/mmcblk0p5 rootfstype=ext4 rw blkdevparts=mmcblk0:1M(boot),15M(kernel),20M(updel),20M(updater),1M(misc),3307M(system),256M(vendor),-(userdata)
@@@ bootArgs final from emmc = console=ttyAMA0,115200n8 root=emmc fstype=vfat rootaddr=10M rootsize=20M rw
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.20 MB/s
## Booting kernel from Legacy Image at 80000000 ...
   Image Name:   Linux-4.19.155
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    4892948 Bytes = 4.7 MiB
   Load Address: 80008000
   Entry Point:  80008000
   Loading Kernel Image
 
Starting kernel ...

2、烧录过程中擦除fastboot之后,不能继续烧录,如果想恢复原来系统,可以重新烧录fastboot来恢复系统;

a、使用hitool烧写

image.png

b、使用DevEco Device Tool烧写(只选择烧录fastboot)

image.png

小型系统初次启动或修改启动参数都需要修改U-boot的bootcmd及bootargs内容(具体参考OpenHarmony小型系统源码及烧录

3、Hi3516开发版硬件注意事项

1、hi3516开发版有两个USB口,均可以供电

2、如使用电源供电,注意电源开关,在使用过程中发现电源按钮变化(以前是按下供电,后面变成松开供电)

由于开发版硬件缺陷没有指示灯指示是否已经上电,可以通过Monitor来验证,打开Monitor后观察打开开关之后是否有日志信息;

image.png

想了解更多关于鸿蒙的内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com/#bkwz

21_9.jpg