#2020征文-开发板# 基于Hi3861平台的 HarmonyOS Device开发体验

"剩蛋老人"哼着”金顾拜“来了HarmonyOS Device 开发体验python

 你们好,我是游手好闲的非著名 Copy 攻城狮,此篇应是 Copy 攻城狮 2020 年最后一个”Hello,World“--基于 Harmony OS 的 Hi3861 开发板进行物联网应用开发实战。Copy 攻城狮的“Hello World”之路历来都不是一路顺风的,这次尝试开(拷)发(贝)物联网应用也走了很多弯路,最后终于跑通了蜂鸣器版的《Jingle Bells》,预祝你们新年快乐!linux

 

目录:git

环境搭建篇sql

开发调试篇编程

实战应用篇bootstrap

后记vim

 

环境搭建篇浏览器

编程界有个传承了几十年的”规矩“--入门先从环境搭建开始,有的时候环境搭建比较简单,好比学习 HTML 编程,有浏览器就行;有时候又比较繁琐,好比 React Native 开发,须要安装 NodeJS、Python、Java、Android SDK……而 HarmonyOS Device 开发属于后者,环境搭建比较繁琐,好比须要 Linux 系统进行编译,烧录到设备时又须要用到 Windows。若是您还想体验 Wifi 模组或者“碰一碰”等其余功能,还须要提供热点及其余设备。HarmonyOS 官方提供了详细的环境搭建文档以及 Hi3861 开发板介绍理论上跟着文档走一遍就能正常运行“Hello,HarmonyOS Device”。bash

HarmonyOS Device开发环境搭建

尽管如此,不过每一个人的开发习惯或者工具口味不同,所以在实际搭建环境的时候仍是会和官方文档有些不同的地方。因为手头有点乞丐版的云主机资源,所以我选择将他们派上用场,用 Linux 的云主机做为编译机,在本地的 Window 10 电脑上安装 SFTP Drive 将 Linux 云主机挂载到本机,使得烧录的时候能直接读取到 Linux 上的文件;经过 VSCode 的 Remote SSH 扩展以及 HUAWEI DevEco Device Tool 扩展来开发调试代码,此外经过某大佬分享的 sscom 串口调试工具进行更加便捷的调试。若是您刚好和我同样的状况,或者您也想尝试一下个人搭建思路,那咱们就开始吧!网络

 

1. Windows 环境(开发、调试、烧录)

 

在 Windows 上,由于涉及到开发调试,所以咱们须要安装 VS Code 及扩展(也就是插件)、SFTP Drive(烧录时用来直接访问 Linux 上的文件)、CH341SER.EXE(USB 转串口驱动)、sscom(可选,方面链接串口调试)。我这边本地已经安装了 VS Code 就不过多赘述,相信你们都安装了,从我接触过的几个软硬件开发教程都推荐安装 VS Code,真香!

 

1.1 Remote - SSH和 SFTP Drive

可能你们会有疑问,这两个玩意都是访问远程主机上文件的,装一个就好了吧?刚开始我也有一样的想法,后来在实操中发现:若是只安装 Remote - SSSH,烧录配置时没法读取远程文件;若是只安装 SFTP Drive,在编辑代码时访问远程文件很是慢;在座的给位大佬有好的方案的话必定要传授一下哦。我这里安装的是 Remote - SSH,若是您想体验更多的功能,能够直接安装 Remote Development,Remote 系列是巨硬公司针对远程开发而开发的扩展。安装完 Remote - SSH 以后,为了免密码登陆 Linux(有风险需谨慎),咱们须要操做一下 SSH 密钥配置。HarmonyOS Devic环境搭建-Remote 和 SFTP Drive]
在 VSCode 的 Remote 扩展和 SFTP Drive 中先经过帐号密码访问远程主机,确保能正常访问到 Linux 主机中的代码和文件。

SSH 密钥配置的时候,咱们能够在远程主机上生成密钥,也能够在本机生成密钥,最终将配置关联就能够。咱们这里采用的是 Windows 机使用 PowerShell 执行`ssh-keygen`生成密钥到文件`C:\Users\您的用户名\.ssh\id_rsa`(私钥),同时会生成文件`C:\Users\您的用户名\.ssh\id_rsa.pub`(公钥),经过 SFTP Drive 拷贝公钥到远程主机的`~/.ssh`目录,在 VSCode 中链接远程主机执行命令`cat id_rsa.pub >> authorized_keys`追加到 authorized_keys 中,因为我本机已经有了公钥私钥,直接拿来用便可。
此步需注意的是:

