#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

相關文章
相關標籤/搜索