HarmonyOS開發(fā)板試用之二Hi3861開發(fā)初探和環(huán)境搭建
51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)
Hi3861開發(fā)
上一篇大致``描述了收到51cto的HiSpark_Wi-Fi_IoT_Hi3861_CH340G開發(fā)板后的組裝過程,這一篇正式進(jìn)入開發(fā)的初探。
注:相關(guān)設(shè)備來源于51CTO鴻蒙技術(shù)社區(qū)【開發(fā)板漂流計劃】提供
開發(fā)環(huán)境
我的開發(fā)編譯環(huán)境 mac + git + repo + vscode + docker
我的燒錄調(diào)試環(huán)境 window + HiBurn + 串口調(diào)試助手
開發(fā)環(huán)境的搭建還是有點(diǎn)難度,剛開始還是信心滿滿對著文檔各種操作,最終都以失敗告終。。。
最終走了一個自認(rèn)為最便捷的方式docker + HiBurn和串口助手 (主要devicetools一條龍開發(fā)工具沒成功過),因?yàn)檎麄€開發(fā)過程就是git拉取鴻蒙源碼,vscode中業(yè)務(wù)編碼,Ubuntu下編譯源碼成二進(jìn)制,燒錄二進(jìn)制到開發(fā)板,調(diào)試測試。
- docker環(huán)境,用來拉取鴻蒙源碼編譯的環(huán)境
- git環(huán)境,需要安裝git-lfs和repo工具
- ide開發(fā)工具編碼用
- HiBurn燒錄工具
- 串口調(diào)試助手調(diào)試用
獲取鴻蒙源碼
可以直接下載源碼開發(fā)編譯,但是本次從git拉取
1. 安裝python3.8
在python官網(wǎng)找到3.8版本安裝包
2. 安裝git和git-lfs
- brew install git
- brew install git-lfs
- #初始化git-lfs
- git lfs install

如果不安裝git-fls的話在后面拉取鴻蒙源碼的時候會失敗

3. 配置git和碼云公鑰
- #配置git
- git config --global user.name "yourname"
- git config --global user.email "your-email-address"
- git config --global credential.helper store
- #配置碼云ssh key就是將你電腦的公鑰保存到碼云
- ssh -T git@gitee.com

4. 安裝repo工具
- #如果沒有權(quán)限,可下載至其他目錄,并將其配置到環(huán)境變量中
- curl -s https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > /usr/local/bin/repo
- chmod a+x /usr/local/bin/repo
- pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple requests
5. 獲取鴻蒙源碼
- mkdir harmonyOsDevice
- cd harmonyOsDevice
- repo init -u git@gitee.com:openharmony/manifest.git -b master --no-repo-verify
- repo sync -c
- #需要git開啟git-lfs
- repo forall -c 'git lfs pull'

編譯環(huán)境(采用官方docker鏡像包)
1. 安裝Docker for mac在docker官網(wǎng)下載
2. 獲取編譯環(huán)境的docker鏡像
- docker pull swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:0.0.5
3. 在源碼根目錄運(yùn)行編譯環(huán)境
- docker run -it -v $(pwd):/home/openharmony swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:0.0.5
到此源碼和編譯環(huán)境已經(jīng)準(zhǔn)備完成(后面還有燒錄和調(diào)試環(huán)境)。下面開始運(yùn)行個Hello world試試。。。
開發(fā)初探
1. 編業(yè)務(wù)代碼(hello world)
隨便找一個自己順手的編輯器,這里就用vscode吧,打開上面的源碼目錄harmonyOsDevice
在源碼./applications/sample/wifi-iot/app目錄下
創(chuàng)建my_first_app目錄并在其內(nèi)創(chuàng)建
- hello_world.c業(yè)務(wù)代碼文件
- UILD.gn編譯腳本文件
hello_world.c文件內(nèi)容
- #include <stdio.h>
- #include "ohos_init.h"
- #include "ohos_types.h"
- void HelloWorld(void)
- {
- printf("[DEMO] Hello world sxfenglei.\n");
- }
- SYS_RUN(HelloWorld);
UILD.gn文件內(nèi)容
- static_library("myapp") {
- sources = [
- "hello_world.c"
- ]
- include_dirs = [
- "//utils/native/lite/include"
- ]
- }
最后修改./applications/sample/wifi-iot/app/UILD.gn文件的features數(shù)組(注意區(qū)別剛自己創(chuàng)建的UILD.gn文件)
- import("//build/lite/config/component/lite_component.gni")
- lite_component("app") {
- features = [
- #"startup",
- "my_first_app:myapp",
- ]
- }
2. 編譯源碼成二進(jìn)制文件
進(jìn)入docker環(huán)境下執(zhí)行
- //設(shè)置環(huán)境
- hb set
- //指定源碼目錄為當(dāng)前目錄
- .
- //編譯 完成后會在out目錄生成對應(yīng)目錄和文件
- hb build -f