cd ~/.ssh
cat id_rsa.pub >> authorized_keys #追加公钥
sudo chmod 600 authorized_keys
sudo chmod 700 ~/.ssh #文件及文件夹加权限
sudo vim /etc/ssh/sshd_config #准备修改sshd配置
# PubkeyAuthentication yes 确保此处注释放开
sudo service sshd restart #重启sshd

HarmonyOS Devic环境搭建-Remote免密登陆

完事以后关闭 VSCode 再打开,不出意外再链接远程主机就不须要输入访问密码了,完全告别每次链接都要输密码的烦恼。

 

1.2 HUAWEI DevEco Device Tool 及依赖安装

HUAWEI DevEco Device Tool能够理解为是 HarmonyOS Device 的开发工具,“HarmonyOS 智能设备一站式集成开发环境,支持 HarmonyOS 组件按需定制、一键编译和烧录、可视化调试、分布式能力集成等,帮助开发者高效开发和创新新硬件”。

官网:https://device.harmonyos.com/cn/ide目前只支持 Windows,这也是为何咱们须要用到 Windows 本机的缘由!另外 HUAWEI DevEco Device Tool 没有上架到 VSCode 扩展市场,只能经过**从 VSIX 安装**的方式进行安装,也就是说咱们须要解压从官网下载的安装包,另外将`.vsix`文件后缀修改成`.zip`解压有惊喜哦 -- 在 DevEcoDeviceTool/extension/deveco/tool 您能获得 HiBurn.exe ,这个程序就能够用来烧录(至关于不使用 VSCode 的扩展在程序中配置烧录参数直接烧录)。

HarmonyOS Devic环境搭建-从DevEco Device Tool得到HiBurn.exe

根据官方文档的指引,咱们还须要:

- 安装 Node.js(尽可能别装最新的)
- 安装 JDK
- 安装 hpm
- 安装 VSCode C/C++扩展
- 安装 CH341SER.EXE
- 安装 Jlink 工具(可选,V6.54c 及以上版本)
- 安装 hcc_riscv32(这个我没装成功,因此调试全靠手打)

鉴于前期跑过“Hello, HarmonyOS”(所以才得到的开发板),大部分环境我都有,不过在安装 Jlink 工具的时候卡了好久,主要是网络的问题,致使下载的文件不全,好在千方百计终于下好了,又在安装 hcc_riscv32 时卡住了,幸亏不是关键,索性放弃!……费了九牛二虎之力,终于完成 Windows 部分的环境搭建,能够直接烧录别人编译好的程序了!

HarmonyOS Devic环境搭建-Windows环境搭建完毕

 2. Linux 环境(编译)

 

相比 Windows 环境,HarmonyOS Device Linux 的环境搭建显得微不足道,跟着文档走一遍就完事了。不过,通过实操,若是您是 Ubuntu 18.04,我更加推荐润和许老师的文档--Harmony OS 开发指南——源码下载和编译。若是您和我同样还想尝试一下在 CentOS 上搭建环境,那就推荐鸿蒙社区的文章--在 CentOS 中安装鸿蒙 LiteOS 编译环境-海思 Hi3861,一样的也只取我须要的--我只须要编译部分的环境搭建。个人云主机操做系统是 CentOS 7.6 64 位,和博主的大同小异,按照文章中的命令行逐个敲完再去编译就一把过。

HarmonyOS Devic环境搭建-编译成功

老话说得好:"If I have seen further, it is by standing upon the shoulders of giants",因而我结合许老师和社区文章完成了 HarmonyOS 在 CentOS 上的编译环境搭建。

 

2.1 源码获取(其中的一种方法)

 

```bash
# 配置repo工具
mkdir ~/bin/
# sudo apt install curl # 若是没有curl命令须要先下载
curl https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > ~/bin/repo
chmod +x ~/bin/repo
echo 'export PATH=~/bin:$PATH'  >> ~/.bashrc
source ~/.bashrc
```

HarmonyOS Devic环境搭建-配置repo工具

```bash
# 下载Harmony OS源码
mkdir -p ~/harmonyos/openharmony && cd ~/harmonyos/openharmony
sudo apt install --no-install-recommends git python # repo工具自己是python脚本,它会调用git命令下载单个代码仓
# 开始前须要配置`user.name`和`user.email`,若是没有配置,使用以下命令进行配置:
# git config --global user.name "yourname"
# git config --global user.email "your-email-address"
repo init -u https://gitee.com/openharmony/manifest.git -b master --no-repo-verify
repo sync -c  # 之后天天同步远程仓的修改,只须要执行这一条命令便可
```

HarmonyOS Devic环境搭建-下载Harmony OS源码

2.2 安装编译基础环境

依赖 Python 3.7+ 以及SCons安装,我这里经过自行编译安装的 Python 3.9.0。

```bash
# 下载Python源码包
wget https://www.python.org/ftp/python/3.9.0/Python-3.9.0.tgz
# 解压源码包
tar -xzvf Python-3.9.0.tgz
# 安装依赖
yum groupinstall -y "Development tools"
yum install -y openssl-devel
yum install -y libffi libffi-devel
yum install -y bzip2-devel
yum install -y sqlite-devel
yum install -y readline-devel
yum install -y libuuid-devel
yum install -y uuid-devel
yum install -y xz-devel
yum install -y gdbm-devel
yum install -y tk-devel
# 配置编译
cd Python-3.9.0
./configure --prefix=/usr/local/python3
# 编译Python
make -j8 && make install
# 建立软连接
ln -s /usr/local/python3/bin/python3 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
# 验证
python3 --version
pip3 --version
# 安装编译时需依赖的Python 3组件
pip3 install setuptools
pip3 install kconfiglib
pip3 install pycryptodome
pip3 install six --upgrade --ignore-installed six
pip3 install ecdsa
```

HarmonyOS Devic环境搭建- Python 3 环境

```bash
# 下载SCons源码包
wget http://prdownloads.sourceforge.net/scons/scons-4.0.1.tar.gz
# 解压源码包
tar -xzvf scons-4.0.1.tar.gz
# 安装
cd SCons-4.0.1/
python3 setup.py install
# 建立软连接
ln -s /usr/local/python3/bin/scons /usr/bin/scons
```​

HarmonyOS Devic环境搭建-安装Scons

2.3 安装编译工具环境

咱们须要用到的编译工具备交叉编译器 gcc_riscv3二、 产生 ninja 编译脚本的 gn、执行 ninja 编译脚本的 ninja,虽然我并不知道她们是怎么工做的,但我坚信“Just Do IT”!

```bash
# 下载交叉编译工具
wget https://repo.huaweicloud.com/harmonyos/compiler/gcc_riscv32/7.3.0/linux/gcc_riscv32-linux-7.3.0.tar.gz
# 解压工具链
tar -xvf gcc_riscv32-linux-7.3.0.tar.gz
# 安装交叉编译工具
mv gcc_riscv32 /usr/local/  # 按照我的喜爱存放
vi /etc/profile # 将环境变量配置进来export PATH=/usr/local/gcc_riscv32/bin:$PATH
# 若是已存在PATH,需将:/usr/local/gcc_riscv32/bin:$PATH 追加到PATH
source /etc/profile
# 若是仍是不生效,请尝试加到全局变量 vim ~/.bashrc 我这边就酱
# 验证
cd
riscv32-unknown-elf-gcc --version
```

HarmonyOS Devic环境搭建-安装gcc_riscv32

```bash
# 下载gn工具源码包
wget https://repo.huaweicloud.com/harmonyos/compiler/gn/1523/linux/gn.1523.tar
# 解压
tar -xvf gn.1523.tar
# 安装
mv gn /usr/local/
ln -s /usr/local/gn/gn /usr/bin/gn
# 验证
gn --version
```

HarmonyOS Devic环境搭建-安装 gn

```bash
# 下载ninja
wget https://repo.huaweicloud.com/harmonyos/compiler/ninja/1.9.0/linux/ninja.1.9.0.tar
# 解压
tar -xvf ninja.1.9.0.tar
# 安装
mv ninja /usr/local/
ln -s /usr/local/ninja/ninja /usr/bin/ninja
# 验证
 ninja --version
```

HarmonyOS Devic环境搭建-安装 ninja

2.4 编译测试

经过简单而又繁琐的 Ctrl C 和 Ctrl V 咱们终于完成了 HarmonyOS Device 用于编译的 Linux 环境搭建。我已经火烧眉毛地想编译一次试试:

```bash
cd /root/harmonyos/openharmony
python3 build.py wifiiot
```

HarmonyOS Devic环境搭建- 测试编译成功

至此,完整的 HarmonyOS Device 环境算是搭建完毕,咱们能够开始编写本身的程序进行编译、烧录了。接下来,咱们尝试从 Hi3861 套件的一些基本功能中了解 HarmonyOS Device 的开发调试。

 

 开发调试篇