3.燒錄二進(jìn)制文件到開發(fā)板
以上都是在mac下完成的下來的操作都在在windows上完成的
可以將編譯后的out目錄復(fù)制到windows下或者共享,我用的共享目錄;

安裝USB轉(zhuǎn)串口驅(qū)動

將HiSpark_Wi-Fi_IoT_Hi3861_CH340G通過連接到windows上并在設(shè)備管理中查看串口號

打開HiBurn燒錄(燒錄完成后一定要斷開)
連接上后點(diǎn)擊 reset按鍵便開始燒錄

4.運(yùn)行查看調(diào)試
打開調(diào)試助手 按reset就可以運(yùn)行的日志信息 就可以看到剛才寫的[demo] hello world sxfenglei.

5.控制WiFi版LED燈閃爍
上面輸出了日志下面在控制下板子LED試試
hello_world.c文件內(nèi)容
- #include <stdio.h>
- #include "ohos_init.h"
- #include "cmsis_os2.h"
- #include "iot_gpio.h"
- #define LED_GPIO 9 //查閱開發(fā)板原理圖明確接線關(guān)系 LED與9號管腳相連
- static void LedTask(void *arg)
- {
- (void)arg;
- //GPIO管腳初始化
- IoTGpioInit(LED_GPIO);
- //配置9號管腳為輸出
- IoTGpioSetDir(LED_GPIO, IOT_GPIO_DIR_OUT);
- while (1)
- {
- //設(shè)置引腳輸出狀態(tài)
- IoTGpioSetOutputVal(LED_GPIO, 0);
- osDelay(50);
- IoTGpioSetOutputVal(LED_GPIO, 1);
- osDelay(50);
- }
- }
- static void LedEntry(void)
- {
- osThreadAttr_t attr = {0};
- attr.name = "LedTask";
- attr.stack_size = 512;
- attr.priority = 25;
- //創(chuàng)建線程 啟動任務(wù)
- if (NULL == osThreadNew((osThreadFunc_t)LedTask, NULL, &attr))
- {
- printf("[LedExample] Falied to create LedTask! By sxfenglei.\n");
- }
- return NULL;
- }
- SYS_RUN(LedEntry);
BUID.gn文件內(nèi)容
- #定義myapp靜態(tài)庫
- static_library("myapp"){
- #靜態(tài)庫源碼
- sources = ["led.c"]
- #靜態(tài)庫包含的目錄
- include_dirs = [
- "//utils/native/lite/include",
- "//kernel/liteos_m/kal/cmsis",
- "//base/iot_hardware/peripheral/interfaces/kits",
- ]
- }

開發(fā)感受
對于新手來說開發(fā)環(huán)境的搭建還是有一定難度,安裝過device tool2 也安裝了device tool 3前前后后搞了快一周也沒搞成功(尷尬)能力限制了去體驗(yàn)一條龍服務(wù),等有空了在研究下。
51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)