具体的文档和教程请参考 HarmonyOS 官方文档以及厂商的开源教程如 HiHope 的《Harmony OS 物联网应用开发实战》配套视频和代码仓库、BearPi 的《HM Nano 鸿蒙·季 发布》配套视频及代码仓库。咱们使用的是 HiHope 出品的 WI-FI IoT Hi3861 套件,涵盖了一个核心板(Hi3861 WLAN 模组)和七个扩展模块(交通灯板、炫彩灯板、OLED 板、NFC 板、机器人扩展板),包含了丰富的外设接口如 I2C(The Inter Integrated Circuit)、PWM(Pulse Width Modulation)、GPIO(General Purpose Input/Output)和多路 ADC(Analog to Digital Converter)等等,可玩性很是高。鸿蒙社区也有不少牛人创造了超多创意玩法,好比经过蜂鸣器演奏乐曲、经过 OLED 播放视频、俄罗斯方块小游戏、控制大疆无人机……您是否是也想来一套?接下来,请跟随 Copy 攻城狮本大狮一块儿探索一下 HarmonyOS Devic 开发调试吧!

 

 3.1 从点灯开始

若是您留意到 HarmonyOS Device 官方文档中关于 Hi3861 的示例程序,除了“Hello,World”和 WLAN 模组联网,在设备开发章节还提供了一个 LED 外设控制的 Demo,经过调用 HarmonyOS 的 NDK 接口,实现对 GPIO 控制,达到 LED 闪烁的效果,也就是咱们常说的“点灯”。源代码在咱们下载的目录中:harmonyos/openharmony/applications/sample/wifi-iot/app/iothardware/led_example.c
在 Copy 代码以前,大概了解一下源码的目录:

.
├── applications          # 应用程序样例,包括wifi-iot,camera等
│   └── sample
│   ├──── camera          # 摄像头类产品
│   └──── wifi-iot        # WIFI链接类产品
├── base                  # 基础软件服务子系统集&硬件服务子系统集
├── build                 # 组件化编译、构建和配置脚本
│   └── lite
├── build.py              # 编译脚本文件
├── device                # qemu模拟不一样内核运行在不一样的单板
├── docs                  # OpenHarmony开发者文档
├── domains               # 加强软件服务子系统集
│   └── iot
├── drivers               # 驱动子系统
│   ├── hdf
│   └── liteos
├── foundation            # 系统基础能力子系统集
├── kernel                # 内核子系统
├── out                   # 编译输出
│   └── wifiiot           # python3 build.py wifiiot的产物
├── prebuilts             # 编译器及工具链子系统
├── test                  # 测试子系统
├── third_party           # 开源第三方组件
├── utils                 # 经常使用的工具集
└── vendor                # 厂商提供的软件
    ├── hisi
    └── huawei

再看看咱们的开发目录`applications/sample/wifi-iot`:

├── app
│   ├── BUILD.gn                            # 入口
│   ├── demolink                            # Hello,World
│   │   ├── BUILD.gn
│   │   └── helloworld.c
│   ├── iothardware                         # 点灯Demo
│   │   ├── BUILD.gn
│   │   └── led_example.c
│   ├── samgr                               # 服务框架子系统管理系统功能
│   │   ├── bootstrap_example.c
│   │   ├── broadcast_example.c
│   │   ├── BUILD.gn
│   │   ├── example.h
│   │   ├── feature_example.c
│   │   ├── maintenance_example.c
│   │   ├── service_example.c
│   │   ├── service_recovery_example.c
│   │   ├── specified_task_example.c
│   │   └── task_example.c
│   └── startup                             # 启动配置
│       └── BUILD.gn
└── LICENSE                                 # 许可证

根据现有的代码,要想完成“点灯”实践,咱们只需在 VSCode Remote 中修改入口文件`BUILD.gn`:

import("//build/lite/config/component/lite_component.gni")
lite_component("app") {
    features = [
        "iothardware:led_example"
    ]
}

而后新开一个 VSCode 窗口进行 DevEco Device Tool 配置及烧录,烧录完毕经过串口工具能查看开发板的输出,再 Reset 开发板以后,伴随着节奏声,LED 灯一闪一闪,有点转向灯的赶脚,按下左边按钮时提示闪烁。

解锁更多章节>>>

想了解更多内容,请访问: 51CTO和华为官方战略合做共建的鸿蒙技术社区https://harmonyos.51cto.com

相关文章
相关标签/搜索