提交 ba142502 编写于 作者: D duangavin123

快速入门优化

Signed-off-by: Nduangavin123 <duanxichao@huawei.com>
上级 25185e0e
......@@ -26,7 +26,7 @@
![zh-cn_image_0000001243481989](figures/zh-cn_image_0000001243481989.png)
2. 点击标号中的垃圾桶图标,关闭串口。
**图3** 关闭串口终端
![zh-cn_image_0000001243082093](figures/zh-cn_image_0000001243082093.png)
......@@ -88,7 +88,7 @@
> Hi3518EV300:device\hisilicon\hispark_aries\sdk_liteos\uboot\out\boot\u-boot-hi3518ev300.bin
2. 根据USB烧写步骤烧写U-boot文件。
按照[Hi3516系列USB烧写步骤](../quick-start/quickstart-ide-lite-steps-hi3516-burn.md)中描述的烧写方法,选择对应单板的U-boot文件进行烧写。
按照[Hi3516系列USB烧写步骤](../quick-start/quickstart-ide-3516-burn.md)中描述的烧写方法,选择对应单板的U-boot文件进行烧写。
3. 烧写完成后,登录串口如下图所示。
......@@ -104,7 +104,7 @@
点击烧写并选择串口后,无法获取文件。
**图6** 网络不通,单板无法获取文件图
![zh-cn_image_0000001198322428](figures/zh-cn_image_0000001198322428.png)
- **可能原因**
......@@ -124,19 +124,19 @@
![zh-cn_image_0000001198162584](figures/zh-cn_image_0000001198162584.png)
3. 点击“允许应用通过防火墙”。
**图8** 防火墙和网络保护界面图
![zh-cn_image_0000001198323146](figures/zh-cn_image_0000001198323146.png)
4. 查找Visual Studio Code应用。
**图9** 查找Visual Studio Code应用图
![zh-cn_image_0000001198003232](figures/zh-cn_image_0000001198003232.png)
5. 勾选Visual Studio Code的专用和公用网络的访问权限。
**图10** 允许Visual Studio Code应用访问网络
![zh-cn_image_0000001243084579](figures/zh-cn_image_0000001243084579.png)
......@@ -4,13 +4,6 @@
- WLAN连接类产品
- [LED外设控制](device-wlan-led-control.md)
- [集成三方SDK](device-wlan-sdk.md)
- 无屏摄像头类产品
- 摄像头控制
- [概述](device-iotcamera-control-overview.md)
- 示例开发
- [拍照开发指导](device-iotcamera-control-demo-photodevguide.md)
- [录像开发指导](device-iotcamera-control-demo-videodevguide.md)
- [应用实例](device-iotcamera-control-example.md)
- 带屏摄像头类产品
- 屏幕和摄像头控制
- [概述](device-camera-control-overview.md)
......
......@@ -3,7 +3,7 @@
本示例将运行源码中的camera示例代码,通过本示例可以实现使用开发板进行拍照、录像及预览等功能。
- 本示例源码路径为“applications/sample/camera/media/camera\_sample.cpp”。
- 在运行本示例前需先完成编译烧录、运行镜像等步骤,相关操作请参考[Hi3516快速入门](../quick-start/quickstart-lite-overview.md)
- 在运行本示例前需先完成编译烧录、运行镜像等步骤,相关操作请参考[小型系统快速入门](../quick-start/Readme-CN.md)
>![](../public_sys-resources/icon-note.gif) **说明:**
>开发板启动后默认会加载launcher应用,应用的图形界面默认显示在媒体图层上方,会影响camera\_sample的演示结果,因此需要在编译或是打包时去掉launcher应用。
......
# 真机运行<a name="ZH-CN_TOPIC_0000001054809161"></a>
应用编译打包后即可安装到开发板。安装应用前需要先完成[DevEco Device Tool的安装配置](https://device.harmonyos.com/cn/docs/ide/user-guides/service_introduction-0000001050166905),然后将OpenHarmony烧录到开发板并运行。编译烧录、运行镜像的基本操作请参考快速入门手册:[Hi3516快速入门](../quick-start/quickstart-lite-overview.md)。完成镜像运行,系统正常启动后,执行如下步骤安装或卸载三方应用。
应用编译打包后即可安装到开发板。安装应用前需要先完成[DevEco Device Tool的安装配置](https://device.harmonyos.com/cn/docs/ide/user-guides/service_introduction-0000001050166905),然后将OpenHarmony烧录到开发板并运行。编译烧录、运行镜像的基本操作请参考快速入门手册:[小型系统快速入门](../quick-start/Readme-CN.md)。完成镜像运行,系统正常启动后,执行如下步骤安装或卸载三方应用。
1. 将IDE编译的未签名应用安装包和安装工具(镜像文件生成目录中的dev\_tools)放在sdcard中,将sdcard插入开发板卡槽。
2. 应用安装默认要校验签名,需要执行以下命令,关闭签名校验。
......
# 时钟应用开发指导<a name="ZH-CN_TOPIC_0000001115417926"></a>
- [概述](#section11522349121115)
- [开发准备](#section6592121861218)
- [开发步骤](#section19901741111312)
- [签名打包](#section10601181101516)
- [真机运行](#section092721731511)
- [常见问题](#section1122413460153)
- [hdc\_std连接不到设备](#section1922725151614)
- [hdc\_std运行不了](#section15657547131615)
## 概述<a name="section11522349121115"></a>
......@@ -259,7 +250,7 @@
## 真机运行<a name="section092721731511"></a>
应用签名打包后即可安装到开发板。安装应用前需要先完成[DevEco Device Tool的安装配置](https://device.harmonyos.com/cn/docs/ide/user-guides/service_introduction-0000001050166905),然后将OpenHarmony系统烧录到开发板并运行。编译烧录、运行镜像的基本操作请参考快速入门手册:[标准系统Hi3516快速入门](../quick-start/quickstart-standard-overview.md)。完成镜像运行,系统正常启动后,执行如下步骤安装或卸载应用。
应用签名打包后即可安装到开发板。安装应用前需要先完成[DevEco Device Tool的安装配置](https://device.harmonyos.com/cn/docs/ide/user-guides/service_introduction-0000001050166905),然后将OpenHarmony系统烧录到开发板并运行。编译烧录、运行镜像的基本操作请参考快速入门手册:[标准系统Hi3516快速入门](../quick-start/quickstart-appendix-hi3516-ide.md)。完成镜像运行,系统正常启动后,执行如下步骤安装或卸载应用。
1. 从开发者工具代码仓路径中获取hdc客户端。
......
# 平台驱动开发示例<a name="ZH-CN_TOPIC_0000001157064271"></a>
- [概述](#section194201316174215)
- [环境准备](#section6926133918422)
- [开发](#section65801539470)
- [文件说明](#section0708184454414)
- [实例化驱动入口](#section85325864412)
- [设置相关参数](#section8155172019453)
- [添加控制器](#section1335374114452)
- [编译及烧录](#section164824754712)
## 概述<a name="section194201316174215"></a>
本文档将以I2C驱动为例,介绍如何基于HDF驱动框架完成平台驱动开发。
......@@ -26,7 +16,7 @@ HDF驱动框架为常用外围设备提供了标准的驱动框架,驱动开
## 环境准备<a name="section6926133918422"></a>
环境准备具体操作请参考[标准系统基础环境搭建](../quick-start/quickstart-standard-overview.md)
环境准备具体操作请参考[Hi3516标准系统入门](../quick-start/quickstart-appendix-hi3516-ide.md)完成环境搭建
>![](../public_sys-resources/icon-notice.gif) **须知:**
>本示例针对OpenHarmony轻量系统、小型系统、标准系统都适用,本文以标准系统为例。其他系统的开发者可参考对应系统的指导文档进行环境搭建。
......
# 拍照开发指导<a name="ZH-CN_TOPIC_0000001054954859"></a>
- [使用场景](#zh-cn_topic_0000001052170554_section1963312376119)
- [接口说明](#zh-cn_topic_0000001052170554_section56549532016)
- [约束与限制](#zh-cn_topic_0000001052170554_section1165911177314)
- [开发步骤](#zh-cn_topic_0000001052170554_section138543918214)
## 使用场景<a name="zh-cn_topic_0000001052170554_section1963312376119"></a>
使用Camera产生图片帧(拍照)。
## 接口说明<a name="zh-cn_topic_0000001052170554_section56549532016"></a>
**表 1** API列表
<a name="zh-cn_topic_0000001052170554_table2069447114914"></a>
<table><thead align="left"><tr id="zh-cn_topic_0000001052170554_row4903852104914"><th class="cellrowborder" valign="top" width="14.93%" id="mcps1.2.4.1.1"><p id="zh-cn_topic_0000001052170554_p2903252174918"><a name="zh-cn_topic_0000001052170554_p2903252174918"></a><a name="zh-cn_topic_0000001052170554_p2903252174918"></a>类名</p>
</th>
<th class="cellrowborder" valign="top" width="61.660000000000004%" id="mcps1.2.4.1.2"><p id="zh-cn_topic_0000001052170554_p1595113912507"><a name="zh-cn_topic_0000001052170554_p1595113912507"></a><a name="zh-cn_topic_0000001052170554_p1595113912507"></a>接口名</p>
</th>
<th class="cellrowborder" valign="top" width="23.41%" id="mcps1.2.4.1.3"><p id="zh-cn_topic_0000001052170554_p15951597508"><a name="zh-cn_topic_0000001052170554_p15951597508"></a><a name="zh-cn_topic_0000001052170554_p15951597508"></a>描述</p>
</th>
</tr>
</thead>
<tbody><tr id="zh-cn_topic_0000001052170554_row492815717494"><td class="cellrowborder" valign="top" width="14.93%" headers="mcps1.2.4.1.1 "><p id="zh-cn_topic_0000001052170554_p1592812716495"><a name="zh-cn_topic_0000001052170554_p1592812716495"></a><a name="zh-cn_topic_0000001052170554_p1592812716495"></a>CameraKit</p>
</td>
<td class="cellrowborder" valign="top" width="61.660000000000004%" headers="mcps1.2.4.1.2 "><p id="zh-cn_topic_0000001052170554_p1492837144919"><a name="zh-cn_topic_0000001052170554_p1492837144919"></a><a name="zh-cn_topic_0000001052170554_p1492837144919"></a>int32_t GetCameraIds(std::list&lt;string&gt; cameraList)</p>
</td>
<td class="cellrowborder" valign="top" width="23.41%" headers="mcps1.2.4.1.3 "><p id="zh-cn_topic_0000001052170554_p2092807134919"><a name="zh-cn_topic_0000001052170554_p2092807134919"></a><a name="zh-cn_topic_0000001052170554_p2092807134919"></a>获取cameraId列表</p>
</td>
</tr>
<tr id="zh-cn_topic_0000001052170554_row11928157114912"><td class="cellrowborder" valign="top" width="14.93%" headers="mcps1.2.4.1.1 "><p id="zh-cn_topic_0000001052170554_p139287774911"><a name="zh-cn_topic_0000001052170554_p139287774911"></a><a name="zh-cn_topic_0000001052170554_p139287774911"></a>CameraKit</p>
</td>
<td class="cellrowborder" valign="top" width="61.660000000000004%" headers="mcps1.2.4.1.2 "><p id="zh-cn_topic_0000001052170554_p9928107174915"><a name="zh-cn_topic_0000001052170554_p9928107174915"></a><a name="zh-cn_topic_0000001052170554_p9928107174915"></a>CameraAbility&amp; GetCameraAbility(string cameraId)</p>
</td>
<td class="cellrowborder" valign="top" width="23.41%" headers="mcps1.2.4.1.3 "><p id="zh-cn_topic_0000001052170554_p139281171494"><a name="zh-cn_topic_0000001052170554_p139281171494"></a><a name="zh-cn_topic_0000001052170554_p139281171494"></a>获取指定camera的能力</p>
</td>
</tr>
<tr id="zh-cn_topic_0000001052170554_row119282719496"><td class="cellrowborder" valign="top" width="14.93%" headers="mcps1.2.4.1.1 "><p id="zh-cn_topic_0000001052170554_p159288734914"><a name="zh-cn_topic_0000001052170554_p159288734914"></a><a name="zh-cn_topic_0000001052170554_p159288734914"></a>CameraKit</p>
</td>
<td class="cellrowborder" valign="top" width="61.660000000000004%" headers="mcps1.2.4.1.2 "><p id="zh-cn_topic_0000001052170554_p99280794913"><a name="zh-cn_topic_0000001052170554_p99280794913"></a><a name="zh-cn_topic_0000001052170554_p99280794913"></a>void RegisterCameraDeviceCallback(CameraDeviceCallback* callback, EventHandler* handler)</p>
</td>
<td class="cellrowborder" valign="top" width="23.41%" headers="mcps1.2.4.1.3 "><p id="zh-cn_topic_0000001052170554_p8928197134910"><a name="zh-cn_topic_0000001052170554_p8928197134910"></a><a name="zh-cn_topic_0000001052170554_p8928197134910"></a>注册camera设备状态回调</p>
</td>
</tr>
<tr id="zh-cn_topic_0000001052170554_row4928673496"><td class="cellrowborder" valign="top" width="14.93%" headers="mcps1.2.4.1.1 "><p id="zh-cn_topic_0000001052170554_p14928770497"><a name="zh-cn_topic_0000001052170554_p14928770497"></a><a name="zh-cn_topic_0000001052170554_p14928770497"></a>CameraKit</p>
</td>
<td class="cellrowborder" valign="top" width="61.660000000000004%" headers="mcps1.2.4.1.2 "><p id="zh-cn_topic_0000001052170554_p14928197194915"><a name="zh-cn_topic_0000001052170554_p14928197194915"></a><a name="zh-cn_topic_0000001052170554_p14928197194915"></a>void UnregisterCameraDeviceCallback(CameraDeviceCallback* callback)</p>
</td>
<td class="cellrowborder" valign="top" width="23.41%" headers="mcps1.2.4.1.3 "><p id="zh-cn_topic_0000001052170554_p17929197134913"><a name="zh-cn_topic_0000001052170554_p17929197134913"></a><a name="zh-cn_topic_0000001052170554_p17929197134913"></a>去注册camera设备状态回调</p>
</td>
</tr>
<tr id="zh-cn_topic_0000001052170554_row16929187104912"><td class="cellrowborder" valign="top" width="14.93%" headers="mcps1.2.4.1.1 "><p id="zh-cn_topic_0000001052170554_p6929157184911"><a name="zh-cn_topic_0000001052170554_p6929157184911"></a><a name="zh-cn_topic_0000001052170554_p6929157184911"></a>CameraKit</p>
</td>
<td class="cellrowborder" valign="top" width="61.660000000000004%" headers="mcps1.2.4.1.2 "><p id="zh-cn_topic_0000001052170554_p1192910704914"><a name="zh-cn_topic_0000001052170554_p1192910704914"></a><a name="zh-cn_topic_0000001052170554_p1192910704914"></a>void CreateCamera(string cameraId, CameraStateCallback* callback, EventHandler* handler)</p>
</td>
<td class="cellrowborder" valign="top" width="23.41%" headers="mcps1.2.4.1.3 "><p id="zh-cn_topic_0000001052170554_p12929167154912"><a name="zh-cn_topic_0000001052170554_p12929167154912"></a><a name="zh-cn_topic_0000001052170554_p12929167154912"></a>创建camera实例</p>
</td>
</tr>
<tr id="zh-cn_topic_0000001052170554_row592967184912"><td class="cellrowborder" valign="top" width="14.93%" headers="mcps1.2.4.1.1 "><p id="zh-cn_topic_0000001052170554_p9929127134915"><a name="zh-cn_topic_0000001052170554_p9929127134915"></a><a name="zh-cn_topic_0000001052170554_p9929127134915"></a>Camera</p>
</td>
<td class="cellrowborder" valign="top" width="61.660000000000004%" headers="mcps1.2.4.1.2 "><p id="zh-cn_topic_0000001052170554_p0929107204913"><a name="zh-cn_topic_0000001052170554_p0929107204913"></a><a name="zh-cn_topic_0000001052170554_p0929107204913"></a>string GetCameraId()</p>
</td>
<td class="cellrowborder" valign="top" width="23.41%" headers="mcps1.2.4.1.3 "><p id="zh-cn_topic_0000001052170554_p1592914710490"><a name="zh-cn_topic_0000001052170554_p1592914710490"></a><a name="zh-cn_topic_0000001052170554_p1592914710490"></a>获取cameraID</p>
</td>
</tr>
<tr id="zh-cn_topic_0000001052170554_row13929197104913"><td class="cellrowborder" valign="top" width="14.93%" headers="mcps1.2.4.1.1 "><p id="zh-cn_topic_0000001052170554_p16929167134913"><a name="zh-cn_topic_0000001052170554_p16929167134913"></a><a name="zh-cn_topic_0000001052170554_p16929167134913"></a>Camera</p>
</td>
<td class="cellrowborder" valign="top" width="61.660000000000004%" headers="mcps1.2.4.1.2 "><p id="zh-cn_topic_0000001052170554_p15929175491"><a name="zh-cn_topic_0000001052170554_p15929175491"></a><a name="zh-cn_topic_0000001052170554_p15929175491"></a>CameraConfig&amp; GetCameraConfig()</p>
</td>
<td class="cellrowborder" valign="top" width="23.41%" headers="mcps1.2.4.1.3 "><p id="zh-cn_topic_0000001052170554_p19298714917"><a name="zh-cn_topic_0000001052170554_p19298714917"></a><a name="zh-cn_topic_0000001052170554_p19298714917"></a>获取camera配置信息</p>
</td>
</tr>
<tr id="zh-cn_topic_0000001052170554_row1892918764915"><td class="cellrowborder" valign="top" width="14.93%" headers="mcps1.2.4.1.1 "><p id="zh-cn_topic_0000001052170554_p69291072495"><a name="zh-cn_topic_0000001052170554_p69291072495"></a><a name="zh-cn_topic_0000001052170554_p69291072495"></a>Camera</p>
</td>
<td class="cellrowborder" valign="top" width="61.660000000000004%" headers="mcps1.2.4.1.2 "><p id="zh-cn_topic_0000001052170554_p5930172494"><a name="zh-cn_topic_0000001052170554_p5930172494"></a><a name="zh-cn_topic_0000001052170554_p5930172494"></a>FrameConfig&amp; GetFrameConfig(int32_t type)</p>
</td>
<td class="cellrowborder" valign="top" width="23.41%" headers="mcps1.2.4.1.3 "><p id="zh-cn_topic_0000001052170554_p19301176495"><a name="zh-cn_topic_0000001052170554_p19301176495"></a><a name="zh-cn_topic_0000001052170554_p19301176495"></a>获取捕获帧类型</p>
</td>
</tr>
<tr id="zh-cn_topic_0000001052170554_row893019794915"><td class="cellrowborder" valign="top" width="14.93%" headers="mcps1.2.4.1.1 "><p id="zh-cn_topic_0000001052170554_p893016714919"><a name="zh-cn_topic_0000001052170554_p893016714919"></a><a name="zh-cn_topic_0000001052170554_p893016714919"></a>Camera</p>
</td>
<td class="cellrowborder" valign="top" width="61.660000000000004%" headers="mcps1.2.4.1.2 "><p id="zh-cn_topic_0000001052170554_p1093067134915"><a name="zh-cn_topic_0000001052170554_p1093067134915"></a><a name="zh-cn_topic_0000001052170554_p1093067134915"></a>void Configure(CameraConfig&amp; config)</p>
</td>
<td class="cellrowborder" valign="top" width="23.41%" headers="mcps1.2.4.1.3 "><p id="zh-cn_topic_0000001052170554_p1493037114912"><a name="zh-cn_topic_0000001052170554_p1493037114912"></a><a name="zh-cn_topic_0000001052170554_p1493037114912"></a>配置camera</p>
</td>
</tr>
<tr id="zh-cn_topic_0000001052170554_row11930197174917"><td class="cellrowborder" valign="top" width="14.93%" headers="mcps1.2.4.1.1 "><p id="zh-cn_topic_0000001052170554_p4930197184914"><a name="zh-cn_topic_0000001052170554_p4930197184914"></a><a name="zh-cn_topic_0000001052170554_p4930197184914"></a>Camera</p>
</td>
<td class="cellrowborder" valign="top" width="61.660000000000004%" headers="mcps1.2.4.1.2 "><p id="zh-cn_topic_0000001052170554_p19304717492"><a name="zh-cn_topic_0000001052170554_p19304717492"></a><a name="zh-cn_topic_0000001052170554_p19304717492"></a>void Release()</p>
</td>
<td class="cellrowborder" valign="top" width="23.41%" headers="mcps1.2.4.1.3 "><p id="zh-cn_topic_0000001052170554_p189301479494"><a name="zh-cn_topic_0000001052170554_p189301479494"></a><a name="zh-cn_topic_0000001052170554_p189301479494"></a>释放camera</p>
</td>
</tr>
<tr id="zh-cn_topic_0000001052170554_row109304717499"><td class="cellrowborder" valign="top" width="14.93%" headers="mcps1.2.4.1.1 "><p id="zh-cn_topic_0000001052170554_p4930873496"><a name="zh-cn_topic_0000001052170554_p4930873496"></a><a name="zh-cn_topic_0000001052170554_p4930873496"></a>Camera</p>
</td>
<td class="cellrowborder" valign="top" width="61.660000000000004%" headers="mcps1.2.4.1.2 "><p id="zh-cn_topic_0000001052170554_p1893017720490"><a name="zh-cn_topic_0000001052170554_p1893017720490"></a><a name="zh-cn_topic_0000001052170554_p1893017720490"></a>int TriggerLoopingCapture(FrameConfig&amp; frameConfig)</p>
</td>
<td class="cellrowborder" valign="top" width="23.41%" headers="mcps1.2.4.1.3 "><p id="zh-cn_topic_0000001052170554_p149307754918"><a name="zh-cn_topic_0000001052170554_p149307754918"></a><a name="zh-cn_topic_0000001052170554_p149307754918"></a>开始循环帧捕获</p>
</td>
</tr>
<tr id="zh-cn_topic_0000001052170554_row19306794915"><td class="cellrowborder" valign="top" width="14.93%" headers="mcps1.2.4.1.1 "><p id="zh-cn_topic_0000001052170554_p6930167194910"><a name="zh-cn_topic_0000001052170554_p6930167194910"></a><a name="zh-cn_topic_0000001052170554_p6930167194910"></a>Camera</p>
</td>
<td class="cellrowborder" valign="top" width="61.660000000000004%" headers="mcps1.2.4.1.2 "><p id="zh-cn_topic_0000001052170554_p139311577499"><a name="zh-cn_topic_0000001052170554_p139311577499"></a><a name="zh-cn_topic_0000001052170554_p139311577499"></a>void StopLoopingCapture()</p>
</td>
<td class="cellrowborder" valign="top" width="23.41%" headers="mcps1.2.4.1.3 "><p id="zh-cn_topic_0000001052170554_p693115764914"><a name="zh-cn_topic_0000001052170554_p693115764914"></a><a name="zh-cn_topic_0000001052170554_p693115764914"></a>停止循环帧捕获</p>
</td>
</tr>
<tr id="zh-cn_topic_0000001052170554_row593116713492"><td class="cellrowborder" valign="top" width="14.93%" headers="mcps1.2.4.1.1 "><p id="zh-cn_topic_0000001052170554_p1193187174913"><a name="zh-cn_topic_0000001052170554_p1193187174913"></a><a name="zh-cn_topic_0000001052170554_p1193187174913"></a>Camera</p>
</td>
<td class="cellrowborder" valign="top" width="61.660000000000004%" headers="mcps1.2.4.1.2 "><p id="zh-cn_topic_0000001052170554_p1493111713496"><a name="zh-cn_topic_0000001052170554_p1493111713496"></a><a name="zh-cn_topic_0000001052170554_p1493111713496"></a>int32_t TriggerSingleCapture(FrameConfig&amp; frameConfig)</p>
</td>
<td class="cellrowborder" valign="top" width="23.41%" headers="mcps1.2.4.1.3 "><p id="zh-cn_topic_0000001052170554_p1193137104919"><a name="zh-cn_topic_0000001052170554_p1193137104919"></a><a name="zh-cn_topic_0000001052170554_p1193137104919"></a>抓图</p>
</td>
</tr>
<tr id="zh-cn_topic_0000001052170554_row1693112711491"><td class="cellrowborder" valign="top" width="14.93%" headers="mcps1.2.4.1.1 "><p id="zh-cn_topic_0000001052170554_p89312716494"><a name="zh-cn_topic_0000001052170554_p89312716494"></a><a name="zh-cn_topic_0000001052170554_p89312716494"></a>CameraConfig</p>
</td>
<td class="cellrowborder" valign="top" width="61.660000000000004%" headers="mcps1.2.4.1.2 "><p id="zh-cn_topic_0000001052170554_p199312784912"><a name="zh-cn_topic_0000001052170554_p199312784912"></a><a name="zh-cn_topic_0000001052170554_p199312784912"></a>void SetFrameStateCallback(FrameStateCallback* callback, EventHandler* handler);</p>
</td>
<td class="cellrowborder" valign="top" width="23.41%" headers="mcps1.2.4.1.3 "><p id="zh-cn_topic_0000001052170554_p49312714495"><a name="zh-cn_topic_0000001052170554_p49312714495"></a><a name="zh-cn_topic_0000001052170554_p49312714495"></a>设置帧状态回调</p>
</td>
</tr>
<tr id="zh-cn_topic_0000001052170554_row9931076492"><td class="cellrowborder" valign="top" width="14.93%" headers="mcps1.2.4.1.1 "><p id="zh-cn_topic_0000001052170554_p59317784917"><a name="zh-cn_topic_0000001052170554_p59317784917"></a><a name="zh-cn_topic_0000001052170554_p59317784917"></a>CameraConfig</p>
</td>
<td class="cellrowborder" valign="top" width="61.660000000000004%" headers="mcps1.2.4.1.2 "><p id="zh-cn_topic_0000001052170554_p17931197124912"><a name="zh-cn_topic_0000001052170554_p17931197124912"></a><a name="zh-cn_topic_0000001052170554_p17931197124912"></a>static CameraConfig* CreateCameraConfig()</p>
</td>
<td class="cellrowborder" valign="top" width="23.41%" headers="mcps1.2.4.1.3 "><p id="zh-cn_topic_0000001052170554_p5931177164912"><a name="zh-cn_topic_0000001052170554_p5931177164912"></a><a name="zh-cn_topic_0000001052170554_p5931177164912"></a>创建camera配置信息实例</p>
</td>
</tr>
<tr id="zh-cn_topic_0000001052170554_row29321744917"><td class="cellrowborder" valign="top" width="14.93%" headers="mcps1.2.4.1.1 "><p id="zh-cn_topic_0000001052170554_p1093219716492"><a name="zh-cn_topic_0000001052170554_p1093219716492"></a><a name="zh-cn_topic_0000001052170554_p1093219716492"></a>CameraAbility</p>
</td>
<td class="cellrowborder" valign="top" width="61.660000000000004%" headers="mcps1.2.4.1.2 "><p id="zh-cn_topic_0000001052170554_p12932979493"><a name="zh-cn_topic_0000001052170554_p12932979493"></a><a name="zh-cn_topic_0000001052170554_p12932979493"></a>std::list&lt;Size&gt; GetSupportedSizes(int format)</p>
</td>
<td class="cellrowborder" valign="top" width="23.41%" headers="mcps1.2.4.1.3 "><p id="zh-cn_topic_0000001052170554_p1493210764918"><a name="zh-cn_topic_0000001052170554_p1493210764918"></a><a name="zh-cn_topic_0000001052170554_p1493210764918"></a>根据类型获取支持输出图像尺寸大小</p>
</td>
</tr>
<tr id="zh-cn_topic_0000001052170554_row1193267184910"><td class="cellrowborder" valign="top" width="14.93%" headers="mcps1.2.4.1.1 "><p id="zh-cn_topic_0000001052170554_p1393214717492"><a name="zh-cn_topic_0000001052170554_p1393214717492"></a><a name="zh-cn_topic_0000001052170554_p1393214717492"></a>CameraAbility</p>
</td>
<td class="cellrowborder" valign="top" width="61.660000000000004%" headers="mcps1.2.4.1.2 "><p id="zh-cn_topic_0000001052170554_p119321477495"><a name="zh-cn_topic_0000001052170554_p119321477495"></a><a name="zh-cn_topic_0000001052170554_p119321477495"></a>std::list&lt;T&gt; GetParameterRange(uint32_t key)</p>
</td>
<td class="cellrowborder" valign="top" width="23.41%" headers="mcps1.2.4.1.3 "><p id="zh-cn_topic_0000001052170554_p139331079491"><a name="zh-cn_topic_0000001052170554_p139331079491"></a><a name="zh-cn_topic_0000001052170554_p139331079491"></a>获取支持的参数范围</p>
</td>
</tr>
<tr id="zh-cn_topic_0000001052170554_row0933197134920"><td class="cellrowborder" valign="top" width="14.93%" headers="mcps1.2.4.1.1 "><p id="zh-cn_topic_0000001052170554_p1493310764917"><a name="zh-cn_topic_0000001052170554_p1493310764917"></a><a name="zh-cn_topic_0000001052170554_p1493310764917"></a>CameraDevice</p>
</td>
<td class="cellrowborder" valign="top" width="61.660000000000004%" headers="mcps1.2.4.1.2 "><p id="zh-cn_topic_0000001052170554_p493313724915"><a name="zh-cn_topic_0000001052170554_p493313724915"></a><a name="zh-cn_topic_0000001052170554_p493313724915"></a>CameraDeviceCallback()</p>
</td>
<td class="cellrowborder" valign="top" width="23.41%" headers="mcps1.2.4.1.3 "><p id="zh-cn_topic_0000001052170554_p993416724915"><a name="zh-cn_topic_0000001052170554_p993416724915"></a><a name="zh-cn_topic_0000001052170554_p993416724915"></a>camera设备回调类构造函数</p>
</td>
</tr>
<tr id="zh-cn_topic_0000001052170554_row093418712498"><td class="cellrowborder" valign="top" width="14.93%" headers="mcps1.2.4.1.1 "><p id="zh-cn_topic_0000001052170554_p159341779492"><a name="zh-cn_topic_0000001052170554_p159341779492"></a><a name="zh-cn_topic_0000001052170554_p159341779492"></a>CameraDevice</p>
</td>
<td class="cellrowborder" valign="top" width="61.660000000000004%" headers="mcps1.2.4.1.2 "><p id="zh-cn_topic_0000001052170554_p1493411774912"><a name="zh-cn_topic_0000001052170554_p1493411774912"></a><a name="zh-cn_topic_0000001052170554_p1493411774912"></a>void OnCameraStatus​(std::string cameraId, int32_t status)</p>
</td>
<td class="cellrowborder" valign="top" width="23.41%" headers="mcps1.2.4.1.3 "><p id="zh-cn_topic_0000001052170554_p1393419715491"><a name="zh-cn_topic_0000001052170554_p1393419715491"></a><a name="zh-cn_topic_0000001052170554_p1393419715491"></a>camera设备状态变化时的回调</p>
</td>
</tr>
<tr id="zh-cn_topic_0000001052170554_row109348711497"><td class="cellrowborder" valign="top" width="14.93%" headers="mcps1.2.4.1.1 "><p id="zh-cn_topic_0000001052170554_p993419724914"><a name="zh-cn_topic_0000001052170554_p993419724914"></a><a name="zh-cn_topic_0000001052170554_p993419724914"></a>CameraStateCallback</p>
</td>
<td class="cellrowborder" valign="top" width="61.660000000000004%" headers="mcps1.2.4.1.2 "><p id="zh-cn_topic_0000001052170554_p993418720497"><a name="zh-cn_topic_0000001052170554_p993418720497"></a><a name="zh-cn_topic_0000001052170554_p993418720497"></a>CameraStateCallback​()</p>
</td>
<td class="cellrowborder" valign="top" width="23.41%" headers="mcps1.2.4.1.3 "><p id="zh-cn_topic_0000001052170554_p693511794919"><a name="zh-cn_topic_0000001052170554_p693511794919"></a><a name="zh-cn_topic_0000001052170554_p693511794919"></a>camera状态回调类构造函数</p>
</td>
</tr>
<tr id="zh-cn_topic_0000001052170554_row159358717497"><td class="cellrowborder" valign="top" width="14.93%" headers="mcps1.2.4.1.1 "><p id="zh-cn_topic_0000001052170554_p1992012253527"><a name="zh-cn_topic_0000001052170554_p1992012253527"></a><a name="zh-cn_topic_0000001052170554_p1992012253527"></a>CameraStateCallback</p>
</td>
<td class="cellrowborder" valign="top" width="61.660000000000004%" headers="mcps1.2.4.1.2 "><p id="zh-cn_topic_0000001052170554_p29351077497"><a name="zh-cn_topic_0000001052170554_p29351077497"></a><a name="zh-cn_topic_0000001052170554_p29351077497"></a>void OnConfigured​(Camera&amp; camera)</p>
</td>
<td class="cellrowborder" valign="top" width="23.41%" headers="mcps1.2.4.1.3 "><p id="zh-cn_topic_0000001052170554_p093515774914"><a name="zh-cn_topic_0000001052170554_p093515774914"></a><a name="zh-cn_topic_0000001052170554_p093515774914"></a>camera配置成功回调</p>
</td>
</tr>
<tr id="zh-cn_topic_0000001052170554_row9935147184918"><td class="cellrowborder" valign="top" width="14.93%" headers="mcps1.2.4.1.1 "><p id="zh-cn_topic_0000001052170554_p117291328135211"><a name="zh-cn_topic_0000001052170554_p117291328135211"></a><a name="zh-cn_topic_0000001052170554_p117291328135211"></a>CameraStateCallback</p>
</td>
<td class="cellrowborder" valign="top" width="61.660000000000004%" headers="mcps1.2.4.1.2 "><p id="zh-cn_topic_0000001052170554_p19935174496"><a name="zh-cn_topic_0000001052170554_p19935174496"></a><a name="zh-cn_topic_0000001052170554_p19935174496"></a>void OnConfigureFailed​(Camera&amp; camera,int32_t errorCode)</p>
</td>
<td class="cellrowborder" valign="top" width="23.41%" headers="mcps1.2.4.1.3 "><p id="zh-cn_topic_0000001052170554_p159352077495"><a name="zh-cn_topic_0000001052170554_p159352077495"></a><a name="zh-cn_topic_0000001052170554_p159352077495"></a>camera配置失败回调</p>
</td>
</tr>
<tr id="zh-cn_topic_0000001052170554_row1935279498"><td class="cellrowborder" valign="top" width="14.93%" headers="mcps1.2.4.1.1 "><p id="zh-cn_topic_0000001052170554_p1514619311525"><a name="zh-cn_topic_0000001052170554_p1514619311525"></a><a name="zh-cn_topic_0000001052170554_p1514619311525"></a>CameraStateCallback</p>
</td>
<td class="cellrowborder" valign="top" width="61.660000000000004%" headers="mcps1.2.4.1.2 "><p id="zh-cn_topic_0000001052170554_p493512744915"><a name="zh-cn_topic_0000001052170554_p493512744915"></a><a name="zh-cn_topic_0000001052170554_p493512744915"></a>void OnCreated​(Camera&amp; camera)</p>
</td>
<td class="cellrowborder" valign="top" width="23.41%" headers="mcps1.2.4.1.3 "><p id="zh-cn_topic_0000001052170554_p1493511784914"><a name="zh-cn_topic_0000001052170554_p1493511784914"></a><a name="zh-cn_topic_0000001052170554_p1493511784914"></a>camera创建成功回调</p>
</td>
</tr>
<tr id="zh-cn_topic_0000001052170554_row189351877493"><td class="cellrowborder" valign="top" width="14.93%" headers="mcps1.2.4.1.1 "><p id="zh-cn_topic_0000001052170554_p172071933175218"><a name="zh-cn_topic_0000001052170554_p172071933175218"></a><a name="zh-cn_topic_0000001052170554_p172071933175218"></a>CameraStateCallback</p>
</td>
<td class="cellrowborder" valign="top" width="61.660000000000004%" headers="mcps1.2.4.1.2 "><p id="zh-cn_topic_0000001052170554_p129361977498"><a name="zh-cn_topic_0000001052170554_p129361977498"></a><a name="zh-cn_topic_0000001052170554_p129361977498"></a>void OnCreateFailed​(std::string cameraId,int32_t errorCode)</p>
</td>
<td class="cellrowborder" valign="top" width="23.41%" headers="mcps1.2.4.1.3 "><p id="zh-cn_topic_0000001052170554_p2936197114919"><a name="zh-cn_topic_0000001052170554_p2936197114919"></a><a name="zh-cn_topic_0000001052170554_p2936197114919"></a>camera创建失败回调</p>
</td>
</tr>
<tr id="zh-cn_topic_0000001052170554_row20936472491"><td class="cellrowborder" valign="top" width="14.93%" headers="mcps1.2.4.1.1 "><p id="zh-cn_topic_0000001052170554_p61213391523"><a name="zh-cn_topic_0000001052170554_p61213391523"></a><a name="zh-cn_topic_0000001052170554_p61213391523"></a>CameraStateCallback</p>
</td>
<td class="cellrowborder" valign="top" width="61.660000000000004%" headers="mcps1.2.4.1.2 "><p id="zh-cn_topic_0000001052170554_p793697174919"><a name="zh-cn_topic_0000001052170554_p793697174919"></a><a name="zh-cn_topic_0000001052170554_p793697174919"></a>void OnReleased​(Camera&amp; camera)</p>
</td>
<td class="cellrowborder" valign="top" width="23.41%" headers="mcps1.2.4.1.3 "><p id="zh-cn_topic_0000001052170554_p49361719495"><a name="zh-cn_topic_0000001052170554_p49361719495"></a><a name="zh-cn_topic_0000001052170554_p49361719495"></a>camera释放回调</p>
</td>
</tr>
<tr id="zh-cn_topic_0000001052170554_row159361179493"><td class="cellrowborder" valign="top" width="14.93%" headers="mcps1.2.4.1.1 "><p id="zh-cn_topic_0000001052170554_p10936147194918"><a name="zh-cn_topic_0000001052170554_p10936147194918"></a><a name="zh-cn_topic_0000001052170554_p10936147194918"></a>FrameStateCallback</p>
</td>
<td class="cellrowborder" valign="top" width="61.660000000000004%" headers="mcps1.2.4.1.2 "><p id="zh-cn_topic_0000001052170554_p9936279496"><a name="zh-cn_topic_0000001052170554_p9936279496"></a><a name="zh-cn_topic_0000001052170554_p9936279496"></a>FrameStateCallback​()</p>
</td>
<td class="cellrowborder" valign="top" width="23.41%" headers="mcps1.2.4.1.3 "><p id="zh-cn_topic_0000001052170554_p49367718499"><a name="zh-cn_topic_0000001052170554_p49367718499"></a><a name="zh-cn_topic_0000001052170554_p49367718499"></a>帧状态回调类构造函数</p>
</td>
</tr>
<tr id="zh-cn_topic_0000001052170554_row1893617744916"><td class="cellrowborder" valign="top" width="14.93%" headers="mcps1.2.4.1.1 "><p id="zh-cn_topic_0000001052170554_p136968511524"><a name="zh-cn_topic_0000001052170554_p136968511524"></a><a name="zh-cn_topic_0000001052170554_p136968511524"></a>FrameStateCallback</p>
</td>
<td class="cellrowborder" valign="top" width="61.660000000000004%" headers="mcps1.2.4.1.2 "><p id="zh-cn_topic_0000001052170554_p209379744911"><a name="zh-cn_topic_0000001052170554_p209379744911"></a><a name="zh-cn_topic_0000001052170554_p209379744911"></a>void OnFrameFinished(Camera&amp; camera, FrameConfig&amp; frameConfig, FrameResult&amp; frameResult)</p>
</td>
<td class="cellrowborder" valign="top" width="23.41%" headers="mcps1.2.4.1.3 "><p id="zh-cn_topic_0000001052170554_p19374724913"><a name="zh-cn_topic_0000001052170554_p19374724913"></a><a name="zh-cn_topic_0000001052170554_p19374724913"></a>拍照帧完成回调</p>
</td>
</tr>
<tr id="zh-cn_topic_0000001052170554_row093719718495"><td class="cellrowborder" valign="top" width="14.93%" headers="mcps1.2.4.1.1 "><p id="zh-cn_topic_0000001052170554_p772975317527"><a name="zh-cn_topic_0000001052170554_p772975317527"></a><a name="zh-cn_topic_0000001052170554_p772975317527"></a>FrameStateCallback</p>
</td>
<td class="cellrowborder" valign="top" width="61.660000000000004%" headers="mcps1.2.4.1.2 "><p id="zh-cn_topic_0000001052170554_p189371471498"><a name="zh-cn_topic_0000001052170554_p189371471498"></a><a name="zh-cn_topic_0000001052170554_p189371471498"></a>void OnFrameError​(Camera&amp; camera, FrameConfig&amp; frameConfig, int32_t errorCode, FrameResult&amp; frameResult)</p>
</td>
<td class="cellrowborder" valign="top" width="23.41%" headers="mcps1.2.4.1.3 "><p id="zh-cn_topic_0000001052170554_p109371778497"><a name="zh-cn_topic_0000001052170554_p109371778497"></a><a name="zh-cn_topic_0000001052170554_p109371778497"></a>拍照帧异常回调</p>
</td>
</tr>
<tr id="zh-cn_topic_0000001052170554_row179381979499"><td class="cellrowborder" valign="top" width="14.93%" headers="mcps1.2.4.1.1 "><p id="zh-cn_topic_0000001052170554_p169381975499"><a name="zh-cn_topic_0000001052170554_p169381975499"></a><a name="zh-cn_topic_0000001052170554_p169381975499"></a>FrameConfig</p>
</td>
<td class="cellrowborder" valign="top" width="61.660000000000004%" headers="mcps1.2.4.1.2 "><p id="zh-cn_topic_0000001052170554_p1793867124910"><a name="zh-cn_topic_0000001052170554_p1793867124910"></a><a name="zh-cn_topic_0000001052170554_p1793867124910"></a>int32_t GetFrameConfigType()</p>
</td>
<td class="cellrowborder" valign="top" width="23.41%" headers="mcps1.2.4.1.3 "><p id="zh-cn_topic_0000001052170554_p1993817744915"><a name="zh-cn_topic_0000001052170554_p1993817744915"></a><a name="zh-cn_topic_0000001052170554_p1993817744915"></a>获取帧配置类型</p>
</td>
</tr>
<tr id="zh-cn_topic_0000001052170554_row793817784912"><td class="cellrowborder" valign="top" width="14.93%" headers="mcps1.2.4.1.1 "><p id="zh-cn_topic_0000001052170554_p69381724914"><a name="zh-cn_topic_0000001052170554_p69381724914"></a><a name="zh-cn_topic_0000001052170554_p69381724914"></a>FrameConfig</p>
</td>
<td class="cellrowborder" valign="top" width="61.660000000000004%" headers="mcps1.2.4.1.2 "><p id="zh-cn_topic_0000001052170554_p149382077496"><a name="zh-cn_topic_0000001052170554_p149382077496"></a><a name="zh-cn_topic_0000001052170554_p149382077496"></a>std::list&lt;OHOS::Surface&gt; GetSurfaces()</p>
</td>
<td class="cellrowborder" valign="top" width="23.41%" headers="mcps1.2.4.1.3 "><p id="zh-cn_topic_0000001052170554_p893867114919"><a name="zh-cn_topic_0000001052170554_p893867114919"></a><a name="zh-cn_topic_0000001052170554_p893867114919"></a>获取帧配置的surface</p>
</td>
</tr>
<tr id="zh-cn_topic_0000001052170554_row109401570498"><td class="cellrowborder" valign="top" width="14.93%" headers="mcps1.2.4.1.1 "><p id="zh-cn_topic_0000001052170554_p294019712492"><a name="zh-cn_topic_0000001052170554_p294019712492"></a><a name="zh-cn_topic_0000001052170554_p294019712492"></a>FrameConfig</p>
</td>
<td class="cellrowborder" valign="top" width="61.660000000000004%" headers="mcps1.2.4.1.2 "><p id="zh-cn_topic_0000001052170554_p19940170499"><a name="zh-cn_topic_0000001052170554_p19940170499"></a><a name="zh-cn_topic_0000001052170554_p19940170499"></a>void AddSurface(OHOS::AGP::UISurface&amp; surface);</p>
</td>
<td class="cellrowborder" valign="top" width="23.41%" headers="mcps1.2.4.1.3 "><p id="zh-cn_topic_0000001052170554_p11940197144915"><a name="zh-cn_topic_0000001052170554_p11940197144915"></a><a name="zh-cn_topic_0000001052170554_p11940197144915"></a>添加surface</p>
</td>
</tr>
<tr id="zh-cn_topic_0000001052170554_row994018711492"><td class="cellrowborder" valign="top" width="14.93%" headers="mcps1.2.4.1.1 "><p id="zh-cn_topic_0000001052170554_p1094016718493"><a name="zh-cn_topic_0000001052170554_p1094016718493"></a><a name="zh-cn_topic_0000001052170554_p1094016718493"></a>FrameConfig</p>
</td>
<td class="cellrowborder" valign="top" width="61.660000000000004%" headers="mcps1.2.4.1.2 "><p id="zh-cn_topic_0000001052170554_p139411279498"><a name="zh-cn_topic_0000001052170554_p139411279498"></a><a name="zh-cn_topic_0000001052170554_p139411279498"></a>void RemoveSurface(OHOS::AGP::UISurface&amp; surface);</p>
</td>
<td class="cellrowborder" valign="top" width="23.41%" headers="mcps1.2.4.1.3 "><p id="zh-cn_topic_0000001052170554_p39415717494"><a name="zh-cn_topic_0000001052170554_p39415717494"></a><a name="zh-cn_topic_0000001052170554_p39415717494"></a>删除surface</p>
</td>
</tr>
</tbody>
</table>
## 约束与限制<a name="zh-cn_topic_0000001052170554_section1165911177314"></a>
无。
## 开发步骤<a name="zh-cn_topic_0000001052170554_section138543918214"></a>
1. <a name="zh-cn_topic_0000001052170554_li378084192111"></a>实现设备状态回调的派生类,用户在设备状态发生变更(如新插入相机设备/相机掉线)时,自定义操作。
```
class SampleCameraDeviceCallback : public CameraDeviceCallback {
void OnCameraStatus(std::string cameraId, int32_t status) override
{
//do something when camera is available/unavailable
}
};
```
2. <a name="zh-cn_topic_0000001052170554_li8716104682913"></a>实现帧事件回调的派生类,这里在拿到帧数据以后将其转存为文件。
```
static void SampleSaveCapture(const char *p, uint32_t size)
{
cout << "Start saving picture" << endl;
struct timeval tv;
gettimeofday(&tv, NULL);
struct tm *ltm = localtime(&tv.tv_sec);
if (ltm != nullptr) {
ostringstream ss("Capture_");
ss << "Capture" << ltm->tm_hour << "-" << ltm->tm_min << "-" << ltm->tm_sec << ".jpg";
ofstream pic("/sdcard/" + ss.str(), ofstream::out | ofstream::trunc);
cout << "write " << size << " bytes" << endl;
pic.write(p, size);
cout << "Saving picture end" << endl;
}
}
class TestFrameStateCallback : public FrameStateCallback {
void OnFrameFinished(Camera &camera, FrameConfig &fc, FrameResult &result) override
{
cout << "Receive frame complete inform." << endl;
if (fc.GetFrameConfigType() == FRAME_CONFIG_CAPTURE) {
cout << "Capture frame received." << endl;
list<Surface *> surfaceList = fc.GetSurfaces();
for (Surface *surface : surfaceList) {
SurfaceBuffer *buffer = surface->AcquireBuffer();
if (buffer != nullptr) {
char *virtAddr = static_cast<char *>(buffer->GetVirAddr());
if (virtAddr != nullptr) {
SampleSaveCapture(virtAddr, buffer->GetSize());
}
surface->ReleaseBuffer(buffer);
}
delete surface;
}
delete &fc;
}
}
};
```
3. <a name="zh-cn_topic_0000001052170554_li6671035102514"></a>实现相机状态回调的派生类,自定义相机状态发生变化(配置成功/失败,创建成功/失败\)时的操作。
```
class SampleCameraStateMng : public CameraStateCallback {
public:
SampleCameraStateMng() = delete;
SampleCameraStateMng(EventHandler &eventHdlr) : eventHdlr_(eventHdlr) {}
~SampleCameraStateMng()
{
if (recordFd_ != -1) {
close(recordFd_);
}
}
void OnCreated(Camera &c) override
{
cout << "Sample recv OnCreate camera." << endl;
auto config = CameraConfig::CreateCameraConfig();
config->SetFrameStateCallback(&fsCb_, &eventHdlr_);
c.Configure(*config);
cam_ = &c;
}
void OnCreateFailed(const std::string cameraId, int32_t errorCode) override {}
void OnReleased(Camera &c) override {}
};
```
4. 创建CameraKit,用于创建和获取camera信息。
```
CameraKit *camKit = CameraKit::GetInstance();
list<string> camList = camKit->GetCameraIds();
string camId;
for (auto &cam : camList) {
cout << "camera name:" << cam << endl;
const CameraAbility *ability = camKit->GetCameraAbility(cam);
/* find camera which fits user's ability */
list<CameraPicSize> sizeList = ability->GetSupportedSizes(0);
if (find(sizeList.begin(), sizeList.end(), CAM_PIC_1080P) != sizeList.end()) {
camId = cam;
break;
}
}
```
5. 创建Camera实例。
```
EventHandler eventHdlr; // Create a thread to handle callback events
SampleCameraStateMng CamStateMng(eventHdlr);
camKit->CreateCamera(camId, CamStateMng, eventHdlr);
```
6. 根据[步骤1](#zh-cn_topic_0000001052170554_li378084192111)[步骤2](#zh-cn_topic_0000001052170554_li8716104682913)[步骤3](#zh-cn_topic_0000001052170554_li6671035102514)中的回调设计,同步等待 OnCreated 回调拿到 cam\_ 之后,进行相关操作。
```
void OnCreated(Camera &c) override
{
cout << "Sample recv OnCreate camera." << endl;
auto config = CameraConfig::CreateCameraConfig();
config->SetFrameStateCallback(&fsCb_, &eventHdlr_);
c.Configure(*config);
cam_ = &c;
}
void Capture()
{
if (cam_ == nullptr) {
cout << "Camera is not ready." << endl;
return;
}
FrameConfig *fc = new FrameConfig(FRAME_CONFIG_CAPTURE);
Surface *surface = Surface::CreateSurface();
if (surface == nullptr) {
delete fc;
return;
}
surface->SetWidthAndHeight(1920, 1080); /* 1920:width,1080:height */
fc->AddSurface(*surface);
cam_->TriggerSingleCapture(*fc);
}
```
# 录像开发指导<a name="ZH-CN_TOPIC_0000001054754827"></a>
- [使用场景](#zh-cn_topic_0000001051451869_section186634310418)
- [接口说明](#zh-cn_topic_0000001051451869_section125479541744)
- [约束与限制](#zh-cn_topic_0000001051451869_section1165911177314)
- [开发步骤](#zh-cn_topic_0000001051451869_section1196016315516)
## 使用场景<a name="zh-cn_topic_0000001051451869_section186634310418"></a>
使用camera采集视频码流。
## 接口说明<a name="zh-cn_topic_0000001051451869_section125479541744"></a>
参考“拍照开发指导”的“接口说明”。
## 约束与限制<a name="zh-cn_topic_0000001051451869_section1165911177314"></a>
无。
## 开发步骤<a name="zh-cn_topic_0000001051451869_section1196016315516"></a>
1. 参考“拍照开发指导”中步骤1、步骤2、步骤3、步骤4。
2. 获取录像FrameConfig。
```
/* 从recorder获取surface */
Surface *surface = recorder_->GetSurface(0);
surface->SetWidthAndHeight(1920, 1080);
surface->SetQueueSize(3);
surface->SetSize(1024 * 1024);
/* 将surface配置到帧配置中 */
FrameConfig *fc = new FrameConfig(FRAME_CONFIG_RECORD);
fc->AddSurface(*surface);
```
3. 开启和停止录像。
```
stateCallback->camera_->TriggerLoopingCapture(*fc); // 开始录像
stateCallback->camera_->StopLoopingCapture(); // 结束录像
```
# 应用实例<a name="ZH-CN_TOPIC_0000001055686082"></a>
- 开发板介绍、编译烧录、运行镜像等操作请参考[Hi3518快速入门](../quick-start/quickstart-lite-overview.md),编译结果包含示例,结果文件为out/ipcamera\_hi3518ev300/dev\_tools/bin/camera\_sample,可将文件通过读卡器复制至TF卡中,或者修改camera\_sample的编译脚本将结果文件复制至rootfs.img中。
修改applications/sample/camera/media/BUILD.gn中的output\_dir。
- 修改前:output\_dir = "$root\_out\_dir/dev\_tools"
- 修改后:output\_dir = "$root\_out\_dir/"
重新执行源码仓编译并烧写入单板后,可在单板bin目录下找到camera\_sample文件。
- 相机示例代码为applications/sample/camera/media/camera\_sample.cpp。
>![](../public_sys-resources/icon-notice.gif) **须知:**
>实例运行拍照和录像功能需要插入TF卡\(最大容量支持128GB\),系统启动后时自动将TF卡挂载至/sdcard目录,如果在启动后插入则需要手动挂载。查看拍照和录像内容可将TF卡中内容复制到电脑中进行查看,预览功能无需TF卡。
1. 通过cd命令进入可执行程序的末端路径,启动camera\_sample,执行命令如下图。
**图 1** 启动示例<a name="zh-cn_topic_0000001055301733_fig380985885020"></a>
![](figures/启动示例.png "启动示例")
运行后的控制命令如串口打印所示,按s键停止当前操作(包括录像和预览),按q键退出示例程序。
2. 按1进行拍照,拍照的文件格式为jpg,存储在/sdcard,文件名Capture\*
**图 2** 输入拍照指令后串口打印日志<a name="zh-cn_topic_0000001055301733_fig17819185018384"></a>
![](figures/输入拍照指令后串口打印日志.png "输入拍照指令后串口打印日志")
若想查看保存文件,可在退出程序后进入文件系统查看,退出后重新进入请回到步骤1。
**图 3** 查看文件图<a name="zh-cn_topic_0000001055301733_fig166391743154619"></a>
![](figures/查看文件图.png "查看文件图")
3. 按2进行录像,录像的文件格式为mp4,存储在/sdcard,文件名Record\*,按s键停止
**图 4** 输入录像指令后串口打印日志<a name="zh-cn_topic_0000001055301733_fig6340814174317"></a>
![](figures/输入录像指令后串口打印日志.png "输入录像指令后串口打印日志")
4. 按q键退出
**图 5** 输出退出指令后串口打印日志<a name="zh-cn_topic_0000001055301733_fig1755682174514"></a>
![](figures/输出退出指令后串口打印日志.png "输出退出指令后串口打印日志")
# 概述<a name="ZH-CN_TOPIC_0000001055366100"></a>
本文档将介绍如何基于IoT Camera开发板,利用开发套件中自带的摄像头,完成拍照、录像功能。
开发者可通过执行示例应用,对开发板的外设控制有了更深入了解后,可使用开发板完成摄像头等设备。
若开发者想先查看示例效果,请进入[应用实例](device-iotcamera-control-example.md)。如需自定义应用行为,可参考下节“示例开发”对示例代码进行修改。
相机开发基本概念可参考:[相机开发概述](../subsystems/subsys-multimedia-camera-overview.md)
......@@ -25,7 +25,7 @@ Input驱动模型核心部分由设备管理层、公共驱动层、器件驱动
## 环境搭建<a name="section661075474418"></a>
环境准备具体操作请参考[标准系统基础环境搭建](../quick-start/quickstart-standard-overview.md)
环境准备具体操作请参考[快速入门环境搭建章节](../quick-start/Readme-CN.md)
>![](../public_sys-resources/icon-notice.gif) **须知:**
>本示例针对OpenHarmony轻量系统、小型系统、标准系统都适用,本文以标准系统为例。其他系统的开发者可参考对应系统的指导文档进行环境搭建。
......@@ -316,7 +316,7 @@ Input模型由三层驱动组成,开发者适配一款全新触摸屏驱动只
其中touch\_gt911.o为本示例中追加的内容。
2. 具体编译及烧录操作请参考[标准系统快速入门编译及烧录章节](../quick-start/quickstart-standard-overview.md)
2. 具体编译及烧录操作请参考[标准系统快速入门的编译及烧录章节](../quick-start/Readme-CN.md)
## 调试验证<a name="section62577313482"></a>
......
......@@ -10,7 +10,7 @@ OpenHarmony WLAN模组基于Hi3861平台提供了丰富的外设操作能力,
## 开发<a name="section13857170163412"></a>
1. 请先完成[《Hi3861快速入门》](../quick-start/quickstart-lite-overview.md)
1. 请先完成[轻量系统快速入门](../quick-start/Readme-CN.md)
LED控制参考示例存放于applications/sample/wifi-iot/app/iothardware/led\_example.c文件中。
......@@ -100,7 +100,7 @@ OpenHarmony WLAN模组基于Hi3861平台提供了丰富的外设操作能力,
## 验证<a name="section1949121910344"></a>
编译过程请参考[Hi3861快速入门-源码编译](../quick-start/quickstart-lite-steps-hi3861-building.md)》,烧录过程请参考《[Hi3861快速入门-镜像烧录](../quick-start/quickstart-lite-steps-hi3861-burn.md)
编译过程请参考[轻量系统快速入门的编译章节](../quick-start/quickstart-ide-3861-build.md),烧录过程请参考[轻量系统快速入门的烧录章节](../quick-start/quickstart-ide-3861-burn.md)
完成以上两步后,按下RST键复位模组,可发现LED在周期性闪烁,与预期相符,验证完毕。
......
......@@ -98,7 +98,7 @@ LiteOS-M内核的编译构建系统是一个基于gn和ninja的组件化构建
### 搭建系统基础环境
在搭建各个开发板环境前,需要完成OpenHarmony系统基础环境搭建。系统基础环境主要是指OpenHarmony的编译环境和开发环境,详细介绍请参考官方站点[开发环境准备](../quick-start/quickstart-lite-env-setup.md)。开发者需要根据环境搭建文档完成环境搭建。
在搭建各个开发板环境前,需要完成OpenHarmony系统基础环境搭建。系统基础环境主要是指OpenHarmony的编译环境和开发环境,详细介绍请参考官方站点[快速入门环境搭建部分](../quick-start/Readme-CN.md)。开发者需要根据环境搭建文档完成环境搭建。
### 获取OpenHarmony源码
......
......@@ -45,7 +45,7 @@ Linux内核移植主要涉及基于linux内核基线合入三方芯片补丁后
4. 烧录启动。
由于不同芯片的开发板的烧录方式不一样,此处不表述具体的烧录方式。需要注意烧录的各镜像的大小及启动参数的配置,参考hi3516dv300采用uboot启动参数:
```
setenv bootargs 'mem=128M console=ttyAMA0,115200 root=/dev/mmcblk0p3 ro rootfstype=ext4 rootwait blkdevparts=mmcblk0:1M(boot),9M(kernel),50M(rootfs),50M(userfs)'
```
......@@ -53,7 +53,7 @@ Linux内核移植主要涉及基于linux内核基线合入三方芯片补丁后
## 验证
调试init进程、启动shell和运行简单的用户态程序,验证内核移植是否成功。OpenHarmony[小型系统](../quick-start/quickstart-lite-overview.md)的OS镜像结构以及linux用户态的启动流程如下图1所示:
调试init进程、启动shell和运行简单的用户态程序,验证内核移植是否成功。OpenHarmony小型系统的OS镜像结构以及linux用户态的启动流程如下图1所示:
**图1** 基于linux内核的OS镜像结构和用户态程序启动流程
![zh-cn_image_0000001154372318](figures/zh-cn_image_0000001154372318.png)
......
......@@ -2,7 +2,7 @@
## 编译环境搭建
首先请搭建OpenHarmony基础环境,步骤请参考轻量和小型系统入门[安装Hi3861开发板环境](../quick-start/quickstart-lite-steps-hi3861-setting.md)。用户态和LiteOS-A的内核态编译均使用llvm编译器编译,安装方法在搭建基础环境中已提供。若选择移植linux内核,请执行如下命令安装gcc-arm-linux-gnueabi交叉编译工具链,用于编译linux内核态镜像:
首先请搭建OpenHarmony基础环境,相关操作请参考[快速入门环境搭建章节](../quick-start/Readme-CN.md)。用户态和LiteOS-A的内核态编译均使用llvm编译器编译,安装方法在搭建基础环境中已提供。若选择移植linux内核,请执行如下命令安装gcc-arm-linux-gnueabi交叉编译工具链,用于编译linux内核态镜像:
```
......
# 移植须知
本文详细介绍如何将OpenHarmony[小型系统](../quick-start/quickstart-lite-overview.md)的linux和LiteOS-A内核移植到新的开发板上,要求读者具有一定的嵌入式系统开发经验。建议先查看[入门指导](../../OpenHarmony-Overview_zh.md),以了解OpenHarmony软件架构、目录结构、内核子系统和驱动子系统相关知识。当前小型系统已适配的开发板如下表所示:
本文详细介绍如何将OpenHarmony小型系统的linux和LiteOS-A内核移植到新的开发板上,要求读者具有一定的嵌入式系统开发经验。建议先查看[入门指导](../../OpenHarmony-Overview_zh.md),以了解OpenHarmony软件架构、目录结构、内核子系统和驱动子系统相关知识。当前小型系统已适配的开发板如下表所示:
**表1** OpenHarmony小型系统已适配的开发板
| 开发板 | 内核 | arch | ROM | RAM | 文件系统 | Flash&nbsp;类型 |
| 开发板 | 内核 | arch | ROM | RAM | 文件系统 | Flash&nbsp;类型 |
| -------- | -------- | -------- | -------- | -------- | -------- | -------- |
| hispark_taurus | LiteOS-A和linux-4.19 | ARM&nbsp;cortex-a7 | 8G | 1GB | VFAT、EXT4 | eMMC4.5 |
| hispark_aries | LiteOS-A | ARM&nbsp;cortex-a7 | 16M | 512M | JFFS2 | SPI&nbsp;NOR |
| hispark_taurus | LiteOS-A和linux-4.19 | ARM&nbsp;cortex-a7 | 8G | 1GB | VFAT、EXT4 | eMMC4.5 |
| hispark_aries | LiteOS-A | ARM&nbsp;cortex-a7 | 16M | 512M | JFFS2 | SPI&nbsp;NOR |
表1中的开发板可作为待移植开发板的参考,当前LiteOS-A和linux-4.19支持的arch、ROM占用、支持的文件系统和支持的Flash类型如下表所示:
......@@ -17,7 +17,7 @@
**表2** OpenHarmony小型系统内核移植信息表
| 内核 | 支持的arch | ROM | 文件系统 | Flash类型 |
| 内核 | 支持的arch | ROM | 文件系统 | Flash类型 |
| -------- | -------- | -------- | -------- | -------- |
| LiteOS-A | ARMv7 | &gt;&nbsp;2M | VFAT、JFFS2、YAFFS2 | SPI&nbsp;NOR、NAND、EMMC |
| linux-4.19 | ARM,&nbsp;ARM64、&nbsp;MIPS、&nbsp;X86等 | &gt;&nbsp;5M | VFAT、JFFS2、YAFFS、EXT/2/3/4、NFS等等 | NOR、NAND、EMMC等 |
| LiteOS-A | ARMv7 | &gt;&nbsp;2M | VFAT、JFFS2、YAFFS2 | SPI&nbsp;NOR、NAND、EMMC |
| linux-4.19 | ARM,&nbsp;ARM64、&nbsp;MIPS、&nbsp;X86等 | &gt;&nbsp;5M | VFAT、JFFS2、YAFFS、EXT/2/3/4、NFS等等 | NOR、NAND、EMMC等 |
......@@ -10,23 +10,23 @@
**表1** 源码目录结构
| 名称 | 描述 |
| 名称 | 描述 |
| -------- | -------- |
| double-conversion/cmake/ | CMake组织编译使用到的模板 |
| double-conversion/double-conversion/ | 源文件目录 |
| double-conversion/msvc/ | - |
| double-conversion/test/ | 测试用例源文件 |
| double-conversion/.gitignore | - |
| double-conversion/AUTHORS | - |
| double-conversion/BUILD | - |
| double-conversion/CMakeLists.txt | CMake方式顶层编译组织文件 |
| double-conversion/COPYING | - |
| double-conversion/Changelog | - |
| double-conversion/LICENSE | - |
| double-conversion/Makefile | - |
| double-conversion/README.md | - |
| double-conversion/SConstruct | - |
| double-conversion/WORKSPACE | - |
| double-conversion/cmake/ | CMake组织编译使用到的模板 |
| double-conversion/double-conversion/ | 源文件目录 |
| double-conversion/msvc/ | - |
| double-conversion/test/ | 测试用例源文件 |
| double-conversion/.gitignore | - |
| double-conversion/AUTHORS | - |
| double-conversion/BUILD | - |
| double-conversion/CMakeLists.txt | CMake方式顶层编译组织文件 |
| double-conversion/COPYING | - |
| double-conversion/Changelog | - |
| double-conversion/LICENSE | - |
| double-conversion/Makefile | - |
| double-conversion/README.md | - |
| double-conversion/SConstruct | - |
| double-conversion/WORKSPACE | - |
## 移植思路
......@@ -76,7 +76,7 @@ CMake方式可通过指定工具链进行交叉编译,修改并编译该库,
2. 执行编译
linux命令行中进入double-conversion的源文件目录(即标1所示目录),执行下列命令:
```
mkdir build && cd build
cmake .. -DBUILD_TESTING=ON -DOHOS_SYSROOT_PATH="..."
......@@ -90,24 +90,24 @@ CMake方式可通过指定工具链进行交叉编译,修改并编译该库,
**表2** 编译生成文件目录结构
| 名称 | 描述 |
| 名称 | 描述 |
| -------- | -------- |
| double-conversion/build/libdouble-conversion.a | 生成的静态库文件 |
| double-conversion/build/test/ | 目录下存放生成的测试用例和相关CMake缓存文件 |
| double-conversion/build/CMakeCache.txt | CMake构建过程中的缓存文件 |
| double-conversion/build/CMakeFiles/ | - |
| double-conversion/build/cmake_install.cmake | - |
| double-conversion/build/CTestTestfile.cmake | - |
| double-conversion/build/DartConfiguration.tcl | - |
| double-conversion/build/generated/ | - |
| double-conversion/build/Makefile | - |
| double-conversion/build/Testing/ | - |
| double-conversion/build/libdouble-conversion.a | 生成的静态库文件 |
| double-conversion/build/test/ | 目录下存放生成的测试用例和相关CMake缓存文件 |
| double-conversion/build/CMakeCache.txt | CMake构建过程中的缓存文件 |
| double-conversion/build/CMakeFiles/ | - |
| double-conversion/build/cmake_install.cmake | - |
| double-conversion/build/CTestTestfile.cmake | - |
| double-conversion/build/DartConfiguration.tcl | - |
| double-conversion/build/generated/ | - |
| double-conversion/build/Makefile | - |
| double-conversion/build/Testing/ | - |
## 测试
1. 搭建OpenHarmony环境
以Hi3516DV300为例,编译出OpenHarmony镜像,烧写到开发板,参考[开发Hi3516第一个示例程序](../quick-start/quickstart-lite-steps-hi3516-running.md)
以Hi3516DV300为例,编译出OpenHarmony镜像,烧写到开发板,相关操作可参考[快速入门小型系统部分](../quick-start/Readme-CN.md)
进入系统如下所示:
......@@ -129,7 +129,7 @@ CMake方式可通过指定工具链进行交叉编译,修改并编译该库,
```
上述命令执行结果部分展示:
```
test-bignum/Assign<
......@@ -178,12 +178,12 @@ CMake方式可通过指定工具链进行交叉编译,修改并编译该库,
**表3** 添加到工程后的目录结构
| 名称 | 描述 |
| 名称 | 描述 |
| -------- | -------- |
| OpenHarmony/third_party/double-conversion/BUILD.gn | 将三方库加入工程的gn适配文件 |
| OpenHarmony/third_party/double-conversion/build_thirdparty.py | GN调用shell命令脚本文件,由上面GN文件将相关命令传入,实现GN转CMake |
| OpenHarmony/third_party/double-conversion/config.gni | 三方库编译配置文件,可修改该文件来配置用例是否参与构建等 |
| OpenHarmony/third_party/double-conversion/double-conversion/ | 要移植的三方库目录 |
| OpenHarmony/third_party/double-conversion/BUILD.gn | 将三方库加入工程的gn适配文件 |
| OpenHarmony/third_party/double-conversion/build_thirdparty.py | GN调用shell命令脚本文件,由上面GN文件将相关命令传入,实现GN转CMake |
| OpenHarmony/third_party/double-conversion/config.gni | 三方库编译配置文件,可修改该文件来配置用例是否参与构建等 |
| OpenHarmony/third_party/double-conversion/double-conversion/ | 要移植的三方库目录 |
2. 添加gn到CMake适配文件
- **新增的BUILD.gn文件实现如下,其他采用CMake方式可独立编译的三方库移植到OpenHarmony平台时只需修改路径即可**
......@@ -289,7 +289,7 @@ CMake方式可通过指定工具链进行交叉编译,修改并编译该库,
执行下列命令
```
hb build -T //third_party/double-conversion:double-conversion
```
......
# 快速入门
- 轻量和小型系统快速入门(IDE方式,推荐)
- [轻量与小型系统入门概述](quickstart-ide-lite-overview.md)
- 准备轻量与小型系统环境
- [搭建Windows+Ubuntu混合开发环境](quickstart-ide-lite-env-setup-win-ubuntu.md)
- [获取源码](quickstart-ide-lite-sourcecode-acquire.md)
- [导入源码工程](quickstart-ide-lite-create-project.md)
- 运行“Hello World”
- Hi3861开发板
- [编写“Hello World”程序](quickstart-ide-lite-steps-hi3861-helloworld.md)
- [编译](quickstart-ide-lite-steps-hi3861-building.md)
- [烧录](quickstart-ide-lite-steps-hi3861-burn.md)
- [联网](quickstart-ide-lite-steps-hi3861-netconfig.md)
- [调试验证](quickstart-ide-lite-steps-hi3861-debug.md)
- [运行](quickstart-ide-lite-steps-hi3861-running.md)
- Hi3516开发板
- [编写“Hello World”程序](quickstart-ide-lite-steps-hi3516-helloworld.md)
- [编译](quickstart-ide-lite-steps-hi3516-building.md)
- [烧录](quickstart-ide-lite-steps-hi3516-burn.md)
- [运行](quickstart-ide-lite-steps-hi3516-running.md)
- 附录
- [Hi3861开发板介绍](quickstart-ide-lite-introduction-hi3861.md)
- [Hi3516开发板介绍](quickstart-ide-lite-introduction-hi3516.md)
- [编译形态整体说明](quickstart-build.md)
- 轻量和小型系统快速入门(安装包方式)
- [轻量与小型系统入门概述](quickstart-lite-overview.md)
- [搭建轻量与小型系统环境](quickstart-lite-env-setup.md)
- 运行“Hello World”
- Hi3861开发板
- [安装Hi3861开发板环境](quickstart-lite-steps-hi3861-setting.md)
- [编写“Hello World”程序](quickstart-lite-steps-hi3861-helloworld.md)
- [编译](quickstart-lite-steps-hi3861-building.md)
- [烧录](quickstart-lite-steps-hi3861-burn.md)
- [联网](quickstart-lite-steps-hi3861-netconfig.md)
- [调试验证](quickstart-lite-steps-hi3861-debug.md)
- [运行](quickstart-lite-steps-hi3861-running.md)
- Hi3516开发板
- [安装Hi3516开发板环境](quickstart-lite-steps-hi3516-setting.md)
- [编写“Hello World”程序](quickstart-lite-steps-hi3516-helloworld.md)
- [编译](quickstart-lite-steps-hi3516-building.md)
- [烧录](quickstart-lite-steps-hi3516-burn.md)
- [运行](quickstart-lite-steps-hi3516-running.md)
- 常见问题
- [hb安装异常](quickstart-lite-faq-hb.md)
- [编译异常](quickstart-lite-faq-compose.md)
- [烧录异常](quickstart-lite-faq-burning.md)
- 附录
- 开发板介绍
- [Hi3861开发板介绍](quickstart-lite-introduction-hi3861.md)
- [Hi3516开发板介绍](quickstart-lite-introduction-hi3516.md)
- [参考信息](quickstart-lite-reference.md)
- [使用HiTool烧录代码](quickstart-lite-hitool.md)
- [编译形态整体说明](quickstart-build.md)
- 标准系统快速入门(IDE方式,推荐)
- [标准系统入门概述](quickstart-ide-standard-overview.md)
- 准备标准系统环境
- [搭建Windows+Ubuntu混合开发环境](quickstart-ide-standard-env-setup-win-ubuntu.md)
- [获取源码](quickstart-ide-standard-sourcecode-acquire.md)
- [导入源码工程](quickstart-ide-standard-create-project.md)
- 运行“Hello World”
- Hi3516开发板
- [编写“Hello World”程序](quickstart-ide-standard-running-hi3516-create.md)
- [编译](quickstart-ide-standard-running-hi3516-build.md)
- [烧录](quickstart-ide-standard-running-hi3516-burning.md)
- [运行](quickstart-ide-standard-running-hi3516-running.md)
- RK3568开发板
- [编写“Hello World”程序](quickstart-ide-standard-running-rk3568-create.md)
- [编译](quickstart-ide-standard-running-rk3568-build.md)
- [烧录](quickstart-ide-standard-running-rk3568-burning.md)
- [运行](quickstart-ide-standard-running-rk3568-running.md)
- 附录
- [Hi3516开发板介绍](quickstart-ide-standard-board-introduction-hi3516.md)
- [RK3568开发板介绍](quickstart-ide-standard-board-introduction-rk3568.md)
- [编译形态整体说明](quickstart-build.md)
- 标准系统快速入门(安装包方式)
- [标准系统入门概述](quickstart-standard-overview.md)
- [搭建标准系统环境](quickstart-standard-env-setup.md)
- 运行“Hello World”
- Hi3516开发板
- [编写“Hello World”程序](quickstart-std-3516-create.md)
- [编译](quickstart-standard-running-hi3516-build.md)
- [烧录](quickstart-standard-running-hi3516-burning.md)
- [运行](quickstart-standard-running-hi3516-running.md)
- RK3568开发板
- [编写“Hello World”程序](quickstart-standard-running-rk3568-create.md)
- [编译](quickstart-standard-running-rk3568-build.md)
- [烧录](quickstart-standard-running-rk3568-burning.md)
- [运行](quickstart-standard-running-rk3568-running.md)
- 常见问题
- [hb安装异常](quickstart-standard-faq-hb.md)
- [编译异常](quickstart-standard-faq-compose.md)
- [烧录异常](quickstart-standard-faq-burning.md)
- 附录
- 开发板介绍
- [Hi3516开发板介绍](quickstart-standard-board-introduction-hi3516.md)
- [RK3568开发板介绍](quickstart-standard-board-introduction-rk3568.md)
- [参考信息](quickstart-standard-reference.md)
- [使用HiTool烧录代码](quickstart-standard-hitool.md)
- [编译形态整体说明](quickstart-build.md)
\ No newline at end of file
- [快速入门概述](quickstart-overview.md)
- 基于IDE入门
- 搭建开发环境
- [搭建Windows环境](quickstart-ide-env--win.md)
- [搭建Ubuntu环境](quickstart-ide-env-ubuntu.md)
- [配置远程访问环境](quickstart-ide-env-remote.md)
- [创建工程并获取源码](quickstart-ide-import-project.md)
- 轻量系统(基于Hi3861开发板)
- [编写“Hello World”程序](quickstart-ide-3861-helloworld.md)
- [编译](quickstart-ide-3861-build.md)
- [烧录](quickstart-ide-3861-burn.md)
- [运行](quickstart-ide-3861-running.md)
- 小型系统(基于Hi3516开发板)
- [编写“Hello World”程序](quickstart-ide-3516-helloworld.md)
- [编译](quickstart-ide-3516-build.md)
- [烧录](quickstart-ide-3516-burn.md)
- [运行](quickstart-ide-3516-running.md)
- 标准系统(基于RK3568开发板)
- [编写“Hello World”程序](quickstart-ide-3568-helloworld.md)
- [编译](quickstart-ide-3568-build.md)
- [烧录](quickstart-ide-3568-burn.md)
- [运行](quickstart-ide-3568-running.md)
- 基于命令行入门
- 搭建开发环境
- [准备开发环境](quickstart-pkg-prepare.md)
- [安装库和工具集](quickstart-pkg-install_package.md)
- [获取源码](quickstart-pkg-sourcecode.md)
- [安装编译工具](quickstart-pkg-install_tool.md)
- 轻量系统(基于Hi3861开发板)
- [安装Hi3861开发板特有环境](quickstart-pkg-3861-tool.md)
- [编写“Hello World”程序](quickstart-pkg-3861-helloworld.md)
- [编译](quickstart-pkg-3861-build.md)
- [烧录](quickstart-pkg-3861-burn.md)
- [运行](quickstart-pkg-3861-running.md)
- 小型系统(基于Hi3516开发板)
- [编写“Hello World”程序](quickstart-pkg-3516-helloworld.md)
- [编译](quickstart-pkg-3516-build.md)
- [烧录](quickstart-pkg-3516-burn.md)
- [运行](quickstart-pkg-3516-running.md)
- 标准系统(基于RK3568开发板)
- [编写“Hello World”程序](quickstart-pkg-3568-helloworld.md)
- [编译](quickstart-pkg-3568-build.md)
- [烧录](quickstart-pkg-3568-burn.md)
- [运行](quickstart-pkg-3568-running.md)
- 常用信息
- [配置代理](quickstart-pkg-common-proxy.md)
- [使用build.sh脚本编译源码](quickstart-pkg-common-build.md)
- [hb安装异常处理](quickstart-pkg-common-hberr.md)
- [编译异常处理](quickstart-pkg-common-builderr.md)
- [烧录异常处理](quickstart-pkg-common-burnerr.md)
- 附录
- [Hi3516开发板介绍](quickstart-appendix-hi3516.md)
- [Hi3861开发板介绍](quickstart-appendix-hi3861.md)
- [RK3568开发板介绍](quickstart-appendix-rk3568.md)
- [编译形态整体说明](quickstart-appendix-compiledform.md)
- [Hi3516标准系统入门(IDE方式)](quickstart-appendix-hi3516-ide.md)
- [Hi3516标准系统入门(命令行方式)](quickstart-appendix-hi3516-pkg.md)
# 编译形态整体说明
**编译构建支持的产品列表** (点击链接可知道具体产品配置及其相关差异)
| 编译形态 | 开发板 | 主芯片 | 内核 | 系统类型 |
| ----------------------------- | --------------- | ----------- | ----------- | ----------- |
| [neptune100](https://gitee.com/openharmony/vendor_hihope/blob/master/neptune_iotlink_demo/config.json) | neptune100 | winnermicro | liteos_m | mini |
| [rk3568](https://gitee.com/openharmony/vendor_hihope/blob/master/rk3568/config.json) | rk3568 | rockchip | linux | standard |
| [rk3568_mini_system](https://gitee.com/openharmony/vendor_hihope/blob/master/rk3568_mini_system/config.json) | rk3568 | rockchip | linux | standard |
| [bearpi_hm_micro](https://gitee.com/openharmony/vendor_bearpi/blob/master/bearpi_hm_micro/config.json) | bearpi_hm_micro | stm32mp1xx | liteos_a | small |
| [bearpi_hm_nano](https://gitee.com/openharmony/vendor_bearpi/blob/master/bearpi_hm_nano/config.json) | bearpi_hm_nano | hi3861v100 | liteos_m | mini |
| [wifiiot_hispark_pegasus](https://gitee.com/openharmony/vendor_hisilicon/blob/master/hispark_pegasus/config.json) | hispark_pegasus | hi3861v100 | liteos_m | mini |
| [ipcamera_hispark_aries](https://gitee.com/openharmony/vendor_hisilicon/blob/master/hispark_aries/config.json) | hispark_aries | hi3518ev300 | liteos_a | small |
| [ipcamera_hispark_taurus](https://gitee.com/openharmony/vendor_hisilicon/blob/master/hispark_taurus/config.json) | hispark_taurus | hi3516dv300 | liteos_a | small |
| [ipcamera_hispark_taurus_linux](https://gitee.com/openharmony/vendor_hisilicon/blob/master/hispark_taurus_linux/config.json) | hispark_taurus | hi3516dv300 | linux | small |
| [hispark_taurus_standard](https://gitee.com/openharmony/vendor_hisilicon/blob/master/hispark_taurus_standard/config.json) | hispark_taurus | hi3516dv300 | linux | standard |
| [watchos](https://gitee.com/openharmony/vendor_hisilicon/blob/master/watchos/config.json) | hispark_taurus | hi3516dv300 | linux | standard |
| [hispark_phoenix](https://gitee.com/openharmony/vendor_hisilicon/blob/master/hispark_phoenix/config.json) | hispark_phoenix | hi3751v350 | linux | standard |
| [hispark_taurus_mini_system](https://gitee.com/openharmony/vendor_hisilicon/blob/master/hispark_taurus_mini_system/config.json) | hispark_taurus | hi3516dv300 | liteos_a | mini |
| [hispark_pegasus_mini_system](https://gitee.com/openharmony/vendor_hisilicon/blob/master/hispark_pegasus_mini_system/config.json) | hispark_pegasus | hi3861v100 | liteos_m | mini |
| [gr5515_sk_iotlink_demo](https://gitee.com/openharmony/vendor_goodix/blob/master/gr5515_sk_iotlink_demo/config.json) | gr5515_sk | gr551x | liteos_m | mini |
| [gr5515_sk_xts_demo](https://gitee.com/openharmony/vendor_goodix/blob/master/gr5515_sk_xts_demo/config.json) | gr5515_sk | gr551x | liteos_m | mini |
| [wifi_demo](https://gitee.com/openharmony/vendor_asrmicro/blob/master/wifi_demo/config.json) | dev_wifi_a | asr582x | liteos_m | mini |
| [xts_demo](https://gitee.com/openharmony/vendor_asrmicro/blob/master/xts_demo/config.json) | dev_wifi_a | asr582x | liteos_m | mini |
| [display_demo](https://gitee.com/openharmony/vendor_bestechnic/blob/master/display_demo/config.json) | v200zr | bes2600 | liteos_m | mini |
| [xts_demo](https://gitee.com/openharmony/vendor_bestechnic/blob/master/xts_demo/config.json) | v200zr | bes2600 | liteos_m | mini |
| [iotlink_demo](https://gitee.com/openharmony/vendor_bestechnic/blob/master/iotlink_demo/config.json) | v200zr | bes2600 | liteos_m | mini |
| [mini_distributed_music_player](https://gitee.com/openharmony/vendor_bestechnic/blob/master/mini_distributed_music_player/config.json) | v200zr | bes2600 | liteos_m | mini |
| [niobe407](https://gitee.com/openharmony/vendor_talkweb/blob/master/niobe407/config.json) | niobe407 | stm32f4xx | liteos_m | mini |
| [qemu_mini_system_demo](https://gitee.com/openharmony/vendor_ohemu/blob/master/qemu_mini_system_demo/config.json) | arm_mps2_an386 | qemu | liteos_m | mini |
| [qemu_cksy_mini_system_demo](https://gitee.com/openharmony/vendor_ohemu/blob/master/qemu_csky_mini_system_demo/config.json) | SmartL_E802 | qemu | liteos_m | mini |
| [qemu_cm55_mini_system_demo](https://gitee.com/openharmony/vendor_ohemu/blob/master/qemu_cm55_mini_system_demo/config.json) | arm_mps3_an547 | qemu | liteos_m | mini |
| [qemu_xtensa_mini_system_demo](https://gitee.com/openharmony/vendor_ohemu/blob/master/qemu_xtensa_mini_system_demo/config.json) | esp32 | qemu | liteos_m | mini |
| [qemu_riscv_mini_system_demo](https://gitee.com/openharmony/vendor_ohemu/blob/master/qemu_riscv32_mini_system_demo/config.json) | ricsv32_virt | qemu | liteos_m | mini |
| [qemu_ca7_mini_system_demo](https://gitee.com/openharmony/vendor_ohemu/blob/master/qemu_ca7_mini_system_demo/config.json) | arm_virt | qemu | liteos_a | small |
| [qemu_small_system_demo](https://gitee.com/openharmony/vendor_ohemu/blob/master/qemu_small_system_demo/config.json) | arm_virt | qemu | liteos_a | small |
| [qemu_arm_linux_min](https://gitee.com/openharmony/vendor_ohemu/blob/master/qemu_arm_linux_min/config.json) | qemu-arm-linux | qemu | linux | standard |
| [qemu_arm_linux_headless](https://gitee.com/openharmony/vendor_ohemu/blob/master/qemu_arm_linux_headless/config.json) | qemu-arm-linux | qemu | linux | standard |
| [iotlink_demo](https://gitee.com/openharmony/vendor_chipsea/blob/master/iotlink_demo/config.json) | cst85_wblink | chipsea | liteos_m | mini |
| [dsoftbus_demo](https://gitee.com/openharmony/vendor_chipsea/blob/master/dsoftbus_demo/config.json) | cst85_wblink | chipsea | liteos_m | mini |
| [xts_demo](https://gitee.com/openharmony/vendor_chipsea/blob/master/xts_demo/config.json) | cst85_wblink | chipsea | liteos_m | mini |
# 编译形态整体说明
在编译过程中,需要根据实际需求选择不同的编译形态。单击下表中的链接可获取具体产品配置,从而了解其中差异。
**表1** 编译构建支持的产品列表
| **编译形态** | **开发板** | **主芯片** | **内核** | **系统类型** |
| -------- | -------- | -------- | -------- | -------- |
| [neptune100](https://gitee.com/openharmony/vendor_hihope/blob/master/neptune_iotlink_demo/config.json) | neptune100 | winnermicro | liteos_m | mini |
| [rk3568](https://gitee.com/openharmony/vendor_hihope/blob/master/rk3568/config.json) | rk3568 | rockchip | linux | standard |
| [rk3568_mini_system](https://gitee.com/openharmony/vendor_hihope/blob/master/rk3568_mini_system/config.json) | rk3568 | rockchip | linux | standard |
| [bearpi_hm_micro](https://gitee.com/openharmony/vendor_bearpi/blob/master/bearpi_hm_micro/config.json) | bearpi_hm_micro | stm32mp1xx | liteos_a | small |
| [bearpi_hm_nano](https://gitee.com/openharmony/vendor_bearpi/blob/master/bearpi_hm_nano/config.json) | bearpi_hm_nano | hi3861v100 | liteos_m | mini |
| [wifiiot_hispark_pegasus](https://gitee.com/openharmony/vendor_hisilicon/blob/master/hispark_pegasus/config.json) | hispark_pegasus | hi3861v100 | liteos_m | mini |
| [ipcamera_hispark_aries](https://gitee.com/openharmony/vendor_hisilicon/blob/master/hispark_aries/config.json) | hispark_aries | hi3518ev300 | liteos_a | small |
| [ipcamera_hispark_taurus](https://gitee.com/openharmony/vendor_hisilicon/blob/master/hispark_taurus/config.json) | hispark_taurus | hi3516dv300 | liteos_a | small |
| [ipcamera_hispark_taurus_linux](https://gitee.com/openharmony/vendor_hisilicon/blob/master/hispark_taurus_linux/config.json) | hispark_taurus | hi3516dv300 | linux | small |
| [hispark_taurus_standard](https://gitee.com/openharmony/vendor_hisilicon/blob/master/hispark_taurus_standard/config.json) | hispark_taurus | hi3516dv300 | linux | standard |
| [watchos](https://gitee.com/openharmony/vendor_hisilicon/blob/master/watchos/config.json) | hispark_taurus | hi3516dv300 | linux | standard |
| [hispark_phoenix](https://gitee.com/openharmony/vendor_hisilicon/blob/master/hispark_phoenix/config.json) | hispark_phoenix | hi3751v350 | linux | standard |
| [hispark_taurus_mini_system](https://gitee.com/openharmony/vendor_hisilicon/blob/master/hispark_taurus_mini_system/config.json) | hispark_taurus | hi3516dv300 | liteos_a | mini |
| [hispark_pegasus_mini_system](https://gitee.com/openharmony/vendor_hisilicon/blob/master/hispark_pegasus_mini_system/config.json) | hispark_pegasus | hi3861v100 | liteos_m | mini |
| [gr5515_sk_iotlink_demo](https://gitee.com/openharmony/vendor_goodix/blob/master/gr5515_sk_iotlink_demo/config.json) | gr5515_sk | gr551x | liteos_m | mini |
| [gr5515_sk_xts_demo](https://gitee.com/openharmony/vendor_goodix/blob/master/gr5515_sk_xts_demo/config.json) | gr5515_sk | gr551x | liteos_m | mini |
| [wifi_demo](https://gitee.com/openharmony/vendor_asrmicro/blob/master/wifi_demo/config.json) | dev_wifi_a | asr582x | liteos_m | mini |
| [xts_demo](https://gitee.com/openharmony/vendor_asrmicro/blob/master/xts_demo/config.json) | dev_wifi_a | asr582x | liteos_m | mini |
| [display_demo](https://gitee.com/openharmony/vendor_bestechnic/blob/master/display_demo/config.json) | v200zr | bes2600 | liteos_m | mini |
| [xts_demo](https://gitee.com/openharmony/vendor_bestechnic/blob/master/xts_demo/config.json) | v200zr | bes2600 | liteos_m | mini |
| [iotlink_demo](https://gitee.com/openharmony/vendor_bestechnic/blob/master/iotlink_demo/config.json) | v200zr | bes2600 | liteos_m | mini |
| [mini_distributed_music_player](https://gitee.com/openharmony/vendor_bestechnic/blob/master/mini_distributed_music_player/config.json) | v200zr | bes2600 | liteos_m | mini |
| [niobe407](https://gitee.com/openharmony/vendor_talkweb/blob/master/niobe407/config.json) | niobe407 | stm32f4xx | liteos_m | mini |
| [qemu_mini_system_demo](https://gitee.com/openharmony/vendor_ohemu/blob/master/qemu_mini_system_demo/config.json) | arm_mps2_an386 | qemu | liteos_m | mini |
| [qemu_csky_mini_system_demo](https://gitee.com/openharmony/vendor_ohemu/blob/master/qemu_csky_mini_system_demo/config.json) | SmartL_E802 | qemu | liteos_m | mini |
| [qemu_cm55_mini_system_demo](https://gitee.com/openharmony/vendor_ohemu/blob/master/qemu_cm55_mini_system_demo/config.json) | arm_mps3_an547 | qemu | liteos_m | mini |
| [qemu_xtensa_mini_system_demo](https://gitee.com/openharmony/vendor_ohemu/blob/master/qemu_xtensa_mini_system_demo/config.json) | esp32 | qemu | liteos_m | mini |
| [qemu_riscv_mini_system_demo](https://gitee.com/openharmony/vendor_ohemu/blob/master/qemu_riscv32_mini_system_demo/config.json) | ricsv32_virt | qemu | liteos_m | mini |
| [qemu_ca7_mini_system_demo](https://gitee.com/openharmony/vendor_ohemu/blob/master/qemu_ca7_mini_system_demo/config.json) | arm_virt | qemu | liteos_a | small |
| [qemu_small_system_demo](https://gitee.com/openharmony/vendor_ohemu/blob/master/qemu_small_system_demo/config.json) | arm_virt | qemu | liteos_a | small |
| [qemu_arm_linux_min](https://gitee.com/openharmony/vendor_ohemu/blob/master/qemu_arm_linux_min/config.json) | qemu-arm-linux | qemu | linux | standard |
| [qemu_arm_linux_headless](https://gitee.com/openharmony/vendor_ohemu/blob/master/qemu_arm_linux_headless/config.json) | qemu-arm-linux | qemu | linux | standard |
| [iotlink_demo](https://gitee.com/openharmony/vendor_chipsea/blob/master/iotlink_demo/config.json) | cst85_wblink | chipsea | liteos_m | mini |
| [dsoftbus_demo](https://gitee.com/openharmony/vendor_chipsea/blob/master/dsoftbus_demo/config.json) | cst85_wblink | chipsea | liteos_m | mini |
| [xts_demo](https://gitee.com/openharmony/vendor_chipsea/blob/master/xts_demo/config.json) | cst85_wblink | chipsea | liteos_m | mini |
# Hi3516标准系统入门(IDE方式)
除小型系统外,Hi3516DV300开发板还支持标准系统。此章节简要介绍如何使用IDE在Hi3516DV300开发板上进行标准系统的开发。
下方将展示如何在单板上运行第一个应用程序,其中包括新建应用程序、编译、烧写、运行等步骤,最终输出“Hello World!”。
在进行开发之前,请完成如下准备工作:
- [搭建开发环境](quickstart-ide-env--win.md)
- [创建工程并获取源码](quickstart-ide-import-project.md)
## 编写“Hello World”程序
### 示例目录
```
applications/sample/hello
│── BUILD.gn
│── include
│ └── helloworld.h
│── src
│ └── helloworld.c
├── bundle.json
build
└── subsystem_config.json
productdefine/common
└── products
└── Hi3516DV300.json
```
### 开发步骤
请在源码目录中通过以下步骤创建“Hello World”应用程序:
1. 创建目录,编写业务代码。
新建applications/sample/hello/src/helloworld.c目录及文件,代码如下所示,用户可以自定义修改打印内容(例如:修改World为OHOS)。其中helloworld.h包含字符串打印函数HelloPrint的声明。当前应用程序可支持标准C及C++的代码开发。
```
#include <stdio.h>
#include "helloworld.h"
int main(int argc, char **argv)
{
HelloPrint();
return 0;
}
void HelloPrint()
{
printf("\n\n");
printf("\n\t\tHello World!\n");
printf("\n\n");
}
```
再添加头文件applications/sample/hello/include/helloworld.h,代码如下所示。
```
#ifndef HELLOWORLD_H
#define HELLOWORLD_H
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif
#endif
void HelloPrint();
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif
#endif // HELLOWORLD_H
```
2. 新建编译组织文件。
1. 新建applications/sample/hello/BUILD.gn文件,内容如下所示:
```
import("//build/ohos.gni") # 导入编译模板
ohos_executable("helloworld") { # 可执行模块
sources = [ # 模块源码
"src/helloworld.c"
]
include_dirs = [ # 模块依赖头文件目录
"include"
]
cflags = []
cflags_c = []
cflags_cc = []
ldflags = []
configs = []
deps =[] # 部件内部依赖
part_name = "hello" # 所属部件名称,必选
install_enable = true # 是否默认安装(缺省默认不安装),可选
}
```
2. 新建applications/sample/hello/bundle.json文件,添加sample部件描述,内容如下所示。
```
{
"name": "@ohos/hello",
"description": "Hello world example.",
"version": "3.1",
"license": "Apache License 2.0",
"publishAs": "code-segment",
"segment": {
"destPath": "applications/sample/hello"
},
"dirs": {},
"scripts": {},
"component": {
"name": "hello",
"subsystem": "sample",
"syscap": [],
"features": [],
"adapted_system_type": [ "mini", "small", "standard" ],
"rom": "10KB",
"ram": "10KB",
"deps": {
"components": [],
"third_party": []
},
"build": {
"sub_component": [
"//applications/sample/hello:helloworld"
],
"inner_kits": [],
"test": []
}
}
}
```
bundle.json文件包含两个部分,第一部分描述该部件所属子系统的信息,第二部分component则定义该部件构建相关配置。添加的时候需要指明该部件包含的模块sub_component,假如有提供给其它部件的接口,需要在inner_kits中说明,假如有测试用例,需要在test中说明,inner_kits与test没有也可以不添加。
3. 修改子系统配置文件。
在build/subsystem_config.json中添加新建的子系统的配置。
```
"sample": {
"path": "applications/sample/hello",
"name": "sample"
},
```
4. 修改产品配置文件。
在productdefine/common/products/Hi3516DV300.json中添加对应的hello部件,直接添加到原有部件后即可。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 本章节操作是以OpenHarmony-v3.1-Release版本为例进行操作的,该版本中,Hi3516的配置文件为productdefine/common/products/Hi3516DV300.json;若源码版本大于OpenHarmony-v3.1-Release时,Hi3516的配置文件为vendor/hisilicon/Hi3516DV300/config.json。
```
"usb:usb_manager_native":{},
"applications:prebuilt_hap":{},
"sample:hello":{},
"wpa_supplicant-2.9:wpa_supplicant-2.9":{},
```
## 编译
DevEco Device Tool支持Hi3516DV300开发板的源码一键编译功能,提供编译工具链和编译环境依赖的检测及一键安装,简化复杂编译环境的同时,提升了编译的效率。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> Hi3516DV300编译环境为Ubuntu环境。
1. 在菜单栏中点击**Project Settings**,进入Hi3516DV300工程配置界面。
![zh-cn_image_0000001274745038](figures/zh-cn_image_0000001274745038.png)
2.**Tool Chain**页签中,DevEco Device Tool会自动检测依赖的编译工具链是否完备,如果提示部分工具缺失,可点击**Install**,自动安装所需工具链。
![zh-cn_image_0000001292531862](figures/zh-cn_image_0000001292531862.png)
3. 安装Hi3516DV300相关工具链,部分工具安装需要使用root权限,请在**TERMINAL**窗口输入用户密码进行安装。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 如果出现安装pip组件失败,可参考[修改Python源的方法](https://device.harmonyos.com/cn/docs/documentation/guide/ide-set-python-source-0000001227639986)进行修改,完成尝试重新安装。
![zh-cn_image_0000001274748606](figures/zh-cn_image_0000001274748606.png)
工具链自动安装完成后如下图所示。
![zh-cn_image_0000001296270098](figures/zh-cn_image_0000001296270098.png)
4.**hi3516dv300**配置页签中,设置源码的编译类型**build_type**,默认为“debug”类型,请根据需要进行修改。修改完成后,点击**Save**进行保存。
![zh-cn_image_0000001325269477](figures/zh-cn_image_0000001325269477.png)
5.**PROJECT TASKS**中,点击对应开发板下的**Build**,执行编译。
![zh-cn_image_0000001292849062](figures/zh-cn_image_0000001292849062.png)
6. 等待编译完成,在**TERMINAL**窗口输出“SUCCESS”,编译完成。
![zh-cn_image_0000001366345198](figures/zh-cn_image_0000001366345198.png)
编译完成后,可以在工程的**out**目录下,查看编译生成的文件,用于后续的烧录操作。
## 烧录
烧录是指将编译后的程序文件下载到芯片开发板上的动作,为后续的程序调试提供基础。DevEco Device Tool提供一键烧录功能,操作简单,能快捷、高效的完成程序烧录,提升烧录的效率。
Hi3516DV300的镜像烧录通过Windows环境进行烧录,开发者启动烧录操作后,DevEco Device Tool通过Remote远程模式,将Ubuntu环境下编译生成的待烧录程序文件拷贝至Windows目录下,然后通过Windows的烧录工具将程序文件烧录至开发板中。
Hi3516DV300开发板标准系统的烧录方式包括USB烧录、网口烧录两种方式,本文采用USB方式进行烧录。
### 前提条件
- 请安装Hi3516DV300开发板串口驱动程序,请参考[Hi3516DV300开发板串口驱动安装指导](https://device.harmonyos.com/cn/docs/documentation/guide/hi3516_hi3518-drivers-0000001050743695)
- 请安装Hi3516DV300开发板USB驱动程序,请参考[Hi3516DV300开发板USB驱动安装](https://device.harmonyos.com/cn/docs/documentation/guide/usb_driver-0000001058690393)
### 操作步骤
1. 请连接好电脑和待烧录开发板,需要连接USB口和串口,具体可参考[Hi3516开发板介绍](quickstart-appendix-hi3516.md)
2. 在DevEco Device Tool中,选择**REMOTE DEVELOPMENT &gt; Local PC**,查看远程计算机(Ubuntu开发环境)与本地计算机(Windows开发环境)的连接状态。
- 如果Local PC右边连接按钮为![zh-cn_image_0000001326512673](figures/zh-cn_image_0000001326512673.png),则远程计算机与本地计算机为已连接状态,不需要执行其他操作。
- 如果Local PC右边连接按钮为![zh-cn_image_0000001275432904](figures/zh-cn_image_0000001275432904.png),则点击绿色按钮进行连接。连接时DevEco Device Tool会重启服务,因此请不要在下载源码或源码编译过程中进行连接,否则会中断任务。
![zh-cn_image_0000001285658392](figures/zh-cn_image_0000001285658392.png)
3. 在菜单栏中点击**Project Settings**按钮,进入Hi3516DV300工程配置界面。
![zh-cn_image_0000001275752808](figures/zh-cn_image_0000001275752808.png)
4. 在“Tool Chain”页签,设置Uploader烧录器工具,可以通过Tool Chain页签中的Install按钮在线安装。
![Phoenix-upload](figures/Phoenix-upload.png)
5. 在“hi3516dv300”页签,设置烧录选项,包括upload_partitions_profile、upload_port和upload_protocol。
- upload_partitions_profile:选择待烧录程序的配置文件(已预置默认的配置文件),该配置文件会指定烧录文件名称、起始烧录地址、地址长度等信息;同时请勾选**Enable to use upload_partitions_profile for upload**选项。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 如需修改烧录profile文件,在设置烧录分区起始地址和分区长度时,应根据实际待烧录文件的大小进行设置,要求设置的烧录分区大小,要大于待烧录文件的大小;同时,各烧录文件的分区地址设置不能出现重叠。
>
> 首次烧录,请勾选**Enable to use upload_partitions_profile for upload**选项,会自动生成upload_partitions文件。再次烧录时,可根据实际情况选择生成upload_partitions文件进行自定义烧录,也可以再勾选**Enable to use upload_partitions_profile for upload**选项,使用upload_partitions_profile重新生成upload_partitions文件用于烧录。
- upload_protocol:选择烧录协议,固定选择“hiburn-usb”。
- upload_port:选择已查询到的串口号。
![zh-cn_image_0000001338622229](figures/zh-cn_image_0000001338622229.png)
6. 所有的配置都修改完成后,在工程配置页签的顶部,点击**Save**进行保存。
7. 点击hi3516dv300下的**Upload**按钮。
![zh-cn_image_0000001276281922](figures/zh-cn_image_0000001276281922.png)
此时待烧录文件会从Ubuntu系统传输到Windows下,传输完成后界面显示“Operation paused, Please press Enter key to continue”时,请点击**Enter**键启动烧录。
![zh-cn_image_0000001326201857](figures/zh-cn_image_0000001326201857.png)
8. 在终端窗口显示如下提示信息时,请在15秒内,按住Update键,插拔USB线,最后松开Update键启动烧录。
![zh-cn_image_0000001276122010](figures/zh-cn_image_0000001276122010.png)
启动烧录后,界面提示**SUCCESS**信息时,表示烧录成功。
![zh-cn_image_0000001275802150](figures/zh-cn_image_0000001275802150.png)
9. 烧录成功后,请根据运行章节进行操作,启动系统。
## 运行
### 启动系统
烧录完成后通过以下步骤启动系统:
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 初次烧写标准系统,需要完成以下配置,后续烧写或者启动,可以跳过以下操作。
1. 在DevEco Device Tool中,点击Monitor,打开串口工具。
![quickstart-appendix-hi3516-ide-run](figures/quickstart-appendix-hi3516-ide-run.png)
2. 重启开发板,在倒计时结束前,按任意键进入系统。
![press-any-key-to-enter-the-system](figures/press-any-key-to-enter-the-system.gif)
3. 通过以下两条命令设置启动参数。
```
setenv bootargs 'mem=640M console=ttyAMA0,115200 mmz=anonymous,0,0xA8000000,384M clk_ignore_unused rootdelay=10 hardware=Hi3516DV300 init=/init root=/dev/ram0 rw blkdevparts=mmcblk0:1M(boot),15M(kernel),20M(updater),2M(misc),3307M(system),256M(vendor),-(userdata)';
```
```
setenv bootcmd 'mmc read 0x0 0x82000000 0x800 0x4800; bootm 0x82000000'
```
![setenv-bootargs](figures/setenv-bootargs.png)
4. 保存参数设置。
```
save
```
![Save the parameter settings](figures/quickstart-appendix-hi3516-ide-run-set.png)
5. 重启开发板,完成系统启动。
```
reset
```
![start the system](figures/quickstart-appendix-hi3516-ide-run-start.png)
### 运行“Hello World”
设备启动后打开串口工具,在任意目录下输入命令helloworld后回车,界面打印“Hello World!”,程序运行成功。
![helloworld](figures/helloworld.png)
### 下一步
恭喜!您已经完成了标准系统的快速入门,接下来可[开发一个小示例](../guide/device-clock-guide.md),进一步熟悉OpenHarmony的开发。
# 编写“Hello World”程序
# Hi3516标准系统入门(命令行方式)
除小型系统外,Hi3516DV300开发板还支持标准系统。此章节简要介绍如何使用命令行在Hi3516DV300开发板上进行标准系统的开发。
下方将展示如何在单板上运行第一个应用程序,其中包括新建应用程序、编译、烧写、运行等步骤,最终输出“Hello World!”。
## 示例目录
在进行开发之前,请首先完成[搭建开发环境](quickstart-pkg-prepare.md)
## 编写“Hello World”程序
### 示例目录
示例完整目录如下。
```
applications/sample/hello
│── BUILD.gn
│── include
│ └── helloworld.h
│── src
│ └── helloworld.c
├── bundle.json
build
└── subsystem_config.json
vendor/hisilicon
└── Hi3516DV300
└── config.json
│── BUILD.gn
│── include
│ └── helloworld.h
│── src
│ └── helloworld.c
├── bundle.json
build
└── subsystem_config.json
vendor/hisilicon
└── Hi3516DV300
└── config.json
```
## 开发步骤
### 开发步骤
请在源码目录中通过以下步骤创建“Hello World”应用程序:
1. 创建目录,编写业务代码。
新建applications/sample/hello/src/helloworld.c目录及文件,代码如下所示,用户可以自定义修改打印内容(例如:修改World为OHOS)。其中helloworld.h包含字符串打印函数HelloPrint的声明。当前应用程序可支持标准C及C++的代码开发。
新建applications/sample/hello/src/helloworld.c目录及文件,代码如下所示,用户可以自定义修改打印内容(例如:修改World为OH)。其中helloworld.h包含字符串打印函数HelloPrint的声明。当前应用程序可支持标准C及C++的代码开发。
```
#include <stdio.h>
#include "helloworld.h"
int main(int argc, char **argv)
{
HelloPrint();
return 0;
}
void HelloPrint()
{
printf("\n\n");
......@@ -55,7 +58,7 @@ vendor/hisilicon
再添加头文件applications/sample/hello/include/helloworld.h,代码如下所示。
```
#ifndef HELLOWORLD_H
#define HELLOWORLD_H
......@@ -64,9 +67,7 @@ vendor/hisilicon
extern "C" {
#endif
#endif
void HelloPrint();
#ifdef __cplusplus
#if __cplusplus
}
......@@ -76,9 +77,8 @@ vendor/hisilicon
```
2. 新建编译组织文件。
1. 新建applications/sample/hello/BUILD.gn文件,内容如下所示:
```
import("//build/ohos.gni") # 导入编译模板
ohos_executable("helloworld") { # 可执行模块
......@@ -99,7 +99,7 @@ vendor/hisilicon
}
```
2. 新建applications/sample/hello/bundle.json文件,添加sample部件描述,内容如下所示。
```
{
"name": "@ohos/hello",
......@@ -138,10 +138,9 @@ vendor/hisilicon
bundle.json文件包含两个部分,第一部分描述该部件所属子系统的信息,第二部分component则定义该部件构建相关配置。添加的时候需要指明该部件包含的模块sub_component,假如有提供给其它部件的接口,需要在inner_kits中说明,假如有测试用例,需要在test中说明,inner_kits与test没有也可以不添加。
3. 修改子系统配置文件。
在build/subsystem_config.json中添加新建的子系统的配置。
```
"sample": {
"path": "applications/sample/hello",
......@@ -150,13 +149,162 @@ vendor/hisilicon
```
4. 修改产品配置文件。
在vendor/hisilicon/Hi3516DV300/config.json中添加对应的hello部件,直接添加到原有部件后即可。
```
"usb:usb_manager_native":{},
"applications:prebuilt_hap":{},
"sample:hello":{},
"wpa_supplicant-2.9:wpa_supplicant-2.9":{},
```
## 编译
OpenHarmony支持hb和build.sh两种编译方式。此处介绍hb方式,build.sh脚本编译方式请参考[使用build.sh脚本编译源码](quickstart-pkg-common-build.md#使用buildsh脚本编译源码)
想要详细了解OpenHarmony编译构建模块功能的开发者可参考[编译构建指南](../subsystems/subsys-build-all.md)
### 前提条件
- 已正确[安装库和工具集](quickstart-pkg-install_package.md)
- 已正确[安装编译工具](quickstart-pkg-install_tool.md)
- “Hello World”程序已编写完成。
- 可正常登录Ubuntu环境。
### 操作步骤
请进入源码根目录,执行如下命令进行编译:
1. 设置编译路径。
```
hb set
```
2. 选择当前路径。
```
.
```
3. 在hisilicon下选择hispark_taurus_standard并回车。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
>
> 同样的开发板在适配不同的场景时,要采用的编译形态不同(即此处要选择的product不同),请参考[编译形态整体说明](quickstart-appendix-compiledform.md)。
**图1** Hi3516编译设置图例  
![quick-start-hi3516-standard-build](figures/quick-start-hi3516-standard-build.png)
4. 执行编译。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> - 单独编译一个部件(例如hello),可使用“hb build -T _目标名称_”进行编译。
>
> - 增量编译整个产品,可使用“hb build”进行编译。
>
> - 完整编译整个产品,可使用“hb build -f”进行编译。
>
> 此处以完整编译整个产品为例进行说明。
```
hb build -f
```
5. 编译结束后,出现“build success”字样,则证明构建成功。
> ![icon-notice.gif](public_sys-resources/icon-notice.gif) **须知:**
> 编译结果文件及编译日志文件获取路径:out/hi3516dv300。
## 烧录
针对Hi3516DV300开发板,除了DevEco Device Tool(操作方法请参考[烧录](quickstart-appendix-hi3516-ide.md#烧录))外,还可以使用HiTool进行烧录。
### 前提条件
- 开发板相关源码已编译完成,已形成烧录文件。
- 客户端(操作平台,例如Windows系统)已下载并安装[HiTool工具](http://www.hihope.org/download/download.aspx)
- 客户端(操作平台,例如Windows系统)已安装USB驱动,可参考[Hi3516DV300开发板USB驱动安装指导](https://gitee.com/link?target=https%3A%2F%2Fdevice.harmonyos.com%2Fcn%2Fdocs%2Fdocumentation%2Fguide%2Fusb_driver-0000001058690393)
- 客户端已安装串口终端工具(例如IPOP)。
- 使用USB线缆、串口线缆连接客户端与开发板。
### 操作步骤
1. 准备烧录相关文件。
1. 在客户端新建用于保存烧录文件的文件夹,例如D:\L2。
2. 将编译完成的源码包下载至客户端并解压,将烧录相关文件拷贝至步骤1中新建的文件夹。
Hi3516DV300开发板烧写所需文件为:boot.img、Hi3516DV300-emmc.xml、system.img、u-boot-hi3516dv300_emmc.bin、uImage、updater.img、userdata.img、vendor.img。
2. 使用HiTool烧录。
1. 打开HiTool。
2. 设置HiTool参数。
传输方式选择USB口,烧写方式选择烧写eMMC(单板的存储介质为eMMC)。
3. 单击浏览在步骤1创建的文件夹中选择烧写配置文件(例如Hi3516DV300-emmc.xml)。
![quickstart-hi3516-standard-hitool-select](figures/quickstart-hi3516-standard-hitool-select.png)
4. 单击烧写后,按住开发板上串口旁的按钮(Update键),并拔插USB线(上下电)。。
烧录开始后,可以在HiTool工具下方的控制台区域观察到烧录过程中的打印信息。
烧录完成后,HiTool弹出提示框显示烧写成功。
5. 单击确定。
3. 导入启动参数。
1. 使用终端工具打开串口。
2. 拔插开发板电源使其重启,3s内在串口终端输入回车。
终端界面中出现hisilicon \#表示已连接开发板串口。
3. 在串口终端拷贝如下启动参数后,按回车完成配置。
```
setenv bootargs 'mem=640M console=ttyAMA0,115200 mmz=anonymous,0,0xA8000000,384M clk_ignore_unused androidboot.selinux=permissive rootdelay=10 hardware=Hi3516DV300 init=/init root=/dev/ram0 rw blkdevparts=mmcblk0:1M(boot),15M(kernel),20M(updater),2M(misc),3307M(system),256M(vendor),-(userdata)';setenv bootcmd 'mmc read 0x0 0x82000000 0x800 0x4800; bootm 0x82000000'
saveenv
reset
```
> ![icon-notice.gif](public_sys-resources/icon-notice.gif) **须知:**
> 输入启动参数时,请勿自行删除其中的空行。
## 运行
系统启动成功后,取源码out目录下的helloworld可执行文件放入系统的bin目录,通过以下步骤运行“Hello World”。
### 操作步骤
1. 在启动界面进入bin目录。
```
cd bin
```
2. 进入bin目录后可以看到helloworld文件,通过以下命令运行helloworld程序。
```
./helloworld
```
界面打印“Hello World!”,程序运行成功。
### 下一步学习
恭喜!您已经完成了标准系统的快速入门,接下来可[开发一个小示例](../guide/device-clock-guide.md),进一步熟悉OpenHarmony的开发。
......@@ -7,7 +7,7 @@ Hi3516DV300作为新一代行业专用Smart HD IP摄像机SOC,集成新一代I
**图1** Hi3516单板正面外观图  
![zh-cn_image_0000001271234773](figures/zh-cn_image_0000001271234773.png)
![zh-cn_image_0000001305463846](figures/zh-cn_image_0000001305463846.png)
## 开发板规格
......
......@@ -3,17 +3,17 @@
## 简介
Hi3861开发板是一片大约2cm\*5cm大小的开发板,是一款高度集成的2.4GHz WLAN SoC芯片,集成IEEE 802.11b/g/n基带和RF(Radio Frequency)电路。支持OpenHarmony,并配套提供开放、易用的开发和调试运行环境。
Hi3861开发板是一片大约2cm\*5cm大小的开发板,是一款高度集成的2.4GHz WLAN SoC芯片,集成IEEE 802.11b/g/n基带和RF(Radio Frequency)电路。支持,并配套提供开放、易用的开发和调试运行环境。
**图1** Hi3861开发板外观图  
![zh-cn_image_0000001226634692](figures/zh-cn_image_0000001226634692.png)
![hi3861-front](figures/hi3861-front.png)
另外,Hi3861开发板还可以通过与Hi3861底板连接,扩充自身的外设能力,底板如下图所示。
**图2** Hi3861底板外观图  
![zh-cn_image_0000001226794660](figures/zh-cn_image_0000001226794660.png)
![hi3861-rear](figures/hi3861-rear.png)
- RF电路包括功率放大器PA(Power Amplifier)、低噪声放大器LNA(Low Noise Amplifier)、RF Balun、天线开关以及电源管理等模块;支持20MHz标准带宽和5MHz/10MHz窄带宽,提供最大72.2Mbit/s物理层速率。
......@@ -25,7 +25,7 @@ Hi3861开发板是一片大约2cm\*5cm大小的开发板,是一款高度集成
**图3** Hi3861功能框图  
![zh-cn_image_0000001271234729](figures/zh-cn_image_0000001271234729.png)
![hi3861-function](figures/hi3861-function.png)
## 资源和约束
......@@ -47,22 +47,22 @@ Hi3861开发板资源十分有限,整板共2MB FLASH,352KB RAM。在编写
| 其他信息 | -&nbsp;封装:QFN-32,5mm×5mm<br/>-&nbsp;工作温度:-40℃&nbsp;&nbsp;+85℃ |
## OpenHarmony关键特性
## 关键特性
OpenHarmony基于Hi3861平台提供了多种开放能力,提供的关键组件如下表所示。
基于Hi3861平台提供了多种开放能力,提供的关键组件如下表所示。
**表2** OpenHarmony关键组件列表
**表2** 关键组件列表
| 组件名 | 能力介绍 |
| -------- | -------- |
| WLAN服务 | 提供WLAN服务能力。包括:station和hotspot模式的连接、断开、状态查询等。 |
| 模组外设控制 | 提供操作外设的能力。包括:I2C、I2S、ADC、UART、SPI、SDIO、GPIO、PWM、FLASH等。 |
| 分布式软总线 | 在OpenHarmony分布式网络中,提供设备被发现、数据传输的能力。 |
| 分布式软总线 | 在分布式网络中,提供设备被发现、数据传输的能力。 |
| 设备安全绑定 | 提供在设备互联场景中,数据在设备之间的安全流转的能力。 |
| 基础加解密 | 提供密钥管理、加解密等能力。 |
| 系统服务管理 | 系统服务管理基于面向服务的架构,提供了OpenHarmony统一化的系统服务开发框架。 |
| 启动引导 | 提供系统服务的启动入口标识。在系统服务管理启动时,调用bootstrap标识的入口函数,并启动系统服务。 |
| 系统服务管理 | 系统服务管理基于面向服务的架构,提供了统一化的系统服务开发框架。 |
| 启动引导 | 提供系统服务的启动入口标识。在系统服务管理启动时,调用boostrap标识的入口函数,并启动系统服务。 |
| 系统属性 | 提供获取与设置系统属性的能力。 |
| 基础库 | 提供公共基础库能力。包括:文件操作、KV存储管理等。 |
| DFX | 提供DFX能力。包括:流水日志、时间打点等。 |
| XTS | 提供OpenHarmony生态认证测试套件的集合能力。 |
| XTS | 提供生态认证测试套件的集合能力。 |
......@@ -7,11 +7,11 @@ RK3568开发板基于Rockchip RK3568芯片,集成双核心架构GPU以及高
**图1** RK3568开发板正面  
![zh-cn_image_0000001271442129](figures/zh-cn_image_0000001271442129.png)
![rk3568-front](figures/rk3568-front.png)
**图2** RK3568开发板背面  
![zh-cn_image_0000001271322293](figures/zh-cn_image_0000001271322293.png)
![rk3568-rear](figures/rk3568-rear.png)
## 开发板规格
......
# 编译
1. 在Projects中,点击**Settings**按钮,进入Hi3516DV300配置界面
DevEco Device Tool支持Hi3516DV300开发板的源码一键编译功能,提供编译工具链和编译环境依赖的检测及一键安装,简化复杂编译环境的同时,提升了编译的效率
![zh-cn_image_0000001265492885](figures/zh-cn_image_0000001265492885.png)
2. 在Tool Chain页签中,DevEco Device Tool会自动检测依赖的编译工具链是否完备,如果提示部分工具缺失,可点击**Install**按钮,自动安装所需工具链。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> Hi3516DV300编译环境为Ubuntu环境。
![zh-cn_image_0000001227277128](figures/zh-cn_image_0000001227277128.png)
3. 安装Hi3516DV300相关工具链,部分工具安装需要使用root权限,请在“TERMINAL”窗口输入用户密码进行安装。
1. 在菜单栏中点击**Project Settings**,进入Hi3516DV300工程配置界面。
![zh-cn_image_0000001274745038](figures/zh-cn_image_0000001274745038.png)
2. 在“Tool Chain”页签中,DevEco Device Tool会自动检测依赖的编译工具链是否完备,如果提示部分工具缺失,可单击**Install**,自动安装所需工具链。
![zh-cn_image_0000001307480750](figures/zh-cn_image_0000001307480750.png)
3. 安装Hi3516DV300相关工具链,部分工具安装需要使用root权限,请在“TERMINAL”窗口输入用户密码进行安装。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 如果出现安装pip组件失败,可参考[修改Python源的方法](https://device.harmonyos.com/cn/docs/documentation/guide/ide-set-python-source-0000001227639986)进行修改,完成尝试重新安装。
![zh-cn_image_0000001220852755](figures/zh-cn_image_0000001220852755.png)
![zh-cn_image_0000001360080305](figures/zh-cn_image_0000001360080305.png)
工具链自动安装完成后如下图所示。
![zh-cn_image_0000001227757036](figures/zh-cn_image_0000001227757036.png)
![zh-cn_image_0000001307320918](figures/zh-cn_image_0000001307320918.png)
4. 在“hi3516dv300”配置页签中,设置源码的编译类型**build_type**,默认为“debug“类型,请根据需要进行修改。然后点击**Save**按钮进行保存。
4. 在“hi3516dv300”配置页签中,设置源码的编译类型**build_type**,默认为“debug”类型,请根据需要进行修改。修改完成后,单击**Save**进行保存。
![zh-cn_image_0000001221172711](figures/zh-cn_image_0000001221172711.png)
![zh-cn_image_0000001307160958](figures/zh-cn_image_0000001307160958.png)
5. 在“PROJECT TASKS”中,点击对应开发板下的**Build**按钮,执行编译。
5. 在“PROJECT TASKS”中,单击对应开发板下的**Build**,执行编译。
![zh-cn_image_0000001265772913](figures/zh-cn_image_0000001265772913.png)
![zh-cn_image_0000001360439881](figures/zh-cn_image_0000001360439881.png)
6. 等待编译完成,在**TERMINAL**窗口输出“SUCCESS”,编译完成。
![zh-cn_image_0000001221012768](figures/zh-cn_image_0000001221012768.png)
![zh-cn_image_0000001307480754](figures/zh-cn_image_0000001307480754.png)
编译完成后,可以在工程的**out**目录下,查看编译生成的文件,用于后续的[Hi3516DV300开发板烧录](quickstart-ide-standard-running-hi3516-burning.md)
编译完成后,可以在工程的**out**目录下,查看编译生成的文件,用于后续的[Hi3516DV300开发板烧录](quickstart-ide-3516-burn.md)
......@@ -3,61 +3,68 @@
烧录是指将编译后的程序文件下载到芯片开发板上的动作,为后续的程序调试提供基础。DevEco Device Tool提供一键烧录功能,操作简单,能快捷、高效的完成程序烧录,提升烧录的效率。
Hi3516DV300的镜像烧录通过Windows环境进行烧录,开发者启动烧录操作后,DevEco Device Tool通过Remote远程模式,将Ubuntu环境下编译生成的待烧录程序文件拷贝至Windows目录下,然后通过Windows的烧录工具将程序文件烧录至开发板中。
Hi3516DV300开发板小型系统的烧录方式包括USB烧录、网口烧录两种方式,本文采用USB方式进行烧录。
1. 请连接好电脑和待烧录开发板,需要连接USB口和串口,具体可参考[Hi3516DV300开发板介绍](quickstart-lite-introduction-hi3516.md)
## 前提条件
- 代码已[编译](quickstart-ide-3516-build.md)完成。
- 请安装Hi3516DV300开发板串口驱动程序,请参考[Hi3516DV300开发板串口驱动安装指导](https://device.harmonyos.com/cn/docs/documentation/guide/hi3516_hi3518-drivers-0000001050743695)
- 请安装Hi3516DV300开发板USB驱动程序,请参考[Hi3516DV300开发板USB驱动安装](https://device.harmonyos.com/cn/docs/documentation/guide/usb_driver-0000001058690393)
2. 根据[Hi3516DV300开发板串口驱动安装指导](https://gitee.com/link?target=https%3A%2F%2Fdevice.harmonyos.com%2Fcn%2Fdocs%2Fdocumentation%2Fguide%2Fhi3516_hi3518-drivers-0000001050743695)[Hi3516DV300开发板USB驱动安装指导](https://device.harmonyos.com/cn/docs/documentation/guide/usb_driver-0000001058690393)安装USB驱动及USB转串口的驱动。若您的设备中已安装此驱动,请忽略该步骤。
3. 在DevEco Device Tool中,选择REMOTE DEVELOPMENT &gt; Local PC,查看远程计算机(Ubuntu开发环境)与本地计算机(Windows开发环境)的连接状态。
- 如果Local PC右边连接按钮为![zh-cn_image_0000001261315939](figures/zh-cn_image_0000001261315939.png),则远程计算机与本地计算机为已连接状态,不需要执行其他操作。
- 如果Local PC右边连接按钮为![zh-cn_image_0000001261515989](figures/zh-cn_image_0000001261515989.png),则点击绿色按钮进行连接。连接时DevEco Device Tool会重启服务,因此请不要在下载源码或源码编译过程中进行连接,否则会中断任务。
## 操作步骤
![zh-cn_image_0000001261395999](figures/zh-cn_image_0000001261395999.png)
1. 请连接好电脑和待烧录开发板,需要连接USB口和串口,具体可参考[Hi3516DV300开发板介绍](quickstart-appendix-hi3516.md)
2. 在DevEco Device Tool中,选择**REMOTE DEVELOPMENT &gt; Local PC**,查看远程计算机(Ubuntu开发环境)与本地计算机(Windows开发环境)的连接状态。
- 如果Local PC右边连接按钮为![zh-cn_image_0000001326512673](figures/zh-cn_image_0000001326512673.png),则远程计算机与本地计算机为已连接状态,不需要执行其他操作。
- 如果Local PC右边连接按钮为![zh-cn_image_0000001275432904](figures/zh-cn_image_0000001275432904.png),则点击绿色按钮进行连接。连接时DevEco Device Tool会重启服务,因此请不要在下载源码或源码编译过程中进行连接,否则会中断任务。
4. 在菜单栏中点击**Project Settings**按钮,进入Hi3516DV300工程配置界面。
![zh-cn_image_0000001285658392](figures/zh-cn_image_0000001285658392.png)
![zh-cn_image_0000001198566364](figures/zh-cn_image_0000001198566364.png)
3. 在菜单栏中点击**Project Settings**按钮,进入Hi3516DV300工程配置界面。
5. 在“Tool Chain”页签,设置Uploader烧录器工具,可以通过Tool Chain页签中的Install按钮在线安装。
![zh-cn_image_0000001198566365](figures/zh-cn_image_0000001198566365.png)
6. 在“hi3516dv300”页签,设置烧录选项,包括upload_partitions、upload_port和upload_protocol。
- upload_partitions:选择待烧录的文件,默认情况下会同时烧录fastboot、kernel、rootfs和userfs。DevEco Device Tool已预置默认的烧录文件信息,包括起始地址、分区大小、待烧录文件地址等,开发者可根据实际情况进行调整,点击每个待烧录文件后的![zh-cn_image_0000001275592884.png](figures/zh-cn_image_0000001275592884.png)按钮进行修改。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 在设置烧录分区起始地址和分区长度时,应根据实际待烧录文件的大小进行设置,要求设置的烧录分区大小,要大于待烧录文件的大小;同时,各烧录文件的分区地址设置不能出现重叠。
![zh-cn_image_0000001275752808](figures/zh-cn_image_0000001275752808.png)
![zh-cn_image_0000001312778829](figures/zh-cn_image_0000001312778829.png)
4. 在“Tool Chain”页签,设置Uploader烧录器工具,可以通过Tool Chain页签中的Install按钮在线安装。
![Phoenix-upload](figures/Phoenix-upload.png)
5. 在“hi3516dv300”页签,设置烧录选项,包括upload_partitions、upload_port和upload_protocol。
- upload_partitions:选择待烧录的文件,默认情况下会同时烧录fastboot、kernel、rootfs和userfs。DevEco Device Tool已预置默认的烧录文件信息,包括起始地址、分区大小、待烧录文件地址等,开发者可根据实际情况进行调整,点击每个待烧录文件后的![zh-cn_image_0000001275592884](figures/zh-cn_image_0000001275592884.png)按钮进行修改。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 在设置烧录分区起始地址和分区长度时,应根据实际待烧录文件的大小进行设置,要求设置的烧录分区大小,要大于待烧录文件的大小;同时,各烧录文件的分区地址设置不能出现重叠。
![3516-small-partitions](figures/3516-small-partitions.png)
- upload_protocol:选择烧录协议,固定选择“hiburn-usb”。
- upload_port:选择已查询到的串口号。
![zh-cn_image_0000001223190441](figures/zh-cn_image_0000001223190441.png)
7. 所有的配置都修改完成后,在工程配置页签的顶部,点击**Save**进行保存。
8. 点击hi3516dv300下的**Upload**按钮。
![3516-small-usb](figures/3516-small-usb.png)
6. 所有的配置都修改完成后,在工程配置页签的顶部,点击**Save**进行保存。
7. 点击hi3516dv300下的**Upload**按钮。
![zh-cn_image_0000001266887264](figures/zh-cn_image_0000001266887264.png)
![zh-cn_image_0000001326234609](figures/zh-cn_image_0000001326234609.png)
此时待烧录文件会从Ubuntu系统传输到Windows下,传输完成后界面显示“Operation paused, Please press Enter key to continue”时,请点击**Enter**键启动烧录。
![zh-cn_image_0000001114129426](figures/zh-cn_image_0000001114129426.png)
![zh-cn_image_0000001275835836](figures/zh-cn_image_0000001275835836.png)
9. 在终端窗口显示如下提示信息时,请在15秒内,按住Update键,插拔USB线,最后松开Update键启动烧录。
8. 在终端窗口显示如下提示信息时,请在15秒内,按住Update键,插拔USB线,最后松开Update键启动烧录。
![zh-cn_image_0000001326412233.png](figures/zh-cn_image_0000001326412233.png)
![zh-cn_image_0000001326412233](figures/zh-cn_image_0000001326412233.png)
启动烧录后,界面提示**SUCCESS**信息时,表示烧录成功。
启动烧录后,界面提示**SUCCESS**信息时,表示烧录成功。
![zh-cn_image_0000001160649343](figures/zh-cn_image_0000001160649343.png)
![zh-cn_image_0000001276317464](figures/zh-cn_image_0000001276317464.png)
10. 烧录成功后,请根据运行章节进行操作,启动系统。
\ No newline at end of file
9. 烧录成功后,请根据运行章节进行操作,启动系统。
......@@ -4,12 +4,17 @@
下方将展示如何在单板上运行第一个应用程序,其中包括新建应用程序、编译、烧写、运行等步骤,最终输出“Hello World!”。
## 前提条件
已参考[创建工程并获取源码](quickstart-ide-import-project.md),创建Hi3516开发板的源码工程。
## 示例目录
示例完整目录如下:
```
applications/sample/hello
│── BUILD.gn
......@@ -20,13 +25,13 @@ applications/sample/hello
## 开发步骤
请在源码目录中通过以下步骤创建“Hello World”应用程序
请在源码目录中通过以下步骤创建“Hello World”应用程序
1. 新建目录及源码。
新建applications/sample/hello/src/helloworld.c目录及文件,代码如下所示,用户可以自定义修改打印内容(例如:修改OHOS为World)。当前应用程序可支持标准C及C++的代码开发。
新建**applications/sample/hello/src/helloworld.c**目录及文件,代码如下所示,用户可以自定义修改打印内容(例如:修改OHOS为World)。当前应用程序可支持标准C及C++的代码开发。
```
#include <stdio.h>
......@@ -41,10 +46,10 @@ applications/sample/hello
```
2. 新建编译组织文件。
新建applications/sample/hello/BUILD.gn文件,内容如下所示:
新建**applications/sample/hello/BUILD.gn**文件,内容如下所示:
```
import("//build/lite/config/component/lite_component.gni")
lite_component("hello-OHOS") {
......@@ -57,10 +62,13 @@ applications/sample/hello
```
3. 添加新组件。
修改文件build/lite/components/applications.json,添加组件hello_world_app的配置,如下所示为**applications.json**文件片段,"\#\#start\#\#"和"\#\#end\#\#"之间为新增配置("\#\#start\#\#"和"\#\#end\#\#"仅用来标识位置,添加完配置后删除这两行):
修改文件**build/lite/components/communication.json**,添加组件hello_world_app的配置,如下所示为communication.json文件片段,"\#\#start\#\#"和"\#\#end\#\#"之间为新增配置("\#\#start\#\#"和"\#\#end\#\#"仅用来标识位置,添加完配置后删除这两行):
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 本章节操作是以OpenHarmony-v3.1-Release版本为例进行操作的,该版本中,组件配置文件为build/lite/components/applications.json;若源码版本大于等于OpenHarmony 3.2 Beta2时,组件配置文件为build/lite/components/communication.json。
```
{
"components": [
......@@ -120,10 +128,10 @@ applications/sample/hello
```
4. 修改单板配置文件。
修改文件vendor/hisilicon/hispark_taurus/config.json,新增hello_world_app组件的条目,如下所示代码片段为applications子系统配置,"\#\#start\#\#"和"\#\#end\#\#"之间为新增条目("\#\#start\#\#"和"\#\#end\#\#"仅用来标识位置,添加完配置后删除这两行):
修改文件**vendor/hisilicon/hispark_taurus/config.json**,新增hello_world_app组件的条目,如下所示代码片段为applications子系统配置,"\#\#start\#\#"和"\#\#end\#\#"之间为新增条目("\#\#start\#\#"和"\#\#end\#\#"仅用来标识位置,添加完配置后删除这两行):
```
{
"subsystem": "applications",
......
......@@ -5,23 +5,23 @@
在完成Hi3516DV300的烧录后,还需要设置BootLoader引导程序,才能运行OpenHarmony系统。
1. 在Hi3516DV300任务中,击Configure bootloader(Boot OS)进行配置即可。
1. 在Hi3516DV300任务中,击Configure bootloader(Boot OS)进行配置即可。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> DevEco Device Tool针对Hi3516DV300开发板的BootLoader设置进行了适配,无需开发者手动修改。
![zh-cn_image_0000001226794644](figures/zh-cn_image_0000001226794644.png)
![bootloader](figures/bootloader.png)
2. 提示如下图中的重启开发板的提示信息时,重启开发板,然后在控制台输出“SUCCESS”表示设置成功。
![zh-cn_image_0000001227114584](figures/zh-cn_image_0000001227114584.png)
![reset_success](figures/reset_success.png)
3. 在任务栏**Monitor**按钮,启动串口工具。
3. 在任务栏**Monitor**按钮,启动串口工具。
![zh-cn_image_0000001271234705](figures/zh-cn_image_0000001271234705.png)
![monitor](figures/monitor.png)
4. 当界面打印回显信息,击Enter按钮,直到界面显示OHOS \#信息,表示系统启动成功。
4. 当界面打印回显信息,击Enter按钮,直到界面显示OHOS \#信息,表示系统启动成功。
![zh-cn_image_0000001271594709](figures/zh-cn_image_0000001271594709.png)
![reboot-success](figures/reboot-success.png)
## 运行“Hello World”
......@@ -29,22 +29,26 @@
系统启动成功后,通过以下步骤运行“Hello World”。
1. 在启动界面进入bin目录。
```
cd bin
```
2. 进入bin目录后可以看到helloworld文件,通过以下命令运行helloworld程序。
```
./helloworld
```
界面打印“Hello World!”,程序运行成功。
![zh-cn_image_0000001271354693](figures/zh-cn_image_0000001271354693.png)
![zh-cn_image_0000001360320977](figures/zh-cn_image_0000001360320977.png)
## 下一步学习
恭喜您,已完成Hi3516的快速上手!建议您下一步进入[带屏摄像头类产品开发](../guide/device-camera-control-overview.md)的学习 。
恭喜您,已完成Hi3516的快速上手!建议您进行下一步学习 。可参考:
- [屏幕和摄像头控制](../guide/device-camera-control-overview.md)
- [视觉应用开发](../guide/device-camera-visual-overview.md)
# 编译
1. 在菜单栏中点击**Project Settings**按钮,进入RK3568工程配置界面
DevEco Device Tool支持Rockchip RK3568开发板的源码一键编译功能,提供编译工具链和编译环境依赖的检测及一键安装,简化复杂编译环境的同时,提升了编译的效率
![zh-cn_image_0000001265492885](figures/zh-cn_image_0000001265492885.png)
2. 在Toolchain页签中,DevEco Device Tool会自动检测依赖的编译工具链是否完备,如果提示部分工具缺失,可点击**Install**按钮,自动安装所需工具链。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> RK3568编译环境为Ubuntu环境。
1. 在菜单栏中点击**Project Settings**,进入RK3568工程配置界面。
![zh-cn_image_0000001327669509](figures/zh-cn_image_0000001327669509.png)
2.**Tool Chain**页签中,DevEco Device Tool会自动检测依赖的编译工具链是否完备,如果提示部分工具缺失,可点击**Install**,自动安装所需工具链。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 如果出现安装pip组件失败,可参考[修改Python源的方法](https://device.harmonyos.com/cn/docs/documentation/guide/ide-set-python-source-0000001227639986)进行修改,完成尝试重新安装。
![zh-cn_image_0000001221356692](figures/zh-cn_image_0000001221356692.png)
![zh-cn_image_0000001292531806](figures/zh-cn_image_0000001292531806.png)
安装RK3568相关工具链,部分工具的安装需要使用root权限,请在“TERMINAL”窗口输入用户密码进行安装。
安装RK3568相关工具链,部分工具的安装需要使用root权限,请在**TERMINAL**窗口输入用户密码进行安装。
![zh-cn_image_0000001327429541.png](figures/zh-cn_image_0000001327429541.png)
![zh-cn_image_0000001327429541](figures/zh-cn_image_0000001327429541.png)
工具链自动安装完成后如下图所示。
![zh-cn_image_0000001265676877](figures/zh-cn_image_0000001265676877.png)
![zh-cn_image_0000001349388493](figures/zh-cn_image_0000001349388493.png)
3.“hh_scdy200”配置页签中,设置源码的编译类型**build_type**,默认为"debug类型,请根据需要进行修改。然后点击**Save**按钮进行保存。
3.**hh_scdy200**配置页签中,设置源码的编译类型**build_type**,默认为"debug"类型,请根据需要进行修改。然后点击**Save**进行保存。
![zh-cn_image_0000001276354454.png](figures/zh-cn_image_0000001276354454.png)
![zh-cn_image_0000001276354454](figures/zh-cn_image_0000001276354454.png)
4. 在DevEco Device Tool界面的“PROJECT TASKS”中,点击对应开发板下的**Build**按钮,执行编译。
4. 在DevEco Device Tool界面的**PROJECT TASKS**中,点击对应开发板下的**Build**,执行编译。
![zh-cn_image_0000001265516901](figures/zh-cn_image_0000001265516901.png)
5. 等待编译完成,在**TERMINAL**窗口输出“SUCCESS”,编译完成。
![zh-cn_image_0000001222361042](figures/zh-cn_image_0000001222361042.png)
![zh-cn_image_0000001307162054](figures/zh-cn_image_0000001307162054.png)
编译完成后,可以在工程的**out**目录下,查看编译生成的文件,用于后续的[RK3568开发板烧录](quickstart-standard-running-rk3568-burning.md)
\ No newline at end of file
编译完成后,可以在工程的**out**目录下,查看编译生成的文件,用于后续的[RK3568开发板烧录](quickstart-ide-3568-burn.md)
# 烧录
烧录是指将编译后的程序文件下载到芯片开发板上的动作,为后续的程序调试提供基础。DevEco Device Tool提供一键烧录功能,操作简单,能快捷、高效的完成程序烧录,提升烧录的效率。
RK3568的镜像烧录通过Windows环境进行烧录,开发者启动烧录操作后,DevEco Device Tool通过Remote远程模式,将Ubuntu环境下编译生成的待烧录程序文件拷贝至Windows目录下,然后通过Windows的烧录工具将程序文件烧录至开发板中。
## 前提条件
[下载](https://gitee.com/hihope_iot/docs/blob/master/HiHope_DAYU200/%E7%83%A7%E5%86%99%E5%B7%A5%E5%85%B7%E5%8F%8A%E6%8C%87%E5%8D%97/windows/DriverAssitant_v5.1.1.zip)并安装驱动DriverInstall.exe。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 如果已经安装旧版本的烧写工具,请先点击"驱动卸载"按钮卸载驱动,然后再点击"驱动安装"按钮安装驱动。
## 操作步骤
1. 请连接好电脑和待烧录开发板,连接USB接口,具体可参考[RK3568开发板介绍](quickstart-appendix-rk3568.md)
2. 在DevEco Device Tool中,选择**REMOTE DEVELOPMENT &gt; Local PC**,查看远程计算机(Ubuntu开发环境)与本地计算机(Windows开发环境)的连接状态。
- 如果Local PC右边连接按钮为![zh-cn_image_0000001326512673](figures/zh-cn_image_0000001326512673.png),则远程计算机与本地计算机为已连接状态,不需要执行其他操作。
- 如果Local PC右边连接按钮为![zh-cn_image_0000001275432904](figures/zh-cn_image_0000001275432904.png),则点击绿色按钮进行连接。连接时DevEco Device Tool会重启服务,因此请不要在下载源码或源码编译过程中进行连接,否则会中断任务。
![zh-cn_image_0000001285658392](figures/zh-cn_image_0000001285658392.png)
3. 在菜单栏中点击**Project Settings**按钮,进入RK3568工程配置界面。
![zh-cn_image_0000001330777737](figures/zh-cn_image_0000001330777737.png)
4.**Tool Chain**页签,设置Uploader烧录器工具,可以通过Tool Chain页签中的**Install**按钮在线安装。
![3865-uploader](figures/3865-uploader.png)
5.**hh_scdy200**页签,设置烧录选项,包括upload_partitions和upload_protocol。
- **upload_partitions_profile**:选择待烧录程序的配置文件,该配置文件会指定烧录文件名称、起始烧录地址、地址长度等信息;同时请勾选**Enable to use upload_partitions_profile for upload**选项。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 如需修改烧录profile文件,在设置烧录分区起始地址和分区长度时,应根据实际待烧录文件的大小进行设置,要求设置的烧录分区大小,要大于待烧录文件的大小;同时,各烧录文件的分区地址设置不能出现重叠。
>
> 首次烧录,请勾选**Enable to use upload_partitions_profile for upload**选项,会自动生成upload_partitions文件。再次烧录时,可根据实际情况选择生成upload_partitions文件进行自定义烧录,也可以再勾选**Enable to use upload_partitions_profile for upload**选项,使用upload_partitions_profile重新生成upload_partitions文件用于烧录。
- **upload_protocol**:选择烧录协议,固定选择“upgrade”。
![zh-cn_image_0000001338663697](figures/zh-cn_image_0000001338663697.png)
6. 所有的配置都修改完成后,在工程配置页签的顶部,点击**Save**进行保存。
7.**PROJECT TASKS**中,点击hh_scdy200下的**Upload**按钮启动烧录。
![zh-cn_image_0000001280147358](figures/zh-cn_image_0000001280147358.png)
8. 当屏幕提示“Operation paused,Please press Enter key to continue”,请按**回车键**继续。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 如果开发板未处于烧录模式,屏幕会提示“The board is not in Loader mode.Please Hold on the VOL+key...”,此时,请长按音量+键,3秒后点击**RESET**键,然后再过3秒放开音量+键,使开发板进入烧录模式。
等待开发板烧录完成,当屏幕提示如下信息时,表示烧录成功。
![zh-cn_image_0000001327549705](figures/zh-cn_image_0000001327549705.png)
......@@ -4,11 +4,16 @@
下方将展示如何在单板上运行第一个应用程序,其中包括新建应用程序、编译、烧写、运行等步骤,最终输出“Hello World!”。
## 前提条件
已参考[创建工程并获取源码](quickstart-ide-import-project.md),创建RK3568开发板的源码工程。
## 示例目录
示例完整目录如下。
```
applications/sample/hello
│── BUILD.gn
......@@ -19,22 +24,21 @@ applications/sample/hello
├── bundle.json
build
└── subsystem_config.json
vendor/hisilicon
└── Hi3516DV300
└── config.json
productdefine/common
└── products
└── rk3568.json
```
## 开发步骤
请在源码目录中通过以下步骤创建“Hello World”应用程序:
请在源码目录中通过以下步骤创建“Hello World”应用程序。
1. 创建目录,编写业务代码。
新建applications/sample/hello/src/helloworld.c目录及文件,代码如下所示,用户可以自定义修改打印内容(例如:修改World为OHOS)。其中helloworld.h包含字符串打印函数HelloPrint的声明。当前应用程序可支持标准C及C++的代码开发。
```
#include <stdio.h>
#include "helloworld.h"
......@@ -55,7 +59,7 @@ vendor/hisilicon
再添加头文件applications/sample/hello/include/helloworld.h,代码如下所示。
```
#ifndef HELLOWORLD_H
#define HELLOWORLD_H
......@@ -76,9 +80,8 @@ vendor/hisilicon
```
2. 新建编译组织文件。
1. 新建applications/sample/hello/BUILD.gn文件,内容如下所示:
```
import("//build/ohos.gni") # 导入编译模板
ohos_executable("helloworld") { # 可执行模块
......@@ -99,7 +102,7 @@ vendor/hisilicon
}
```
2. 新建applications/sample/hello/bundle.json文件,添加sample部件描述,内容如下所示。
```
{
"name": "@ohos/hello",
......@@ -138,9 +141,10 @@ vendor/hisilicon
bundle.json文件包含两个部分,第一部分描述该部件所属子系统的信息,第二部分component则定义该部件构建相关配置。添加的时候需要指明该部件包含的模块sub_component,假如有提供给其它部件的接口,需要在inner_kits中说明,假如有测试用例,需要在test中说明,inner_kits与test没有也可以不添加。
3. 修改子系统配置文件。
在build/subsystem_config.json中添加新建的子系统的配置。
```
"sample": {
"path": "applications/sample/hello",
......@@ -149,9 +153,12 @@ vendor/hisilicon
```
4. 修改产品配置文件。
在vendor/hisilicon/Hi3516DV300/config.json中添加对应的hello部件,直接添加到原有部件后即可。
在productdefine/common/products/rk3568.json中添加对应的hello部件,直接添加到原有部件后即可。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 本章节操作是以OpenHarmony-v3.1-Release版本为例进行操作的,该版本中,RK3568的配置文件为productdefine/common/products/rk3568.json;若源码版本大于OpenHarmony-v3.1-Release时,RK3568的配置文件为vendor/hihope/rk3568/config.json。
```
"usb:usb_manager_native":{},
"applications:prebuilt_hap":{},
......
......@@ -3,19 +3,19 @@
## 启动系统
镜像烧录完成重启开发板后,系统将会自动启动。开发板附带的屏幕呈现以下界面,表明系统已运行成功。
烧录完成重启开发板后,系统将会自动启动。开发板附带的屏幕呈现以下界面,表明系统已运行成功。
**图1** 系统启动效果图  
![zh-cn_image_0000001226762222](figures/zh-cn_image_0000001226762222.jpg)
![quickstart-pkg-3568-running-restart](figures/quickstart-pkg-3568-running-restart.png)
## 运行“Hello World”
1. 设备启动后打开串口工具(以putty为例),波特率设置为1500000,连接设备。
![zh-cn_image_0000001226602250](figures/zh-cn_image_0000001226602250.png)
![rk3568-run-configuration](figures/rk3568-run-configuration.png)
2. 打开串口后,在任意目录(以设备根目录为例)下输入命令helloworld后回车,界面打印“Hello World!”,程序运行成功。
![zh-cn_image_0000001226922154](figures/zh-cn_image_0000001226922154.png)
![helloworld](figures/helloworld.png)
# 编译
DevEco Device Tool支持Hi3861V100开发板的源码一键编译功能,提供编译工具链和编译环境依赖的检测及一键安装,简化复杂编译环境的同时,提升了编译的效率。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> Hi3861V100编译环境为Ubuntu环境。
1. 在菜单栏中点击**Project Settings**,进入Hi3861工程配置界面。
![zh-cn_image_0000001275483042](figures/zh-cn_image_0000001275483042.png)
2.**Tool Chain**页签中,DevEco Device Tool会自动检测依赖的编译工具链是否完备,如果提示部分工具缺失,可点击**Install**,自动安装所需工具链。
![zh-cn_image_0000001333256741](figures/zh-cn_image_0000001333256741.png)
3. 安装Hi3861V100相关工具链,部分工具安装需要使用root权限,请在**TERMINAL**窗口输入用户密码进行安装。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 如果出现安装pip组件失败,可参考[修改Python源的方法](https://device.harmonyos.com/cn/docs/documentation/guide/ide-set-python-source-0000001227639986)进行修改,完成尝试重新安装。
![zh-cn_image_0000001280938208](figures/zh-cn_image_0000001280938208.png)
工具链自动安装完成后如下图所示。
![zh-cn_image_0000001281378224](figures/zh-cn_image_0000001281378224.png)
4.**hi3861**配置页签中,设置源码的编译类型**build_type**,默认为"debug"类型,请根据需要进行修改。然后点击**Save**进行保存。
![zh-cn_image_0000001333581089](figures/zh-cn_image_0000001333581089.png)
5. 在DevEco Device Tool界面的**PROJECT TASKS**中,点击对应开发板下的**Build**,执行编译。
![zh-cn_image_0000001281221352](figures/zh-cn_image_0000001281221352.png)
6. 等待编译完成,在**TERMINAL**窗口输出“SUCCESS”,编译完成。
![zh-cn_image_0000001405938781](figures/zh-cn_image_0000001405938781.png)
编译完成后,可以在工程的**out**目录下,查看编译生成的文件,用于后续的[Hi3861V100开发板烧录](quickstart-ide-3861-burn.md)
# 烧录
烧录是指将编译后的程序文件下载到芯片开发板上的动作,为后续的程序调试提供基础。DevEco Device Tool提供一键烧录功能,操作简单,能快捷、高效的完成程序烧录,提升烧录的效率。
烧录是指将编译后的程序文件下载到开发板上的动作,为后续的程序调试提供基础。DevEco Device Tool提供一键烧录功能,操作简单,能快捷、高效的完成程序烧录,提升烧录的效率。
Hi3861V100的镜像烧录通过Windows环境进行烧录,开发者启动烧录操作后,DevEco Device Tool通过Remote远程模式,将Ubuntu环境下编译生成的带烧录程序文件拷贝至Windows目录下,然后通过Windows的烧录工具将程序文件烧录至开发板中。
Hi3861V100开发板支持串口烧录方式,在Windows下通过以下步骤进行烧录:
Hi3861V100的镜像烧录通过Windows环境进行烧录,开发者启动烧录操作后,DevEco Device Tool通过Remote远程模式,将Ubuntu环境下编译生成的待烧录程序文件拷贝至Windows目录下,然后通过Windows的烧录工具将程序文件烧录至开发板中。
1. 请连接好电脑和待烧录开发板,需要连接USB口,具体可参考[Hi3861V100开发板介绍](quickstart-lite-introduction-hi3861.md)
## 前提条件
2. 根据[Hi3861V100开发板串口驱动安装指导](https://gitee.com/link?target=https%3A%2F%2Fdevice.harmonyos.com%2Fcn%2Fdocs%2Fdocumentation%2Fguide%2Fhi3861-drivers-0000001058153433)安装USB转串口的驱动程序。若您的设备中已安装此驱动,请忽略该步骤
- 代码已[编译](quickstart-ide-3861-build.md)完成
3. 在DevEco Device Tool中,选择REMOTE DEVELOPMENT &gt; Local PC,查看远程计算机(Ubuntu开发环境)与本地计算机(Windows开发环境)的连接状态。
- 如果Local PC右边连接按钮为![zh-cn_image_0000001261315939](figures/zh-cn_image_0000001261315939.png),则远程计算机与本地计算机为已连接状态,不需要执行其他操作。
- 如果Local PC右边连接按钮为![zh-cn_image_0000001261515989](figures/zh-cn_image_0000001261515989.png),则点击绿色按钮进行连接。连接时DevEco Device Tool会重启服务,因此请不要在下载源码或源码编译过程中进行连接,否则会中断任务。
- 根据[USB转串口驱动安装指南](https://device.harmonyos.com/cn/docs/documentation/guide/hi3861-drivers-0000001058153433)安装USB转串口的驱动程序。
![zh-cn_image_0000001261395999](figures/zh-cn_image_0000001261395999.png)
4. 在菜单栏中点击**Project Settings**按钮,进入Hi3861V100工程配置界面。
## 操作步骤
![zh-cn_image_0000001333802045.png](figures/zh-cn_image_0000001333802045.png)
1. 请连接好电脑和待烧录开发板,需要连接USB口,具体可参考[Hi3861V100开发板介绍](quickstart-appendix-hi3861.md)
5. 在“Tool Chain”页签,设置Uploader烧录器工具,可以通过Tool Chain页签中的Install按钮在线安装。
2. 在DevEco Device Tool中,选择**REMOTE DEVELOPMENT &gt; Local PC**,查看远程计算机(Ubuntu开发环境)与本地计算机(Windows开发环境)的连接状态。
- 如果Local PC右边连接按钮为![zh-cn_image_0000001326512673](figures/zh-cn_image_0000001326512673.png),则远程计算机与本地计算机为已连接状态,不需要执行其他操作。
- 如果Local PC右边连接按钮为![zh-cn_image_0000001275432904](figures/zh-cn_image_0000001275432904.png),则点击绿色按钮进行连接。连接时DevEco Device Tool会重启服务,因此请不要在下载源码或源码编译过程中进行连接,否则会中断任务。
![zh-cn_image_0000001198943768](figures/zh-cn_image_0000001198943768.png)
![zh-cn_image_0000001285658392](figures/zh-cn_image_0000001285658392.png)
6. 在“hi3861”页签,设置烧录选项,包括upload_port、upload_protocol和upload_partitions。
3. 在菜单栏中点击**Project Settings**按钮,进入Hi3861V100工程配置界面。
![zh-cn_image_0000001333802045](figures/zh-cn_image_0000001333802045.png)
4. 在“Tool Chain”页签,设置Uploader烧录器工具,可以通过Tool Chain页签中的Install按钮在线安装。
![Phoenix-upload](figures/Phoenix-upload.png)
5. 在“hi3861”页签,设置烧录选项,包括upload_port、upload_protocol和upload_partitions。
- upload_port:选择已查询的串口号。
- upload_protocol:选择烧录协议,选择“hiburn-serial”。
- upload_partitions:选择待烧录的文件名称。DevEco Device Tool已预置默认的烧录文件信息,如果需要修改待烧录文件地址,可点击每个待烧录文件后的![zh-cn_image_0000001333642545.png](figures/zh-cn_image_0000001333642545.png)按钮进行修改。
- upload_partitions:选择待烧录的文件名称。DevEco Device Tool已预置默认的烧录文件信息,如果需要修改待烧录文件地址,可点击每个待烧录文件后的![zh-cn_image_0000001333642545](figures/zh-cn_image_0000001333642545.png)按钮进行修改。
![zh-cn_image_0000001243704061](figures/zh-cn_image_0000001243704061.png)
![zh-cn_image_0000001345770181](figures/zh-cn_image_0000001345770181.png)
7. 所有的配置都修改完成后,在工程配置页签的顶部,点击**Save**进行保存。
6. 所有的配置都修改完成后,在工程配置页签的顶部,点击**Save**进行保存。
8. 点击**Open**打开工程文件,然后在“PROJECT TASKS”中,点击hi3861下的**Upload**按钮,启动烧录。
7. 在“PROJECT TASKS”中,点击hi3861下的**Upload**按钮,启动烧录。
![zh-cn_image_0000001216440138](figures/zh-cn_image_0000001216440138.png)
![zh-cn_image_0000001333322693](figures/zh-cn_image_0000001333322693.png)
9. 启动烧录后,显示如下提示信息时,请在15秒内,按下开发板上的RST按钮重启开发板。
8. 启动烧录后,显示如下提示信息时,请在15秒内,按下开发板上的RST按钮重启开发板。
![zh-cn_image_0000001198466090](figures/zh-cn_image_0000001198466090.png)
![hi3861-upload-restart](figures/hi3861-upload-restart.png)
重新上电后,界面提示如下信息时,表示烧录成功。
![zh-cn_image_0000001216761476](figures/zh-cn_image_0000001216761476.png)
![zh-cn_image_0000001281002722](figures/zh-cn_image_0000001281002722.png)
......@@ -4,13 +4,20 @@
下方将通过修改源码的方式展示如何编写简单程序,输出“Hello world”。请在下载的源码目录中进行下述操作。
## 前提条件
已参考[创建工程并获取源码](quickstart-ide-import-project.md),创建Hi3861开发板的源码工程。
## 操作步骤
1. 确定目录结构。
开发者编写业务时,务必先在./applications/sample/wifi-iot/app路径下新建一个目录(或一套目录结构),用于存放业务源码文件。
开发者编写业务代码时,务必先在./applications/sample/wifi-iot/app路径下新建一个目录(或一套目录结构),用于存放业务源码文件。
例如:在app下新增业务my_first_app,其中hello_world.c为业务代码,BUILD.gn为编译脚本,具体规划目录结构如下:
```
.
└── applications
......@@ -39,12 +46,12 @@
```
3. 编写用于将业务构建成静态库的BUILD.gn文件。
新建./applications/sample/wifi-iot/app/my_first_app下的BUILD.gn文件,并完成如下配置。
如步骤1所述,BUILD.gn文件由三部分内容(目标、源文件、头文件路径)构成,需由开发者完成填写。
```
static_library("myapp") {
sources = [
......@@ -61,10 +68,13 @@
- include_dirs中指定source所需要依赖的.h文件路径。
4. 添加新组件。
修改文件build/lite/components/applications.json,添加组件hello_world_app的配置,如下所示为applications.json文件片段,"\#\#start\#\#"和"\#\#end\#\#"之间为新增配置("\#\#start\#\#"和"\#\#end\#\#"仅用来标识位置,添加完配置后删除这两行):
修改文件**build/lite/components/communication.json**,添加组件hello_world_app的配置,如下所示为communication.json文件片段,"\#\#start\#\#"和"\#\#end\#\#"之间为新增配置("\#\#start\#\#"和"\#\#end\#\#"仅用来标识位置,添加完配置后删除这两行):
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 本章节操作是以OpenHarmony-v3.1-Release版本为例进行操作的,该版本中,组件配置文件为build/lite/components/applications.json;若源码版本大于等于OpenHarmony 3.2 Beta2时,组件配置文件为build/lite/components/communication.json。
```
{
"components": [
......@@ -124,10 +134,10 @@
```
5. 修改单板配置文件。
修改文件vendor/hisilicon/hispark_pegasus/config.json,新增hello_world_app组件的条目,如下所示代码片段为applications子系统配置,"\#\#start\#\#"和"\#\#end\#\#"之间为新增条目("\#\#start\#\#"和"\#\#end\#\#"仅用来标识位置,添加完配置后删除这两行):
修改文件**vendor/hisilicon/hispark_pegasus/config.json**,新增hello_world_app组件的条目,如下所示代码片段为applications子系统配置,"\#\#start\#\#"和"\#\#end\#\#"之间为新增条目("\#\#start\#\#"和"\#\#end\#\#"仅用来标识位置,添加完配置后删除这两行):
```
{
"subsystem": "applications",
......
# 调试验证
# 运行
完成烧录及联网之后,用户可根据需要进行调试验证。目前调试验证的方法有以下两种,开发者可以根据具体业务情况选择。
## 联网配置
由于Hi3861为WLAN模组,您可以在版本编译及烧录后,通过如下操作,使开发板实现联网功能。
1. 保持Windows工作台和Hi3861 WLAN模组的连接状态,在**PROJECT TASKS**中,单击**Monitor**,打开串口终端。
**图1** 打开DevEco串口终端
![zh-cn_image_0000001406299413](figures/quickstart-ide-3861-running-mirror.png)
2. 复位Hi3861 WLAN模组,终端界面显示“ready to OS start”,则启动成功。
**图2** Hi3861 WLAN模组复位成功示意图
![quickstart-ide-3861-running-restart](figures/quickstart-ide-3861-running-restart.png)
3. 在DevEco的串口终端中,依次执行如下AT命令,启动STA模式,连接指定AP热点,并开启DHCP功能。
```
AT+STARTSTA # 启动STA模式
AT+SCAN # 扫描周边AP
AT+SCANRESULT # 显示扫描结果
AT+CONN="SSID",,2,"PASSWORD" # 连接指定AP,其中SSID/PASSWORD为待连接的热点名称和密码
AT+STASTAT # 查看连接结果
AT+DHCP=wlan0,1 # 通过DHCP向AP请求wlan0的IP地址
```
4. 查看Hi3861 WLAN模组与网关联通是否正常,如下图所示。
```
AT+IFCFG # 查看模组接口IP
AT+PING=X.X.X.X # 检查模组与网关的联通性,其中X.X.X.X需替换为实际的网关地址
```
**图3** Hi3861 WLAN模组联网成功示意图
![quickstart-ide-3861-running-success](figures/quickstart-ide-3861-running-success.png)
## 调测验证
完成烧录及联网之后,用户可根据需要进行调试验证。目前调试验证的方法有以下两种,开发者可以根据具体业务情况选择。
1. 通过printf打印日志
2. 通过asm文件定位panic问题
由于本示例业务简单,采用printf打印日志的调试方式即可。下方将介绍这两种调试手段的使用方法。
## printf打印
### printf打印
代码中增加printf维测,信息会直接打印到串口上。开发者可在业务关键路径或业务异常位置增加日志打印,如下所示:
```
void HelloWorld(void)
{
......@@ -25,10 +64,10 @@ void HelloWorld(void)
```
## 根据asm文件进行问题定位
### 根据asm文件进行问题定位
系统异常退出时,会在串口上打印异常退出原因调用栈信息,如下文所示。通过解析异常栈信息可以定位异常位置。
```
=======KERNEL PANIC=======
**Call Stack*
......@@ -47,7 +86,7 @@ Call Stack end***
1. 将调用栈CallStack信息保存到txt文档中,以便于编辑。(可选)
2. 打开asm文件,并搜索CallStack中的地址,列出对应的函数名信息。通常只需找出前几个栈信息对应的函数,就可明确异常代码方向。
```
Call Stack 0 -- 4860d8 addr:f784c -- WadRecvCB
Call Stack 1 -- 47b2b2 addr:f788c -- wal_sdp_process_rx_data
......@@ -59,6 +98,29 @@ Call Stack end***
```
3. 根据以上调用栈信息,可以定位WadRecvCB函数中出现了异常。
![zh-cn_image_0000001226634668](figures/zh-cn_image_0000001226634668.png)
![hi3861-test](figures/hi3861-test.png)
4. 完成代码排查及修改。
## 运行结果
示例代码编译、烧录、运行、调测后,重启开发板后将自动在界面输出如下结果:
```
ready to OS start
FileSystem mount ok.
wifi init success!
[DEMO] Hello world.
```
## 下一步学习
恭喜,您已完成Hi3861 WLAN模组快速上手!建议您下一步进入的学习 。可参考:
- [LED外设控制](https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/guide/device-wlan-led-control.md)
- [集成三方SDK](https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/guide/device-wlan-sdk.md)
# 搭建Windows环境
在嵌入式开发中,很多开发者习惯于使用Windows进行代码的编辑,比如使用Windows的Visual Studio Code进行OpenHarmony代码的开发。但当前阶段,大部分的开发板源码还不支持在Windows环境下进行编译,如Hi3861、Hi3516系列开发板。因此,建议使用Ubuntu的编译环境对源码进行编译。
在以上的设备开发场景中,可以搭建一套Windows+Ubuntu混合开发的环境,其中使用Windows平台的DevEco Device Tool可视化界面进行相关操作,通过远程连接的方式对接Ubuntu下的DevEco Device Tool(可以不安装Visual Studio Code),然后对Ubuntu下的源码进行开发、编译、烧录等操作。
本章节介绍开发所需Windows环境的搭建方法。
## 系统要求
- Windows 10 64位系统。
- Windows系统上安装的DevEco Device Tool为3.0 Release版本。
## 操作步骤
1. 下载[DevEco Device Tool 3.0 Release](https://device.harmonyos.com/cn/ide#download) Windows版。
2. 解压DevEco Device Tool压缩包,双击安装包程序,单击**Next**进行安装。
3. 设置DevEco Device Tool的安装路径,请注意安装路径不能包含中文字符,**不建议安装到C盘目录**,单击**Next**
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 如果您已安装DevEco Device Tool 3.0 Beta2及以前的版本,则在安装新版本时,会先卸载旧版本,卸载过程中出现错误提示“Error during uninstallation process: Cannot remove directory...”时,请单击**Ignore**继续安装,该错误不影响新版本的安装。
![zh-cn_image_0000001326386753](figures/zh-cn_image_0000001326386753.png)
4. 根据安装向导提示,勾选要自动安装的软件。
1. 在弹出**VS Code installation confirm**页面,勾选“Install VS Code 1.62.2automatically”,单击**Next**
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 如果检测到Visual Studio Code已安装,且版本为1.62及以上,则会跳过该步骤。
![zh-cn_image_0000001285965546](figures/zh-cn_image_0000001285965546.png)
2. 在弹出的**Python select page**选择“Download from Huawei mirror”,单击**Next**
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 如果系统已安装可兼容的Python版本(Python 3.8~3.9版本),可选择“Use one of compatible on your PC”。
![zh-cn_image_0000001285965778](figures/zh-cn_image_0000001285965778.png)
5. 在以下界面单击**Next**
![zh-cn_image_0000001285806330](figures/zh-cn_image_0000001285806330.png)
6. 请详细阅读以下界面的用户协议和隐私声明,需勾选“I accept the licenses”后,才能继续下一步的安装。
![zh-cn_image_0000001275586896](figures/zh-cn_image_0000001275586896.png)
7. 继续等待DevEco Device Tool安装向导自动安装DevEco Device Tool插件,直至安装完成,单击**Finish**,关闭DevEco Device Tool安装向导。
![zh-cn_image_0000001275267040](figures/zh-cn_image_0000001275267040.png)
8. 打开Visual Studio Code,进入DevEco Device Tool工具界面。至此,DevEco Device Tool Windows开发环境安装完成。
![zh-cn_image_0000001338012765](figures/zh-cn_image_0000001338012765.png)
# 配置远程访问环境
在搭建了Windows和Ubuntu开发环境后,需要通过下述设置,使得Windows可以远程访问Ubuntu,为后续烧录文件的传输做好准备。
## 安装SSH服务并获取远程访问的IP地址
1. 在Ubuntu系统中,打开终端工具,执行如下命令安装SSH服务。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 如果执行该命令失败,提示openssh-server和openssh-client依赖版本不同,请根据CLI界面提示信息,安装openssh-client相应版本后(例如:sudo apt-get install openssh-client=1:8.2p1-4),再重新执行该命令安装openssh-server。
```
sudo apt-get install openssh-server
```
2. 执行如下命令,启动SSH服务。
```
sudo systemctl start ssh
```
3. 执行如下命令,获取当前用户的IP地址,用于Windows系统远程访问Ubuntu环境。
```
ifconfig
```
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 如果执行ifconfig命令提示“command-not-found”,请执行**sudo apt-get install net-tools**命令安装网络查询工具,然后重新查询IP地址。
![zh-cn_image_0000001215737140](figures/zh-cn_image_0000001215737140.png)
## 安装Remote SSH
1. 打开Windows系统下的Visual Studio Code,点击![zh-cn_image_0000001239080359](figures/zh-cn_image_0000001239080359.png),在插件市场的搜索输入框中输入“remote-ssh”。
![zh-cn_image_0000001285647778](figures/zh-cn_image_0000001285647778.png)
2. 点击Remote-SSH的**Install**,安装Remote-SSH。安装成功后,在**INSTALLED**下可以看到已安装Remote-SSH。
![zh-cn_image_0000001238880335](figures/zh-cn_image_0000001238880335.png)
## 远程连接Ubuntu环境
1. 打开Windows系统的Visual Studio Code,点击![zh-cn_image_0000001238760373](figures/zh-cn_image_0000001238760373.png),在**SSH TARGETS**下,单击+。
![zh-cn_image_0000001215878922](figures/zh-cn_image_0000001215878922.png)
2. 在弹出的SSH连接命令输入框中输入“ssh _username_\@_ip_address_”,其中ip_address为要连接的远程计算机的IP地址,username为登录远程计算机的帐号。
![zh-cn_image_0000001215879750](figures/zh-cn_image_0000001215879750.png)
3. 在弹出的输入框中,选择SSH configuration文件,选择默认的第一选项即可。
![zh-cn_image_0000001260519729](figures/zh-cn_image_0000001260519729.png)
4. 在SSH TARGETS中,找到远程计算机,点击![zh-cn_image_0000001194080414](figures/zh-cn_image_0000001194080414.png),打开远程计算机。
![zh-cn_image_0000001215720398](figures/zh-cn_image_0000001215720398.png)
5. 在弹出的输入框中,选择**Linux**,然后在选择**Continue**,然后输入登录远程计算机的密码,连接远程计算机 。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 在Windows系统远程访问Ubuntu过程中,需要频繁的输入密码进行连接,为解决该问题,您可以使用SSH公钥来进行设置,设置方法请参考[注册远程访问Ubuntu环境的公钥](https://device.harmonyos.com/cn/docs/documentation/guide/ide-registering-public-key-0000001247162706)。
![zh-cn_image_0000001215897530](figures/zh-cn_image_0000001215897530.png)
连接成功后,等待在远程计算机用户目录下的.vscode-server文件夹下自动安装插件,安装完成后,根据界面提示在Windows系统下重新加载Visual Studio Code,便可以在Windows的DevEco Device Tool界面进行源码开发、编译、烧录等操作。至此,环境搭建完成,如下图所示,左下角显示远程连接计算机的IP地址。
![zh-cn_image_0000001338102621](figures/zh-cn_image_0000001338102621.png)
# 搭建Ubuntu环境
在嵌入式开发中,很多开发者习惯于使用Windows进行代码的编辑,比如使用Windows的Visual Studio Code进行OpenHarmony代码的开发。但当前阶段,大部分的开发板源码还不支持在Windows环境下进行编译,如Hi3861、Hi3516系列开发板。因此,建议使用Ubuntu的编译环境对源码进行编译。
在以上的设备开发场景中,可以搭建一套Windows+Ubuntu混合开发的环境,其中使用Windows平台的DevEco Device Tool可视化界面进行相关操作,通过远程连接的方式对接Ubuntu下的DevEco Device Tool(可以不安装Visual Studio Code),然后对Ubuntu下的源码进行开发、编译、烧录等操作。
本章节介绍开发所需Ubuntu环境的搭建方法。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 如果没有Ubuntu系统,可在Windows系统中通过虚拟机方式搭建Ubuntu系统,具体请参考[Ubuntu系统安装指导](https://developer.huawei.com/consumer/cn/training/course/video/C101639987816176315)。Ubuntu系统安装完成后,请根据指导完成[Ubuntu基础环境配置](https://developer.huawei.com/consumer/cn/training/course/video/C101639988048536240),然后再根据本章节进行DevEco Device Tool工具的安装。
## 系统要求
- Ubuntu系统要求:Ubuntu18.04~21.10版本,内存推荐16 GB及以上。
- Ubuntu系统的用户名不能包含中文字符。
## 操作步骤
1. 将Ubuntu Shell环境修改为bash。
1. 执行如下命令,确认输出结果为bash。如果输出结果不是bash,请根据子步骤2,将Ubuntu shell修改为bash。
```
ls -l /bin/sh
```
![zh-cn_image_0000001226764302](figures/zh-cn_image_0000001226764302.png)
2. 打开终端工具,执行如下命令,输入密码,然后选择**No**,将Ubuntu shell由dash修改为bash。
```
sudo dpkg-reconfigure dash
```
![ubuntu-dash-to-bash](figures/ubuntu-dash-to-bash.png)
2. 下载[DevEco Device Tool 3.0 Release](https://device.harmonyos.com/cn/ide#download) Linux版本。
3. 解压DevEco Device Tool软件包并对解压后的文件夹进行赋权。
1. 进入DevEco Device Tool软件包目录,执行如下命令解压软件包,其中devicetool-linux-tool-3.1.0.200.zip为软件包名称,请根据实际进行修改。
```
unzip devicetool-linux-tool-3.1.0.200.zip
```
2. 进入解压后的文件夹,执行如下命令,赋予安装文件可执行权限,其中devicetool-linux-tool-3.1.0.200.sh请根据实际进行修改。
```
chmod u+x devicetool-linux-tool-3.1.0.200.sh
```
4. 执行如下命令,安装DevEco Device Tool,其中devicetool-linux-tool-3.1.0.200.sh请根据实际进行修改。
```
sudo ./devicetool-linux-tool-3.1.0.200.sh
```
5. 在用户协议和隐私声明签署界面,请详细阅读用户协议和隐私声明,需签署同意用户协议和隐私声明才能进行下一步的安装,可通过键盘的上下按键进行选择。
![zh-cn_image_0000001340557741](figures/zh-cn_image_0000001340557741.png)
安装完成后,当界面输出“DevEco Device Tool successfully installed.”时,表示DevEco Device Tool安装成功。
![zh-cn_image_0000001338201457](figures/zh-cn_image_0000001338201457.png)
# 搭建开发环境
在嵌入式开发中,很多开发者习惯于使用Windows进行代码的编辑,比如使用Windows的Visual Studio Code进行OpenHarmony代码的开发。但当前阶段,大部分的开发板源码还不支持在Windows环境下进行编译,如Hi3861、Hi3516系列开发板。因此,建议使用Ubuntu的编译环境对源码进行编译。
在以上的设备开发场景中,可以搭建一套Windows+Ubuntu混合开发的环境,其中使用Windows平台的DevEco Device Tool可视化界面进行相关操作,通过远程连接的方式对接Ubuntu下的DevEco Device Tool(可以不安装Visual Studio Code),然后对Ubuntu下的源码进行开发、编译、烧录等操作。
# 创建工程并获取源码
在通过DevEco Device Tool创建OpenHarmony工程时,可自动下载相应版本的OpenHarmony源码,源码类型包括OpenHarmony Stable Version、OpenHarmony Sample和HarmonyOS Connect Solution。
OpenHarmony Stable Version源码为OpenHarmony稳定版本源码,通过镜像站点获取,支持OpenHarmony-v1.1.4-LTS、OpenHarmony-v3.0.3-LTS和OpenHarmony-v3.1-Release版本。
镜像站点的源码,一般取自该稳定版本的发布时间点,因此,通过镜像站点获取的源码可能不是该版本最新源码。如果您需要获取对应版本的最新源码,请参考[从码云仓库获取源码](../get-code/sourcecode-acquire.md),获取源码后,请参考《[HUAWEI DevEco Device Tool 使用指南](https://device.harmonyos.com/cn/docs/documentation/guide/service_introduction-0000001050166905)》的“导入OpenHarmony源码”章节,在DevEco Device Tool中导入源码。
此处以下载OpenHarmony Stable Version源码为例,说明操作过程。关于OpenHarmony Sample和HarmonyOS Connect Solution源码的下载,可参考《[HUAWEI DevEco Device Tool 使用指南](https://device.harmonyos.com/cn/docs/documentation/guide/service_introduction-0000001050166905)》。
## 前提条件
只有在Windows环境通过Remote SSH远程连接上Ubuntu环境的情况下,才可以创建OpenHarmony新工程,具体请参考[搭建开发环境](quickstart-ide-env--win.md)。否则,在DevEco Device Tool的Home界面没有“**New Project**”按钮。
## 操作步骤
OpenHarmony稳定版本源码,支持OpenHarmony-v1.1.4-LTS、OpenHarmony-v3.0.3-LTS和OpenHarmony-v3.1-Release版本。
1. 打开DevEco Device Tool,进入Home页,点击**New Project**创建新工程。
![zh-cn_image_0000001272258726](figures/zh-cn_image_0000001272258726.png)
2. 在新工程的配置向导页,配置工程相关信息,包括:
- **OpenHarmony Source Code**:选择需要下载的OpenHarmony源码,请选择**OpenHarmony Stable Version**下的源码版本,支持OpenHarmony-v1.1.4-LTS、OpenHarmony-v3.0.3-LTS和OpenHarmony-v3.1-Release版本。
- **Project Name**:设置工程名称。
- **Project Path**:选择工程文件存储路径。
- **SOC**:选择支持的芯片。
- **Board**:选择支持的开发板。
- **Product**:选择产品。
![zh-cn_image_0000001338187673](figures/zh-cn_image_0000001338187673.png)
3. 工程配置完成后,点击**Confirm**,DevEco Device Tool会自动启动OpenHarmony源码的下载。由于OpenHarmony稳定版本源码包体积较大,请耐心等待源码下载完成。
![zh-cn_image_0000001338536201](figures/zh-cn_image_0000001338536201.png)
# 附录
- **[Hi3516开发板介绍](quickstart-appendix-hi3516.md)**
- **[Hi3861开发板介绍](quickstart-appendix-hi3861.md)**
- **[RK3568开发板介绍](quickstart-appendix-rk3568.md)**
- **[编译形态整体说明](quickstart-appendix-compiledform.md)**
\ No newline at end of file
# 导入源码工程
在完成[搭建Windows+Ubuntu混合开发环境](../quick-start/quickstart-ide-lite-env-setup-win-ubuntu.md)[获取源码](../quick-start/quickstart-ide-lite-sourcecode-acquire.md)后,您需要在Windows环境中按照如下步骤创建源码工程,之后方可在DevEco Device Tool中进行后续的操作。
1. 打开DevEco Device Tool,进入Home页,点击**Import Project**打开工程。
![zh-cn_image_0000001278358765](figures/zh-cn_image_0000001278358765.png)
2. 选择OpenHarmony源码根目录路径,然后再选择**Import OpenHarmony Source**选项,点击**Import**进行导入。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 工程存储路径不能包含中文字符、空格。如果工程存储路径包含中文字符或空格,可能导致编译失败。
![zh-cn_image_0000001271477045](figures/zh-cn_image_0000001271477045.png)
3. 在Import Project界面,选择**Product**后,会自动填充对应的SOC、Board、Company和Kernel信息,然后Ohos Ver选择对应的OpenHarmony源码版本。
![zh-cn_image_0000001271237242](figures/zh-cn_image_0000001271237242.png)
4. 点击**Open**打开工程或源码。
\ No newline at end of file
# 搭建Windows+Ubuntu混合开发环境
通常在嵌入式开发中,很多开发者习惯于使用Windows进行代码的编辑,比如使用Windows的Visual Studio Code进行OpenHarmony代码的开发。但当前阶段,大部分的开发板源码还不支持在Windows环境下进行编译,如Hi3861、Hi3516系列开发板。因此,需要使用Ubuntu的编译环境对源码进行编译。
在以上的设备开发场景中,可以搭建一套Windows+Ubuntu混合开发的环境,其中使用Windows平台的DevEco Device Tool可视化界面进行相关操作,通过远程连接的方式对接Ubuntu下的DevEco Device Tool(可以不安装Visual Studio Code),然后对Ubuntu下的源码进行开发、编译、烧录等操作。
## 系统要求
- Windows系统要求:Windows10 64位系统。
- Ubuntu系统要求:Ubuntu18.04~21.10版本,内存推荐16 GB及以上。
- Ubuntu系统的用户名不能包含中文字符。
- Windows和Ubuntu系统上安装的DevEco Device Tool为3.0 Release版本。
## 搭建Ubuntu环境
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 如果没有Ubuntu系统,可在Windows系统中通过虚拟机方式搭建Ubuntu系统,具体请参考[Ubuntu系统安装指导](https://developer.huawei.com/consumer/cn/training/course/video/C101639987816176315)。Ubuntu系统安装完成后,请根据指导完成[Ubuntu基础环境配置](https://developer.huawei.com/consumer/cn/training/course/video/C101639988048536240),然后再根据本章节进行DevEco Device Tool工具的安装。
1. 将Ubuntu Shell环境修改为bash。
1. 执行如下命令,确认输出结果为bash。如果输出结果不是bash,请根据步骤2将Ubuntu shell修改为bash。
```
ls -l /bin/sh
```
![zh-cn_image_0000001226764302](figures/zh-cn_image_0000001226764302.png)
2. 打开终端工具,执行如下命令,输入密码,然后选择**No**,将Ubuntu shell由dash修改为bash。
```
sudo dpkg-reconfigure dash
```
![zh-cn_image_0000001243641075](figures/zh-cn_image_0000001243641075.png)
2. 下载[DevEco Device Tool 3.0 Release](https://device.harmonyos.com/cn/ide#download) Linux版本。
3. 解压DevEco Device Tool软件包并对解压后的文件夹进行赋权。
1. 进入DevEco Device Tool软件包目录,执行如下命令解压软件包,其中devicetool-linux-tool-3.0.0.401.zip为软件包名称,请根据实际进行修改。
```
unzip devicetool-linux-tool-3.0.0.401.zip
```
2. 进入解压后的文件夹,执行如下命令,赋予安装文件可执行权限,其中devicetool-linux-tool-3.0.0.401.sh请根据实际进行修改。
```
chmod u+x devicetool-linux-tool-3.0.0.401.sh
```
4. 执行如下命令,安装DevEco Device Tool,其中devicetool-linux-tool-3.0.0.401.sh请根据实际进行修改。
```
sudo ./devicetool-linux-tool-3.0.0.401.sh
```
5. 在用户协议和隐私声明签署界面,请详细阅读用户协议和隐私声明,需签署同意用户协议和隐私声明才能进行下一步的安装。
![zh-cn_image_0000001322167645.png](figures/zh-cn_image_0000001322167645.png)
安装完成后,当界面输出“DevEco Device Tool successfully installed.”时,表示DevEco Device Tool安装成功。
![zh-cn_image_0000001198722374](figures/zh-cn_image_0000001198722374.png)
## 搭建Windows开发环境
1. 下载[DevEco Device Tool 3.0 Release](https://device.harmonyos.com/cn/ide#download)Windows版。
2. 解压DevEco Device Tool压缩包,双击安装包程序,点击Next进行安装。
3. 设置DevEco Device Tool的安装路径,请注意安装路径不能包含中文字符,同时建议安装到非系统盘符,点击**Next**
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 如果您已安装DevEco Device Tool 3.0 Beta2及以前的版本,则在安装新版本时,会先卸载旧版本,卸载过程中出现如下错误提示时,请点击“Ignore”继续安装,该错误不影响新版本的安装。
>
> ![zh-cn_image_0000001239275843](figures/zh-cn_image_0000001239275843.png)
![zh-cn_image_0000001270076961](figures/zh-cn_image_0000001270076961.png)
4. 根据安装向导提示,勾选要自动安装的软件。
1. 在弹出VSCode installation confirm页面,勾选“Install VScode 1.62.2automatically”,点击**Next**
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 如果检测到Visual Studio Code已安装,且版本为1.62及以上,则会跳过该步骤。
![zh-cn_image_0000001237801283](figures/zh-cn_image_0000001237801283.png)
2. 在弹出的Python select page选择“Download from Huawei mirror”,点击**Next**
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 如果系统已安装可兼容的Python版本(Python 3.8~3.9版本),可选择“Use one of compatible on your PC”。
![zh-cn_image_0000001193983334](figures/zh-cn_image_0000001193983334.png)
5. 在以下界面点击**Next**
![zh-cn_image_0000001259180828](figures/zh-cn_image_0000001259180828.png)
6. 请详细阅读以下界面的用户协议和隐私声明,这里须勾选"I accept the licenses",然后点击Next,安装向导才会继续进行软件下载和安装。
![zh-cn_image_0000001307019009](figures/zh-cn_image_0000001307019009.png)
7. 继续等待DevEco Device Tool安装向导自动安装DevEco Device Tool插件,直至安装完成,点击**Finish**,关闭DevEco Device Tool安装向导。
![zh-cn_image_0000001239650137](figures/zh-cn_image_0000001239650137.png)
8. 打开Visual Studio Code,进入DevEco Device Tool工具界面。至此,DevEco Device Tool Windows开发环境安装完成。
![zh-cn_image_0000001225760456](figures/zh-cn_image_0000001225760456.png)
## 配置Windows远程访问Ubuntu环境
### 安装SSH服务并获取远程访问的IP地址
1. 在Ubuntu系统中,打开终端工具,执行如下命令安装SSH服务。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 如果执行该命令失败,提示openssh-server和openssh-client依赖版本不同,请根据CLI界面提示信息,安装openssh-client相应版本后(例如:sudo apt-get install openssh-client=1:8.2p1-4),再重新执行该命令安装openssh-server。
```
sudo apt-get install openssh-server
```
2. 执行如下命令,启动SSH服务。
```
sudo systemctl start ssh
```
3. 执行如下命令,获取当前用户的IP地址,用于Windows系统远程访问Ubuntu环境。
```
ifconfig
```
![zh-cn_image_0000001215737140](figures/zh-cn_image_0000001215737140.png)
### 安装Remote SSH
1. 打开Windows系统下的Visual Studio Code,点击![zh-cn_image_0000001239080359](figures/zh-cn_image_0000001239080359.png),在插件市场的搜索输入框中输入“remote-ssh”。
![zh-cn_image_0000001193920448](figures/zh-cn_image_0000001193920448.png)
2. 点击Remote-SSH的**Install**按钮,安装Remote-SSH。安装成功后,在**INSTALLED**下可以看到已安装Remote-SSH。
![zh-cn_image_0000001238880335](figures/zh-cn_image_0000001238880335.png)
### 远程连接Ubuntu环境
1. 打开Windows系统的Visual Studio Code,点击![zh-cn_image_0000001238760373](figures/zh-cn_image_0000001238760373.png),在REMOTE EXPLORER页面点击+按钮。
![zh-cn_image_0000001215878922](figures/zh-cn_image_0000001215878922.png)
2. 在弹出的SSH连接命令输入框中输入“ssh _username_\@_ip_address_”,其中ip_address为要连接的远程计算机的IP地址,username为登录远程计算机的帐号。
![zh-cn_image_0000001215879750](figures/zh-cn_image_0000001215879750.png)
3. 在弹出的输入框中,选择SSH configuration文件,选择默认的第一选项即可。
![zh-cn_image_0000001260519729](figures/zh-cn_image_0000001260519729.png)
4. 在SSH TARGETS中,找到远程计算机,点击![zh-cn_image_0000001194080414](figures/zh-cn_image_0000001194080414.png),打开远程计算机。
![zh-cn_image_0000001215720398](figures/zh-cn_image_0000001215720398.png)
5. 在弹出的输入框中,选择**Linux**,然后在选择**Continue**,然后输入登录远程计算机的密码,连接远程计算机 。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 在Windows系统远程访问Ubuntu过程中,需要频繁的输入密码进行连接,为解决该问题,您可以使用SSH公钥来进行设置,设置方法请参考[注册远程访问Ubuntu环境的公钥](https://device.harmonyos.com/cn/docs/documentation/guide/ide-registering-public-key-0000001247162706)。
![zh-cn_image_0000001215897530](figures/zh-cn_image_0000001215897530.png)
连接成功后,等待在远程计算机.vscode-server文件夹下自动安装插件,安装完成后,根据界面提示在Windows系统下重新加载Visual Studio Code,便可以在Windows的DevEco Device Tool界面进行源码开发、编译、烧录等操作。
# Hi3516开发板介绍
## 简介
Hi3516DV300作为新一代行业专用Smart HD IP摄像机SOC,集成新一代ISP(Image Signal Processor)、H.265视频压缩编码器以及高性能NNIE引擎,具备低码率、高画质、低功耗等特点,并具备强劲的智能处理和分析能力。
**图1** Hi3516单板正面外观图  
![zh-cn_image_0000001271234717](figures/zh-cn_image_0000001271234717.png)
## 开发板规格
**表1** Hi3516开发板规格清单
| 规格类型 | 规格清单 |
| -------- | -------- |
| **处理器及内部存储** | -&nbsp;Hi3516DV300芯片<br/>-&nbsp;DDR3&nbsp;1GB<br/>-&nbsp;eMMC4.5,8GB容量 |
| **外部器件** | -&nbsp;以太网口<br/>-&nbsp;音频视频<br/>&nbsp;&nbsp;-&nbsp;1路语音输入<br/>&nbsp;&nbsp;-&nbsp;1路单声道(AC_L)输出,接3W功放(LM4871)<br/>&nbsp;&nbsp;-&nbsp;MicroHDMI(1路HDMI&nbsp;1.4)<br/>-&nbsp;摄像头<br/>&nbsp;&nbsp;-&nbsp;传感器IMX335<br/>&nbsp;&nbsp;-&nbsp;镜头M12,焦距4mm,光圈1.8<br/>-&nbsp;显示屏<br/>&nbsp;&nbsp;-&nbsp;LCD连接器(2.35寸)<br/>&nbsp;&nbsp;-&nbsp;LCD连接器(5.5寸)<br/>-&nbsp;外部器件及接口<br/>&nbsp;&nbsp;-&nbsp;SD卡接口<br/>&nbsp;&nbsp;-&nbsp;JTAG/I2S接口<br/>&nbsp;&nbsp;-&nbsp;ADC接口<br/>&nbsp;&nbsp;-&nbsp;舵机接口<br/>&nbsp;&nbsp;-&nbsp;Grove连接器<br/>&nbsp;&nbsp;-&nbsp;USB2.0(Type&nbsp;C)<br/>&nbsp;&nbsp;-&nbsp;功能按键3个,2个用户自定义按键,1个升级按键<br/>&nbsp;&nbsp;-&nbsp;LED指示灯,绿灯,红灯 |
# 轻量与小型系统入门概述
## 简介
OpenHarmony轻量和小型系统适用于内存较小的IOT设备(参考内存≥128KiB)。通过本文,开发者可以快速熟悉OpenHarmony轻量和小型系统的环境搭建、编译、烧录、调测以及运行“Hello World”等。
考虑到开发者的开发习惯,OpenHarmony为开发者提供了以下两种入门指导:
- IDE方式:完全采用IDE(DevEco Device Tool)进行一站式开发,编译依赖工具的安装及编译、烧录、运行都通过IDE进行操作。
- 安装包方式:通过命令行进行编译依赖工具的下载安装,编译操作也通过命令实现。烧录、运行等操作使用IDE。
OpenHarmony还为开发者提供了[Docker环境](../get-code/gettools-acquire.md),在很大程度上简化了编译前的环境配置,习惯使用安装包方式的开发者也可以选择Docker环境进行编译 。
本文采用DevEco Device Tool进行一站式开发介绍,习惯使用命令行的开发者可参考[轻量和小型系统快速入门(安装包方式)](../quick-start/quickstart-lite-overview.md)
## 开发环境
推荐开发者采用Windows+Ubuntu环境进行OpenHarmony开发:
- Windows:用于源码开发、烧录等。
- Ubuntu:用于源码编译。
本文将介绍如何基于Windows+Ubuntu环境进行OpenHarmony的开发。
## 开发板
本文基于以下两款典型开发板进行开发介绍 :Hi3861 WLAN模组、Hi3516DV300。开发板的具体外观和规格可参见[本文附录](../quick-start/quickstart-ide-lite-introduction-hi3861.md),开发者可根据需要自行购买开发板。
## 开发流程
轻量和小型系统快速入门流程如下图所示。
**图1** 轻量和小型系统快速入门开发流程 
 
![zh-cn_image_0000001226634676](figures/zh-cn_image_0000001226634676.png)
# 编译
1. 在菜单栏中点击**Project Settings**按钮,进入Hi3516DV300工程配置界面。
![zh-cn_image_0000001265492885](figures/zh-cn_image_0000001265492885.png)
2. 在Tool Chain页签中,DevEco Device Tool会自动检测依赖的编译工具链是否完备,如果提示部分工具缺失,可点击**Install**按钮,自动安装所需工具链。
![zh-cn_image_0000001265652869](figures/zh-cn_image_0000001265652869.png)
3. 安装Hi3516DV300相关工具链,部分工具安装需要使用root权限,请在“TERMINAL”窗口输入用户密码进行安装。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 如果出现安装pip组件失败,可参考[修改Python源的方法](https://device.harmonyos.com/cn/docs/documentation/guide/ide-set-python-source-0000001227639986)进行修改,完成尝试重新安装。
![zh-cn_image_0000001220852753](figures/zh-cn_image_0000001220852753.png)
工具链自动安装完成后如下图所示。
![zh-cn_image_0000001220852754](figures/zh-cn_image_0000001220852754.png)
4. 在“hi3516dv300”配置页签中,设置源码的编译类型**build_type**,默认为“debug“类型,请根据需要进行修改。然后点击**Save**按钮进行保存。
![zh-cn_image_0000001221172711](figures/zh-cn_image_0000001221172711.png)
5. 在“PROJECT TASKS”中,点击对应开发板下的**Build**按钮,执行编译。
![zh-cn_image_0000001265772913](figures/zh-cn_image_0000001265772913.png)
6. 等待编译完成,在**TERMINAL**窗口输出“SUCCESS”,编译完成。
![zh-cn_image_0000001221012766](figures/zh-cn_image_0000001221012766.png)
编译完成后,可以在工程的**out**目录下,查看编译生成的文件,用于后续的[Hi3516DV300开发板烧录](quickstart-ide-lite-steps-hi3516-burn.md)
# 编译
1. 在菜单栏中点击**Project Settings**按钮,进入Hi3861工程配置界面。
![zh-cn_image_0000001265785209](figures/zh-cn_image_0000001265785209.png)
2. 在Tool Chain页签中,DevEco Device Tool会自动检测依赖的编译工具链是否完备,如果提示部分工具缺失,可点击**Install**按钮,自动安装所需工具链。
![zh-cn_image_0000001221025048](figures/zh-cn_image_0000001221025048.png)
3. 安装Hi3861V100相关工具链,部分工具安装需要使用root权限,请在“TERMINAL”窗口输入用户密码进行安装。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 如果出现安装pip组件失败,可参考[修改Python源的方法](https://device.harmonyos.com/cn/docs/documentation/guide/ide-set-python-source-0000001227639986)进行修改,完成尝试重新安装。
![zh-cn_image_0000001280938208.png](figures/zh-cn_image_0000001280938208.png)
工具链自动安装完成后如下图所示。
![zh-cn_image_0000001221344980](figures/zh-cn_image_0000001221344980.png)
4. 在“hi3861”配置页签中,设置源码的编译类型**build_type**,默认为"debug"类型,请根据需要进行修改。然后点击**Save**按钮进行保存。
![zh-cn_image_0000001265945173](figures/zh-cn_image_0000001265945173.png)
5. 在DevEco Device Tool界面的“PROJECT TASKS”中,点击对应开发板下的**Build**按钮,执行编译。
![zh-cn_image_0000001265505181](figures/zh-cn_image_0000001265505181.png)
6. 等待编译完成,在**TERMINAL**窗口输出“SUCCESS”,编译完成。
![zh-cn_image_0000001265665157](figures/zh-cn_image_0000001265665157.png)
编译完成后,可以在工程的**out**目录下,查看编译生成的文件,用于后续的[Hi3861V100开发板烧录](quickstart-ide-lite-steps-hi3861-burn.md)
# 联网
完成版本编译及烧录后,下面开始介绍如何在串口终端上执行AT命令,使Hi3861 WLAN模组联网。
1. 保持Windows工作台和Hi3861 WLAN模组的连接状态,在DevEco工具最下方,点击“DevEco:Serial Monitor”按钮。
**图1** 打开DevEco串口终端示意图  
![zh-cn_image_0000001226634700](figures/zh-cn_image_0000001226634700.png)
2. 复位Hi3861 WLAN模组,终端界面显示“ready to OS start”,则启动成功。
**图2** Hi3861 WLAN模组复位成功示意图  
![zh-cn_image_0000001271594733](figures/zh-cn_image_0000001271594733.png)
3. 在DevEco的串口终端中,依次执行如下AT命令,启动STA模式,连接指定AP热点,并开启DHCP功能。
```
AT+STARTSTA # 启动STA模式
AT+SCAN # 扫描周边AP
AT+SCANRESULT # 显示扫描结果
AT+CONN="SSID",,2,"PASSWORD" # 连接指定AP,其中SSID/PASSWORD为待连接的热点名称和密码
AT+STASTAT # 查看连接结果
AT+DHCP=wlan0,1 # 通过DHCP向AP请求wlan0的IP地址
```
4. 查看Hi3861 WLAN模组与网关联通是否正常,如下图所示。
```
AT+IFCFG # 查看模组接口IP
AT+PING=X.X.X.X # 检查模组与网关的联通性,其中X.X.X.X需替换为实际的网关地址
```
**图3** Hi3861 WLAN模组联网成功示意图  
![zh-cn_image_0000001227114612](figures/zh-cn_image_0000001227114612.png)
# 运行
## 运行结果
示例代码编译、烧录、运行、调测后,重启开发板后将自动在界面输出如下结果:
```
ready to OS start
FileSystem mount ok.
wifi init success!
[DEMO] Hello world.
```
## 下一步学习
恭喜,您已完成Hi3861 WLAN模组快速上手!建议您下一步进入[WLAN产品开发](../guide/device-wlan-led-control.md)的学习 。
# Hi3516开发板介绍
## 开发板简介
Hi3516DV300作为新一代行业专用Smart HD IP摄像机SOC,集成新一代ISP(Image Signal Processor)、H.265视频压缩编码器以及高性能NNIE引擎,具备低码率、高画质、低功耗等特点,并具备强劲的智能处理和分析能力。
**图1** Hi3516单板正面外观图  
![zh-cn_image_0000001227082182](figures/zh-cn_image_0000001227082182.png)
## 开发板规格
**表1** Hi3516开发板规格清单
| 规格类型 | 规格清单 |
| -------- | -------- |
| **处理器及内部存储** | -&nbsp;Hi3516DV300芯片<br/>-&nbsp;DDR3&nbsp;1GB<br/>-&nbsp;eMMC4.5,8GB容量 |
| **外部器件** | -&nbsp;以太网口<br/>-&nbsp;音频视频<br/>&nbsp;&nbsp;-&nbsp;1路语音输入<br/>&nbsp;&nbsp;-&nbsp;1路单声道(AC_L)输出,接3W功放(LM4871)<br/>&nbsp;&nbsp;-&nbsp;MicroHDMI(1路HDMI&nbsp;1.4)<br/>-&nbsp;摄像头<br/>&nbsp;&nbsp;-&nbsp;传感器IMX335<br/>&nbsp;&nbsp;-&nbsp;镜头M12,焦距4mm,光圈1.8<br/>-&nbsp;显示屏<br/>&nbsp;&nbsp;-&nbsp;LCD连接器(2.35寸)<br/>&nbsp;&nbsp;-&nbsp;LCD连接器(5.5寸)<br/>-&nbsp;外部器件及接口<br/>&nbsp;&nbsp;-&nbsp;SD卡接口<br/>&nbsp;&nbsp;-&nbsp;JTAG/I2S接口<br/>&nbsp;&nbsp;-&nbsp;ADC接口<br/>&nbsp;&nbsp;-&nbsp;舵机接口<br/>&nbsp;&nbsp;-&nbsp;Grove连接器<br/>&nbsp;&nbsp;-&nbsp;USB2.0(Type&nbsp;C)<br/>&nbsp;&nbsp;-&nbsp;功能按键3个,2个用户自定义按键,1个升级按键<br/>&nbsp;&nbsp;-&nbsp;LED指示灯,绿灯,红灯 |
# 导入源码工程
在完成[搭建Windows+Ubuntu混合开发环境](../quick-start/quickstart-ide-standard-env-setup-win-ubuntu.md)[获取源码](../quick-start/quickstart-ide-standard-sourcecode-acquire.md)后,您需要在Windows环境中按照如下步骤导入源码工程,之后方可在DevEco Device Tool中进行后续的操作。
1. 打开DevEco Device Tool,进入Home页,点击**Import Project**打开工程。
![zh-cn_image_0000001278358765](figures/zh-cn_image_0000001278358765.png)
2. 选择OpenHarmony源码根目录路径,然后再选择**Import OpenHarmony Source**选项,点击**Import**进行导入。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 工程存储路径不能包含中文字符、空格。如果工程存储路径包含中文字符或空格,可能导致编译失败。
![zh-cn_image_0000001271477045](figures/zh-cn_image_0000001271477045.png)
3. 在Import Project界面,选择**Product**后,会自动填充对应的SOC、Board、Company和Kernel信息,然后Ohos Ver选择对应的OpenHarmony源码版本。
![zh-cn_image_0000001271448821](figures/zh-cn_image_0000001271448821.png)
4. 点击**Open**打开工程或源码。
# 搭建Windows+Ubuntu混合开发环境
通常在嵌入式开发中,很多开发者习惯于使用Windows进行代码的编辑,比如使用Windows的Visual Studio Code进行OpenHarmony代码的开发。但当前阶段,大部分的开发板源码还不支持在Windows环境下进行编译,如Hi3861、Hi3516系列开发板。因此,建议使用Ubuntu的编译环境对源码进行编译。
在以上的设备开发场景中,可以搭建一套Windows+Ubuntu混合开发的环境,其中使用Windows平台的DevEco Device Tool可视化界面进行相关操作,通过远程连接的方式对接Ubuntu下的DevEco Device Tool(可以不安装Visual Studio Code),然后对Ubuntu下的源码进行开发、编译、烧录等操作。
## 系统要求
- Windows系统要求:Windows10 64位系统。
- Ubuntu系统要求:Ubuntu18.04~21.10版本,内存推荐16 GB及以上。
- Ubuntu系统的用户名不能包含中文字符。
- Windows和Ubuntu系统上安装的DevEco Device Tool为3.0 Release版本。
## 搭建Ubuntu环境
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
>
> 如果没有Ubuntu系统,可在Windows系统中通过虚拟机方式搭建Ubuntu系统,具体请参考[Ubuntu系统安装指导](https://developer.huawei.com/consumer/cn/training/course/video/C101639987816176315)。Ubuntu系统安装完成后,请根据指导完成[Ubuntu基础环境配置](https://developer.huawei.com/consumer/cn/training/course/video/C101639988048536240),然后再根据本章节进行DevEco Device Tool工具的安装。
1. 将Ubuntu Shell环境修改为bash。
1. 执行如下命令,确认输出结果为bash。如果输出结果不是bash,请根据步骤2,将Ubuntu shell修改为bash。
```
ls -l /bin/sh
```
![zh-cn_image_0000001226764302](figures/zh-cn_image_0000001226764302.png)
2. 打开终端工具,执行如下命令,输入密码,然后选择**No**,将Ubuntu shell由dash修改为bash。
```
sudo dpkg-reconfigure dash
```
![zh-cn_image_0000001243641075](figures/zh-cn_image_0000001243641075.png)
2. 下载[DevEco Device Tool 3.0 Release](https://device.harmonyos.com/cn/ide#download) Linux版本。
3. 解压DevEco Device Tool软件包并对解压后的文件夹进行赋权。
1. 进入DevEco Device Tool软件包目录,执行如下命令解压软件包,其中devicetool-linux-tool-3.0.0.401.zip为软件包名称,请根据实际进行修改。
```
unzip devicetool-linux-tool-3.0.0.401.zip
```
2. 进入解压后的文件夹,执行如下命令,赋予安装文件可执行权限,其中devicetool-linux-tool-3.0.0.401.sh请根据实际进行修改。
```
chmod u+x devicetool-linux-tool-3.0.0.401.sh
```
4. 执行如下命令,安装DevEco Device Tool,其中devicetool-linux-tool-3.0.0.401.sh请根据实际进行修改。
```
sudo ./devicetool-linux-tool-3.0.0.401.sh
```
5. 在用户协议和隐私声明签署界面,请详细阅读用户协议和隐私声明,需签署同意用户协议和隐私声明才能进行下一步的安装。
![zh-cn_image_0000001322167645.png](figures/zh-cn_image_0000001322167645.png)
安装完成后,当界面输出“DevEco Device Tool successfully installed.”时,表示DevEco Device Tool安装成功。
![zh-cn_image_0000001198722374](figures/zh-cn_image_0000001198722374.png)
## 搭建Windows开发环境
1. 下载[DevEco Device Tool 3.0 Release](https://device.harmonyos.com/cn/ide#download) Windows版。
2. 解压DevEco Device Tool压缩包,双击安装包程序,点击Next进行安装。
3. 设置DevEco Device Tool的安装路径,请注意安装路径不能包含中文字符,同时建议安装到非系统盘符,点击**Next**
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
>
> 如果您已安装DevEco Device Tool 3.0 Beta2及以前的版本,则在安装新版本时,会先卸载旧版本,卸载过程中出现如下错误提示时,请点击“Ignore”继续安装,该错误不影响新版本的安装。
>
> ![zh-cn_image_0000001239275843](figures/zh-cn_image_0000001239275843.png)
![zh-cn_image_0000001270076961](figures/zh-cn_image_0000001270076961.png)
4. 根据安装向导提示,勾选要自动安装的软件。
1. 在弹出VSCode installation confirm页面,勾选“Install VScode 1.62.2automatically”,点击**Next**
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 如果检测到Visual Studio Code已安装,且版本为1.62及以上,则会跳过该步骤。
![zh-cn_image_0000001237801283](figures/zh-cn_image_0000001237801283.png)
2. 在弹出的Python select page选择“Download from Huawei mirror”,点击**Next**
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 如果系统已安装可兼容的Python版本(Python 3.8~3.9版本),可选择“Use one of compatible on your PC”。
![zh-cn_image_0000001193983334](figures/zh-cn_image_0000001193983334.png)
5. 在以下界面点击**Next**
![zh-cn_image_0000001259180828](figures/zh-cn_image_0000001259180828.png)
6. 请详细阅读以下界面的用户协议和隐私声明,这里须勾选"I accept the licenses",然后点击Next,安装向导才会继续进行软件下载和安装。
![zh-cn_image_0000001307019009](figures/zh-cn_image_0000001307019009.png)
7. 继续等待DevEco Device Tool安装向导自动安装DevEco Device Tool插件,直至安装完成,点击**Finish**,关闭DevEco Device Tool安装向导。
![zh-cn_image_0000001239650137](figures/zh-cn_image_0000001239650137.png)
8. 打开Visual Studio Code,进入DevEco Device Tool工具界面。至此,DevEco Device Tool Windows开发环境安装完成。
![zh-cn_image_0000001225760456](figures/zh-cn_image_0000001225760456.png)
## 配置Windows远程访问Ubuntu环境
### 安装SSH服务并获取远程访问的IP地址
1. 在Ubuntu系统中,打开终端工具,执行如下命令安装SSH服务。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
>
> 如果执行该命令失败,提示openssh-server和openssh-client依赖版本不同,请根据CLI界面提示信息,安装openssh-client相应版本后(例如:sudo apt-get install openssh-client=1:8.2p1-4),再重新执行该命令安装openssh-server。
```
sudo apt-get install openssh-server
```
2. 执行如下命令,启动SSH服务。
```
sudo systemctl start ssh
```
3. 执行如下命令,获取当前用户的IP地址,用于Windows系统远程访问Ubuntu环境。
```
ifconfig
```
![zh-cn_image_0000001215737140](figures/zh-cn_image_0000001215737140.png)
### 安装Remote SSH
1. 打开Windows系统下的Visual Studio Code,点击![zh-cn_image_0000001239080359](figures/zh-cn_image_0000001239080359.png),在插件市场的搜索输入框中输入“remote-ssh”。
![zh-cn_image_0000001193920448](figures/zh-cn_image_0000001193920448.png)
2. 点击Remote-SSH的**Install**按钮,安装Remote-SSH。安装成功后,在**INSTALLED**下可以看到已安装Remote-SSH。
![zh-cn_image_0000001238880335](figures/zh-cn_image_0000001238880335.png)
### 远程连接Ubuntu环境
1. 打开Windows系统的Visual Studio Code,点击![zh-cn_image_0000001238760373](figures/zh-cn_image_0000001238760373.png),在REMOTE EXPLORER页面点击+按钮。
![zh-cn_image_0000001215878922](figures/zh-cn_image_0000001215878922.png)
2. 在弹出的SSH连接命令输入框中输入“ssh _username_\@_ip_address_”,其中ip_address为要连接的远程计算机的IP地址,username为登录远程计算机的帐号。
![zh-cn_image_0000001215879750](figures/zh-cn_image_0000001215879750.png)
3. 在弹出的输入框中,选择SSH configuration文件,选择默认的第一选项即可。
![zh-cn_image_0000001260519729](figures/zh-cn_image_0000001260519729.png)
4. 在SSH TARGETS中,找到远程计算机,点击![zh-cn_image_0000001194080414](figures/zh-cn_image_0000001194080414.png),打开远程计算机。
![zh-cn_image_0000001215720398](figures/zh-cn_image_0000001215720398.png)
5. 在弹出的输入框中,选择**Linux**,然后在选择**Continue**,然后输入登录远程计算机的密码,连接远程计算机 。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
>
> 在Windows系统远程访问Ubuntu过程中,需要频繁的输入密码进行连接,为解决该问题,您可以使用SSH公钥来进行设置,设置方法请参考[注册远程访问Ubuntu环境的公钥](https://device.harmonyos.com/cn/docs/documentation/guide/ide-registering-public-key-0000001247162706)。
![zh-cn_image_0000001215897530](figures/zh-cn_image_0000001215897530.png)
连接成功后,等待在远程计算机.vscode-server文件夹下自动安装插件,安装完成后,根据界面提示在Windows系统下重新加载Visual Studio Code,便可以在Windows的DevEco Device Tool界面进行源码开发、编译、烧录等操作。
# 标准系统入门概述
## 简介
OpenHarmony标准系统适用于参考内存≥128MiB的设备。通过本文,开发者可以快速熟悉OpenHarmony标准系统的环境搭建、编译、烧录、调测以及运行“Hello World”等。
考虑到开发者的开发习惯,OpenHarmony为开发者提供了以下两种入门指导:
- IDE方式:完全采用IDE(DevEco Device Tool)进行一站式开发,编译依赖工具的安装及编译、烧录、运行都通过IDE进行操作。
- 安装包方式:通过命令行进行编译依赖工具的下载安装,编译操作也通过命令实现。烧录、运行等操作使用IDE。
OpenHarmony还为开发者提供了[Docker环境](../get-code/gettools-acquire.md),在很大程度上简化了编译前的环境配置,习惯使用安装包方式的开发者也可以选择Docker环境进行编译 。
本文采用DevEco Device Tool进行一站式开发介绍,习惯使用命令行的开发者可参考[标准系统快速入门(安装包方式)](quickstart-standard-overview.md)
## 开发环境
推荐开发者采用Windows+Ubuntu环境进行OpenHarmony开发:
- Windows:用于源码开发、烧录等。
- Ubuntu:用于源码编译。
本文将介绍如何基于Windows+Ubuntu环境进行OpenHarmony的开发。
## 开发板
本文选取了两款典型开发板:Hi3516DV300、RK3568,并基于上述两款开发板进行开发介绍。开发板的具体外观和规格可参见[本文附录](../quick-start/quickstart-ide-standard-board-introduction-hi3516.md),开发者可根据需要自行购买开发板。
## 开发流程
标准系统快速入门流程如下图所示:
**图1** 标准系统快速入门开发流程
 
![zh-cn_image_0000001271562257](figures/zh-cn_image_0000001271562257.png)
# 烧录
烧录是指将编译后的程序文件下载到芯片开发板上的动作,为后续的程序调试提供基础。DevEco Device Tool提供一键烧录功能,操作简单,能快捷、高效的完成程序烧录,提升烧录的效率。
Hi3516DV300开发板小型系统的烧录方式包括USB烧录、网口烧录两种方式,本文采用USB方式进行烧录。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 使用USB烧录方式,在DevEco Device Tool 2.2 Beta2及更高版本中支持。
1. 请连接好电脑和待烧录开发板,需要连接USB口和串口,具体可参考[Hi3516DV300开发板介绍](quickstart-lite-introduction-hi3516.md)
2. 根据[Hi3516DV300开发板串口驱动安装指导](https://gitee.com/link?target=https%3A%2F%2Fdevice.harmonyos.com%2Fcn%2Fdocs%2Fdocumentation%2Fguide%2Fhi3516_hi3518-drivers-0000001050743695)[Hi3516DV300开发板USB驱动安装指导](https://device.harmonyos.com/cn/docs/documentation/guide/usb_driver-0000001058690393)安装USB驱动及USB转串口的驱动。若您的设备中已安装此驱动,请忽略该步骤。
3. 在DevEco Device Tool中,选择REMOTE DEVELOPMENT &gt; Local PC,查看远程计算机(Ubuntu开发环境)与本地计算机(Windows开发环境)的连接状态。
- 如果Local PC右边连接按钮为![zh-cn_image_0000001261315939](figures/zh-cn_image_0000001261315939.png),则远程计算机与本地计算机为已连接状态,不需要执行其他操作。
- 如果Local PC右边连接按钮为![zh-cn_image_0000001261515989](figures/zh-cn_image_0000001261515989.png),则点击绿色按钮进行连接。连接时DevEco Device Tool会重启服务,因此请不要在下载源码或源码编译过程中进行连接,否则会中断任务。
![zh-cn_image_0000001261395999](figures/zh-cn_image_0000001261395999.png)
4. 在菜单栏中点击**Project Settings**按钮,进入Hi3516DV300工程配置界面。
![zh-cn_image_0000001198566364](figures/zh-cn_image_0000001198566364.png)
5. 在“Tool Chain”页签,设置Uploader烧录器工具,可以通过Tool Chain页签中的Install按钮在线安装。
![zh-cn_image_0000001198566365](figures/zh-cn_image_0000001198566365.png)
6. 在“hi3516dv300”页签,设置烧录选项,包括upload_partitions、upload_port和upload_protocol。
- upload_partitions:选择待烧录程序的配置文件(已预置默认的配置文件),该配置文件会指定烧录文件名称、起始烧录地址、地址长度等信息;同时请勾选**Enable to use upload_partitions_profile for upload**选项。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
>
> 如需修改烧录profile文件,在设置烧录分区起始地址和分区长度时,应根据实际待烧录文件的大小进行设置,要求设置的烧录分区大小,要大于待烧录文件的大小;同时,各烧录文件的分区地址设置不能出现重叠。
>
> 首次烧录,请勾选**Enable to use upload_partitions_profile for upload**选项,会自动生成upload_partitions文件。再次烧录时,可根据实际情况选择生成upload_partitions文件进行自定义烧录,也可以再勾选**Enable to use upload_partitions_profile for upload**选项,使用upload_partitions_profile重新生成upload_partitions文件用于烧录。
- upload_protocol:选择烧录协议,固定选择“hiburn-usb”。
- upload_port:选择已查询的串口号。
![zh-cn_image_0000001177478136](figures/zh-cn_image_0000001177478136.png)
7. 所有的配置都修改完成后,在工程配置页签的顶部,点击**Save**进行保存。
8. 点击hi3516dv300下的**Upload**按钮。
![zh-cn_image_0000001267532292](figures/zh-cn_image_0000001267532292.png)
此时待烧录文件会从Ubuntu系统传输到Windows下,传输完成后界面显示“Operation paused, Please press Enter key to continue”时,请点击**Enter**键启动烧录。
![zh-cn_image_0000001114129427](figures/zh-cn_image_0000001114129427.png)
9. 在终端窗口显示如下提示信息时,请在15秒内,按住Update键,插拔USB线,最后松开Update键启动烧录。
![zh-cn_image_0000001326412233.png](figures/zh-cn_image_0000001326412233.png)
启动烧录后,界面提示**SUCCESS**信息时,表示烧录成功。
![zh-cn_image_0000001160649344](figures/zh-cn_image_0000001160649344.png)
11. 烧录成功后,请根据运行章节进行操作,启动系统。
\ No newline at end of file
# 运行
## 启动系统
烧录完成后通过以下步骤启动系统:
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 初次烧写标准系统,需要完成以下配置,后续烧写或者启动,可以跳过以下操作。
1. 在DevEco Device Tool中,点击Monitor,打开串口工具。
![zh-cn_image_0000001227082162](figures/zh-cn_image_0000001227082162.png)
2. 重启开发板,在倒计时结束前,按任意键进入系统。
![zh-cn_image_0000001271202289](figures/zh-cn_image_0000001271202289.gif)
3. 通过以下两条命令设置启动参数。
```
setenv bootargs 'mem=640M console=ttyAMA0,115200 mmz=anonymous,0,0xA8000000,384M clk_ignore_unused rootdelay=10 hardware=Hi3516DV300 init=/init root=/dev/ram0 rw blkdevparts=mmcblk0:1M(boot),15M(kernel),20M(updater),2M(misc),3307M(system),256M(vendor),-(userdata)';
```
```
setenv bootcmd 'mmc read 0x0 0x82000000 0x800 0x4800; bootm 0x82000000'
```
![zh-cn_image_0000001271562269](figures/zh-cn_image_0000001271562269.png)
4. 保存参数设置。
```
save
```
![zh-cn_image_0000001226762210](figures/zh-cn_image_0000001226762210.png)
5. 重启开发板,完成系统启动。
```
reset
```
![zh-cn_image_0000001226602238](figures/zh-cn_image_0000001226602238.png)
## 运行“Hello World”
设备启动后打开串口工具,在任意目录下输入命令helloworld后回车,界面打印“Hello World!”,程序运行成功。
![zh-cn_image_0000001271322277](figures/zh-cn_image_0000001271322277.png)
## 下一步
恭喜!您已经完成了OpenHarmony标准系统的快速入门,接下来可[开发一个小示例](../guide/device-clock-guide.md),进一步熟悉OpenHarmony的开发。
# 烧录
烧录是指将编译后的程序文件下载到芯片开发板上的动作,为后续的程序调试提供基础。DevEco Device Tool提供一键烧录功能,操作简单,能快捷、高效的完成程序烧录,提升烧录的效率。
RK3568的镜像烧录通过Windows环境进行烧录,开发者启动烧录操作后,DevEco Device Tool通过Remote远程模式,将Ubuntu环境下编译生成的带烧录程序文件拷贝至Windows目录下,然后通过Windows的烧录工具将程序文件烧录至开发板中。
1. [下载](https://gitee.com/hihope_iot/docs/blob/master/HiHope_DAYU200/%E7%83%A7%E5%86%99%E5%B7%A5%E5%85%B7%E5%8F%8A%E6%8C%87%E5%8D%97/windows/DriverAssitant_v5.1.1.zip)并安装驱动DriverInstall.exe。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
>
> 如果已经安装旧版本的烧写工具,请先点击"驱动卸载"按钮卸载驱动,然后再点击"驱动安装"按钮安装驱动。
2. 请连接好电脑和待烧录开发板,连接USB接口,具体可参考[RK3568开发板介绍](quickstart-standard-board-introduction-rk3568.md)
3. 在DevEco Device Tool中,选择REMOTE DEVELOPMENT &gt; Local PC,查看远程计算机(Ubuntu开发环境)与本地计算机(Windows开发环境)的连接状态。
- 如果Local PC右边连接按钮为![zh-cn_image_0000001261315939](figures/zh-cn_image_0000001261315939.png),则远程计算机与本地计算机为已连接状态,不需要执行其他操作。
- 如果Local PC右边连接按钮为![zh-cn_image_0000001261515989](figures/zh-cn_image_0000001261515989.png),则点击绿色按钮进行连接。连接时DevEco Device Tool会重启服务,因此请不要在下载源码或源码编译过程中进行连接,否则会中断任务。
![zh-cn_image_0000001261395999](figures/zh-cn_image_0000001261395999.png)
4. 在菜单栏中点击**Project Settings**按钮,进入RK3568工程配置界面。
![zh-cn_image_0000001198566364](figures/zh-cn_image_0000001198566364.png)
5. 在“Tool Chain”页签,设置Uploader烧录器工具,可以通过Tool Chain页签中的Install按钮在线安装。
![zh-cn_image_0000001239661509](figures/zh-cn_image_0000001239661509.png)
6. 在“hh_scdy200”页签,设置烧录选项,包括upload_partitions和upload_protocol。
- upload_partitions_profile:选择待烧录程序的配置文件,该配置文件会指定烧录文件名称、起始烧录地址、地址长度等信息;同时请勾选**Enable to use upload_partitions_profile for upload**选项。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
>
> 如需修改烧录profile文件,在设置烧录分区起始地址和分区长度时,应根据实际待烧录文件的大小进行设置,要求设置的烧录分区大小,要大于待烧录文件的大小;同时,各烧录文件的分区地址设置不能出现重叠。
>
> 首次烧录,请勾选**Enable to use upload_partitions_profile for upload**选项,会自动生成upload_partitions文件。再次烧录时,可根据实际情况选择生成upload_partitions文件进行自定义烧录,也可以再勾选**Enable to use upload_partitions_profile for upload**选项,使用upload_partitions_profile重新生成upload_partitions文件用于烧录。
- upload_protocol:选择烧录协议,固定选择“upgrade”。
![zh-cn_image_0000001194504874](figures/zh-cn_image_0000001194504874.png)
7. 所有的配置都修改完成后,在工程配置页签的顶部,点击**Save**进行保存。
8. 在“PROJECT TASKS”中,点击hh_scdy200下的**Upload**按钮启动烧录。
![zh-cn_image_0000001194821710](figures/zh-cn_image_0000001194821710.png)
9. 当屏幕提示“Operation paused,Please press Enter key to continue”,请按回车键继续。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
>
> 如果开发板未处于烧录模式,屏幕会提示“The board is not in Loader mode.Please Hold on the VOL+key...”,此时,请长按音量+键,3秒后点击RESET键,然后再过3秒放开音量+键,使开发板进入烧录模式。
等待开发板烧录完成,当屏幕提示如下信息时,表示烧录成功。
![zh-cn_image_0000001194984912](figures/zh-cn_image_0000001194984912.png)
# 获取源码
在Ubuntu环境下通过以下步骤获取OpenHarmony源码。
## 前提条件
1. 注册码云gitee帐号。
2. 注册码云SSH公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191)
3. 安装git客户端和git-lfs。(上述工具已在搭建环境章节安装。如已安装,请忽略)
更新软件源:
```
sudo apt-get update
```
通过以下命令安装:
```
sudo apt-get install git git-lfs
```
4. 配置用户信息。
```
git config --global user.name "yourname"
git config --global user.email "your-email-address"
git config --global credential.helper store
```
5. 执行如下命令安装码云repo工具。
下述命令中的安装路径以"~/bin"为例,请用户自行创建所需目录。
```
mkdir ~/bin
curl https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 -o ~/bin/repo
chmod a+x ~/bin/repo
pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple requests
```
6. 将repo添加到环境变量。
```
vim ~/.bashrc # 编辑环境变量
export PATH=~/bin:$PATH # 在环境变量的最后添加一行repo路径信息
source ~/.bashrc # 应用环境变量
```
## 获取方式
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
>
> Master主干为开发分支,开发者可通过Master主干获取最新特性。发布分支代码相对比较稳定,开发者可基于发布分支代码进行商用功能开发。
- **OpenHarmony主干代码获取**
方式一(推荐):通过repo + ssh下载(需注册公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191))。
```
repo init -u git@gitee.com:openharmony/manifest.git -b master --no-repo-verify
repo sync -c
repo forall -c 'git lfs pull'
```
方式二:通过repo + https下载。
```
repo init -u https://gitee.com/openharmony/manifest.git -b master --no-repo-verify
repo sync -c
repo forall -c 'git lfs pull'
```
- **OpenHarmony发布分支代码获取**
OpenHarmony各个版本发布分支的源码获取方式请参考[Release-Notes](../../release-notes/Readme.md)
### 执行prebuilts
在源码根目录下执行prebuilts脚本,安装编译器及二进制工具。
```
bash build/prebuilts_download.sh
```
# 使用IDE快速入门
- 基于IDE入门
- 搭建开发环境
- [搭建Windows环境](quickstart-ide-env--win.md)
- [搭建Ubuntu环境](quickstart-ide-env-ubuntu.md)
- [配置远程访问环境](quickstart-ide-env-remote.md)
- [创建工程并获取源码](quickstart-ide-import-project.md)
- 轻量系统(基于Hi3861开发板)
- [编写“Hello World”程序](quickstart-ide-3861-helloworld.md)
- [编译](quickstart-ide-3861-build.md)
- [烧录](quickstart-ide-3861-burn.md)
- [运行](quickstart-ide-3861-running.md)
- 小型系统(基于Hi3516开发板)
- [编写“Hello World”程序](quickstart-ide-3516-helloworld.md)
- [编译](quickstart-ide-3516-build.md)
- [烧录](quickstart-ide-3516-burn.md)
- [运行](quickstart-ide-3516-running.md)
- 标准系统(基于RK3568开发板)
- [编写“Hello World”程序](quickstart-ide-3568-helloworld.md)
- [编译](quickstart-ide-3568-build.md)
- [烧录](quickstart-ide-3568-burn.md)
- [运行](quickstart-ide-3568-running.md)
# 搭建轻量与小型系统环境
## 系统要求
- Windows系统要求:Windows10 64位系统。
- Ubuntu系统要求:Ubuntu18.04~21.10版本,内存推荐16 GB及以上。
- Windows系统和Ubuntu系统的用户名不能包含中文字符。
- Windows和Ubuntu上安装的DevEco Device Tool为3.0 Release版本。
## 安装必要的库和工具
编译OpenHarmony需要一些库和工具,可以通过以下步骤进行安装。
相应操作在Ubuntu环境中进行。
1. 使用如下apt-get命令安装后续操作所需的库和工具:
```
sudo apt-get update && sudo apt-get install binutils binutils-dev git git-lfs gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib gcc-arm-linux-gnueabi libc6-dev-i386 libc6-dev-amd64 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip m4 bc gnutls-bin python3.8 python3-pip ruby genext2fs device-tree-compiler make libffi-dev e2fsprogs pkg-config perl openssl libssl-dev libelf-dev libdwarf-dev u-boot-tools mtd-utils cpio doxygen liblz4-tool openjdk-8-jre gcc g++ texinfo dosfstools mtools default-jre default-jdk libncurses5 apt-utils wget scons python3.8-distutils tar rsync git-core libxml2-dev lib32z-dev grsync xxd libglib2.0-dev libpixman-1-dev kmod jfsutils reiserfsprogs xfsprogs squashfs-tools pcmciautils quota ppp libtinfo-dev libtinfo5 libncurses5-dev libncursesw5 libstdc++6 gcc-arm-none-eabi vim ssh locales libxinerama-dev libxcursor-dev libxrandr-dev libxi-dev
```
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 以上安装命令适用于Ubuntu18.04,其他版本请根据安装包名称采用对应的安装命令。其中:
>
> - Python要求安装Python 3.8及以上版本,此处以Python 3.8为例。
>
> - Java要求java8及以上版本,此处以java8为例。
2. 将python 3.8设置为默认python版本。
查看python 3.8的位置:
```
which python3.8
```
将python和python3切换为python3.8:
```
sudo update-alternatives --install /usr/bin/python python {python3.8 路径} 1 #{python3.8 路径}为上一步查看的python3.8的位置
sudo update-alternatives --install /usr/bin/python3 python3 {python3.8 路径} 1 #{python3.8 路径}为上一步查看的python3.8的位置
```
## 安装DevEco Device Tool
通过Windows系统远程访问Ubuntu环境进行烧录等操作,需要先在Windows和Ubuntu下分别安装DevEco Device Tool。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> DevEco Device Tool是OpenHarmony的一站式开发工具,支持源码开发、编译、烧录,调测等,本文主要用其远端连接Ubuntu环境进行烧录和运行。
### 安装Window版本DevEco Device Tool
1. 下载[DevEco Device Tool 3.0 Release](https://device.harmonyos.com/cn/ide#download) Windows版。
2. 解压DevEco Device Tool压缩包,双击安装包程序,点击Next进行安装。
3. 设置DevEco Device Tool的安装路径,请注意安装路径不能包含中文字符,同时建议安装到非系统盘符,点击**Next**
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 如果您已安装DevEco Device Tool 3.0 Beta2及以前的版本,则在安装新版本时,会先卸载旧版本,卸载过程中出现如下错误提示时,请点击“Ignore”继续安装,该错误不影响新版本的安装。
>
> ![zh-cn_image_0000001239275843](figures/zh-cn_image_0000001239275843.png)
![zh-cn_image_0000001270076961](figures/zh-cn_image_0000001270076961.png)
4. 根据安装向导提示,勾选要自动安装的软件。
1. 在弹出VSCode installation confirm页面,勾选“Install VScode 1.62.2automatically”,点击**Next**
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 如果检测到Visual Studio Code已安装,且版本为1.62及以上,则会跳过该步骤。
![zh-cn_image_0000001237801283](figures/zh-cn_image_0000001237801283.png)
2. 在弹出的Python select page选择“Download from Huawei mirror”,点击**Next**
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 如果系统已安装可兼容的Python版本(Python 3.8~3.9版本),可选择“Use one of compatible on your PC”。
![zh-cn_image_0000001193983334](figures/zh-cn_image_0000001193983334.png)
5. 在以下界面点击**Next**
![zh-cn_image_0000001259180828](figures/zh-cn_image_0000001259180828.png)
6. 请详细阅读以下界面的用户协议和隐私声明,这里须勾选"I accept the licenses",然后点击Next,安装向导才会继续进行软件下载和安装。
![zh-cn_image_0000001307019009](figures/zh-cn_image_0000001307019009.png)
7. 继续等待DevEco Device Tool安装向导自动安装DevEco Device Tool插件,直至安装完成,点击**Finish**,关闭DevEco Device Tool安装向导。
![zh-cn_image_0000001239650137](figures/zh-cn_image_0000001239650137.png)
8. 打开Visual Studio Code,进入DevEco Device Tool工具界面。至此,DevEco Device Tool Windows开发环境安装完成。
![zh-cn_image_0000001225760456](figures/zh-cn_image_0000001225760456.png)
### 安装Ubuntu版本DevEco Device Tool
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 如果没有Ubuntu系统,可在Windows系统中通过虚拟机方式搭建Ubuntu系统,具体请参考[Ubuntu系统安装指导](https://developer.huawei.com/consumer/cn/training/course/video/C101639987816176315)。Ubuntu系统安装完成后,请根据指导完成[Ubuntu基础环境配置](https://developer.huawei.com/consumer/cn/training/course/video/C101639988048536240),然后再根据本章节进行DevEco Device Tool工具的安装。
1. 将Ubuntu Shell环境修改为bash。
1. 执行如下命令,确认输出结果为bash。如果输出结果不是bash,请根据步骤2,将Ubuntu shell修改为bash。
```
ls -l /bin/sh
```
![zh-cn_image_0000001226764302](figures/zh-cn_image_0000001226764302.png)
2. 打开终端工具,执行如下命令,输入密码,然后选择**No**,将Ubuntu shell由dash修改为bash。
```
sudo dpkg-reconfigure dash
```
![zh-cn_image_0000001243641075](figures/zh-cn_image_0000001243641075.png)
2. 下载[DevEco Device Tool 3.0 Release](https://device.harmonyos.com/cn/ide#download) Linux版本。
3. 解压DevEco Device Tool软件包并对解压后的文件夹进行赋权。
1. 进入DevEco Device Tool软件包目录,执行如下命令解压软件包,其中devicetool-linux-tool-3.0.0.401.zip为软件包名称,请根据实际进行修改。
```
unzip devicetool-linux-tool-3.0.0.401.zip
```
2. 进入解压后的文件夹,执行如下命令,赋予安装文件可执行权限,其中devicetool-linux-tool-3.0.0.401.sh请根据实际进行修改。
```
chmod u+x devicetool-linux-tool-3.0.0.401.sh
```
4. 执行如下命令,安装DevEco Device Tool,其中devicetool-linux-tool-3.0.0.401.sh请根据实际进行修改。
```
sudo ./devicetool-linux-tool-3.0.0.401.sh
```
5. 在用户协议和隐私声明签署界面,请详细阅读用户协议和隐私声明,需签署同意用户协议和隐私声明才能进行下一步的安装。
![zh-cn_image_0000001322167645.png](figures/zh-cn_image_0000001322167645.png)
安装完成后,当界面输出“DevEco Device Tool successfully installed.”时,表示DevEco Device Tool安装成功。
![zh-cn_image_0000001198722374](figures/zh-cn_image_0000001198722374.png)
## 配置Windows远程访问Ubuntu环境
### 安装SSH服务并获取远程访问的IP地址
1. 在Ubuntu系统中,打开终端工具,执行如下命令安装SSH服务。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 如果执行该命令失败,提示openssh-server和openssh-client依赖版本不同,请根据CLI界面提示信息,安装openssh-client相应版本后(例如:sudo apt-get install openssh-client=1:8.2p1-4),再重新执行该命令安装openssh-server。
```
sudo apt-get install openssh-server
```
2. 执行如下命令,启动SSH服务。
```
sudo systemctl start ssh
```
3. 执行如下命令,获取当前用户的IP地址,用于Windows系统远程访问Ubuntu环境。
```
ifconfig
```
![zh-cn_image_0000001215737140](figures/zh-cn_image_0000001215737140.png)
### 安装Remote SSH
1. 打开Windows系统下的Visual Studio Code,点击![zh-cn_image_0000001239080359](figures/zh-cn_image_0000001239080359.png),在插件市场的搜索输入框中输入“remote-ssh”。
![zh-cn_image_0000001193920448](figures/zh-cn_image_0000001193920448.png)
2. 点击Remote-SSH的**Install**按钮,安装Remote-SSH。安装成功后,在**INSTALLED**下可以看到已安装Remote-SSH。
![zh-cn_image_0000001238880335](figures/zh-cn_image_0000001238880335.png)
### 远程连接Ubuntu环境
1. 打开Windows系统的Visual Studio Code,点击![zh-cn_image_0000001238760373](figures/zh-cn_image_0000001238760373.png),在REMOTE EXPLORER页面点击+按钮。
![zh-cn_image_0000001215878922](figures/zh-cn_image_0000001215878922.png)
2. 在弹出的SSH连接命令输入框中输入“ssh _username_\@_ip_address_”,其中ip_address为要连接的远程计算机的IP地址,username为登录远程计算机的帐号。
![zh-cn_image_0000001215879750](figures/zh-cn_image_0000001215879750.png)
3. 在弹出的输入框中,选择SSH configuration文件,选择默认的第一选项即可。
![zh-cn_image_0000001260519729](figures/zh-cn_image_0000001260519729.png)
4. 在SSH TARGETS中,找到远程计算机,点击![zh-cn_image_0000001194080414](figures/zh-cn_image_0000001194080414.png),打开远程计算机。
![zh-cn_image_0000001215720398](figures/zh-cn_image_0000001215720398.png)
5. 在弹出的输入框中,选择**Linux**,然后在选择**Continue**,然后输入登录远程计算机的密码,连接远程计算机 。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 在Windows系统远程访问Ubuntu过程中,需要频繁的输入密码进行连接,为解决该问题,您可以使用SSH公钥来进行设置,设置方法请参考[注册远程访问Ubuntu环境的公钥](https://device.harmonyos.com/cn/docs/documentation/guide/ide-registering-public-key-0000001247162706)。
![zh-cn_image_0000001215897530](figures/zh-cn_image_0000001215897530.png)
连接成功后,等待在远程计算机.vscode-server文件夹下自动安装插件,安装完成后,根据界面提示在Windows系统下重新加载Visual Studio Code,便可以在Windows的DevEco Device Tool界面进行源码开发、编译、烧录等操作。
## 获取源码
在Ubuntu环境下通过以下步骤获取OpenHarmony源码。
### 准备工作
1. 注册码云gitee帐号。
2. 注册码云SSH公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191)
3. 安装git客户端和git-lfs。(上述工具已在安装必要的库和工具小节安装。如已安装,请忽略)
更新软件源:
```
sudo apt-get update
```
通过以下命令安装:
```
sudo apt-get install git git-lfs
```
4. 配置用户信息。
```
git config --global user.name "yourname"
git config --global user.email "your-email-address"
git config --global credential.helper store
```
5. 执行如下命令安装码云repo工具。
下述命令中的安装路径以"~/bin"为例,请用户自行创建所需目录。
```
mkdir ~/bin
curl https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 -o ~/bin/repo
chmod a+x ~/bin/repo
pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple requests
```
6. 将repo添加到环境变量。
```
vim ~/.bashrc # 编辑环境变量
export PATH=~/bin:$PATH # 在环境变量的最后添加一行repo路径信息
source ~/.bashrc # 应用环境变量
```
### 获取方式
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> Master主干为开发分支,开发者可通过Master主干获取最新特性。发布分支代码相对比较稳定,开发者可基于发布分支代码进行商用功能开发。
- **OpenHarmony主干代码获取**
方式一(推荐):通过repo + ssh下载(需注册公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191))。
```
repo init -u git@gitee.com:openharmony/manifest.git -b master --no-repo-verify
repo sync -c
repo forall -c 'git lfs pull'
```
方式二:通过repo + https下载。
```
repo init -u https://gitee.com/openharmony/manifest.git -b master --no-repo-verify
repo sync -c
repo forall -c 'git lfs pull'
```
- **OpenHarmony发布分支代码获取**
OpenHarmony各个版本发布分支的源码获取方式请参考[Release-Notes](../../release-notes/Readme.md)
### 执行prebuilts
在源码根目录下执行prebuilts脚本,安装编译器及二进制工具。
```
bash build/prebuilts_download.sh
```
## 安装编译工具
想要详细了解OpenHarmony编译构建模块功能的开发者可参考[编译构建指导](../subsystems/subsys-build-all.md)
相关操作在Ubuntu环境下进行。
### 安装hb
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 如需安装代理,请参考[配置代理](../quick-start/quickstart-lite-reference.md#配置代理)。
1. 运行如下命令安装hb并更新至最新版本
```
pip3 install --user build/lite
```
2. 设置环境变量
```
vim ~/.bashrc
```
将以下命令拷贝到.bashrc文件的最后一行,保存并退出。
```
export PATH=~/.local/bin:$PATH
```
执行如下命令更新环境变量。
```
source ~/.bashrc
```
3. 在源码目录执行"hb -h",界面打印以下信息即表示安装成功:
```
usage: hb
OHOS build system
positional arguments:
{build,set,env,clean}
build Build source code
set OHOS build settings
env Show OHOS build env
clean Clean output
optional arguments:
-h, --help show this help message and exit
```
> ![icon-notice.gif](public_sys-resources/icon-notice.gif) **须知:**
> - 可采用以下命令卸载hb:
>
> ```
> pip3 uninstall ohos-build
> ```
>
> - 若安装hb的过程中遇到问题,请参见下文[常见问题](../quick-start/quickstart-lite-faq-hb.md)进行解决。
### 安装LLVM(仅OpenHarmony_v1.x分支/标签需要)
> ![icon-notice.gif](public_sys-resources/icon-notice.gif) **须知:**
> 如果下载的源码为OpenHarmony_v1.x分支/标签,请按下面的步骤安装12.0.1版本的llvm。
>
> 如果下载的源码为Master及非OpenHarmony_v1.x分支/标签,可直接跳过本小节,hb会自动下载最新的llvm。
1. 打开Linux编译服务器终端。
2. [下载LLVM工具](https://repo.huaweicloud.com/openharmony/compiler/clang/12.0.1-530132/linux/clang-530132-linux-x86_64.tar.bz2)
3. 解压LLVM安装包至~/llvm路径下。
```
tar -jxvf clang.tar.bz2 -C ~/
mv ~/clang-530132/ ~/llvm
```
4. 设置环境变量。
```
vim ~/.bashrc
```
将以下命令拷贝到.bashrc文件的最后一行,保存并退出。
```
export PATH=~/llvm/bin:$PATH
```
5. 生效环境变量。
```
source ~/.bashrc
```
## 轻量和小型系统快速入门(IDE方式)
- [轻量与小型系统入门概述](quickstart-ide-lite-overview.md)
- 准备轻量与小型系统环境
- [搭建Windows+Ubuntu混合开发环境](quickstart-ide-lite-env-setup-win-ubuntu.md)
- [获取源码](quickstart-ide-lite-sourcecode-acquire.md)
- [导入源码工程](quickstart-ide-lite-create-project.md)
- 运行“Hello World”
- Hi3861开发板
- [编写“Hello World”程序](quickstart-ide-lite-steps-hi3861-helloworld.md)
- [编译](quickstart-ide-lite-steps-hi3861-building.md)
- [烧录](quickstart-ide-lite-steps-hi3861-burn.md)
- [联网](quickstart-ide-lite-steps-hi3861-netconfig.md)
- [调试验证](quickstart-ide-lite-steps-hi3861-debug.md)
- [运行](quickstart-ide-lite-steps-hi3861-running.md)
- Hi3516开发板
- [编写“Hello World”程序](quickstart-ide-lite-steps-hi3516-helloworld.md)
- [编译](quickstart-ide-lite-steps-hi3516-building.md)
- [烧录](quickstart-ide-lite-steps-hi3516-burn.md)
- [运行](quickstart-ide-lite-steps-hi3516-running.md)
- 附录
- [Hi3861开发板介绍](quickstart-ide-lite-introduction-hi3861.md)
- [Hi3516开发板介绍](quickstart-ide-lite-introduction-hi3516.md)
\ No newline at end of file
# Hi3861开发板介绍
## 简介
Hi3861开发板是一片大约2cm\*5cm大小的开发板,是一款高度集成的2.4GHz WLAN SoC芯片,集成IEEE 802.11b/g/n基带和RF(Radio Frequency)电路。支持OpenHarmony,并配套提供开放、易用的开发和调试运行环境。
**图1** Hi3861开发板外观图  
![zh-cn_image_0000001271474569](figures/zh-cn_image_0000001271474569.png)
另外,Hi3861开发板还可以通过与Hi3861底板连接,扩充自身的外设能力,底板如下图所示。
**图2** Hi3861底板外观图  
![zh-cn_image_0000001226954632](figures/zh-cn_image_0000001226954632.png)
- RF电路包括功率放大器PA(Power Amplifier)、低噪声放大器LNA(Low Noise Amplifier)、RF Balun、天线开关以及电源管理等模块;支持20MHz标准带宽和5MHz/10MHz窄带宽,提供最大72.2Mbit/s物理层速率。
- Hi3861 WLAN基带支持正交频分复用(OFDM)技术,并向下兼容直接序列扩频(DSSS)和补码键控(CCK)技术,支持IEEE 802.11 b/g/n协议的各种数据速率。
- Hi3861芯片集成高性能32bit微处理器、硬件安全引擎以及丰富的外设接口,外设接口包括SPI(Synchronous Peripheral Interface)、UART(Universal Asynchronous Receiver &amp; Transmitter)、I2C(The Inter Integrated Circuit)、PWM(Pulse Width Modulation)、GPIO(General Purpose Input/Output)和多路ADC(Analog to Digital Converter),同时支持高速SDIO2.0(Secure Digital Input/Output)接口,最高时钟可达50MHz;芯片内置SRAM(Static Random Access Memory)和Flash,可独立运行,并支持在Flash上运行程序。
- Hi3861芯片适用于智能家电等物联网智能终端领域。
**图3** Hi3861功能框图  
![zh-cn_image_0000001226794688](figures/zh-cn_image_0000001226794688.png)
## 资源和约束
Hi3861开发板资源十分有限,整板共2MB FLASH,352KB RAM。在编写业务代码时,需注意资源使用效率。
## 开发板规格
**表1** Hi3861开发板规格清单
| 规格类型 | 规格清单 |
| -------- | -------- |
| 通用规格 | -&nbsp;1×1&nbsp;2.4GHz频段(ch1~ch14)<br/>-&nbsp;PHY支持IEEE&nbsp;802.11b/g/n<br/>-&nbsp;MAC支持IEEE802.11&nbsp;d/e/h/i/k/v/w<br/>-&nbsp;内置PA和LNA,集成TX/RX&nbsp;Switch、Balun等<br/>-&nbsp;支持STA和AP形态,作为AP时最大支持6&nbsp;个STA接入<br/>-&nbsp;支持WFA&nbsp;WPA/WPA2&nbsp;personal、WPS2.0<br/>-&nbsp;支持与BT/BLE芯片共存的2/3/4&nbsp;线PTA方案<br/>-&nbsp;电源电压输入范围:2.3V~3.6V<br/>-&nbsp;IO电源电压支持1.8V和3.3V<br/>-&nbsp;支持RF自校准方案<br/>-&nbsp;低功耗:<br/>&nbsp;&nbsp;-&nbsp;Ultra&nbsp;Deep&nbsp;Sleep模式:5μA&nbsp;\@3.3V<br/>&nbsp;&nbsp;-&nbsp;DTIM1:1.5mA&nbsp;\@3.3V<br/>&nbsp;&nbsp;-&nbsp;DTIM3:0.8mA&nbsp;\@3.3V |
| PHY特性 | -&nbsp;支持IEEE802.11b/g/n单天线所有的数据速率<br/>-&nbsp;支持最大速率:72.2Mbps\@HT20&nbsp;MCS7<br/>-&nbsp;支持标准20MHz带宽和5M/10M窄带宽<br/>-&nbsp;支持STBC<br/>-&nbsp;支持Short-GI |
| MAC特性 | -&nbsp;支持A-MPDU,A-MSDU<br/>-&nbsp;支持Blk-ACK<br/>-&nbsp;支持QoS,满足不同业务服务质量需求 |
| CPU子系统 | -&nbsp;高性能&nbsp;32bit微处理器,最大工作频率160MHz<br/>-&nbsp;内嵌SRAM&nbsp;352KB、ROM&nbsp;288KB<br/>-&nbsp;内嵌&nbsp;2MB&nbsp;Flash |
| 外围接口 | -&nbsp;1个SDIO接口、2个SPI接口、2个I2C接口、3个UART接口、15个GPIO接口、7路ADC输入、6路PWM、1个I2S接口(注:上述接口通过复用实现)<br/>-&nbsp;外部主晶体频率40M或24M |
| 其他信息 | -&nbsp;封装:QFN-32,5mm×5mm<br/>-&nbsp;工作温度:-40℃&nbsp;&nbsp;+85℃ |
## OpenHarmony关键特性
OpenHarmony基于Hi3861平台提供了多种开放能力,提供的关键组件如下表所示。
**表2** OpenHarmony关键组件列表
| 组件名 | 能力介绍 |
| -------- | -------- |
| WLAN服务 | 提供WLAN服务能力。包括:station和hotspot模式的连接、断开、状态查询等。 |
| 模组外设控制 | 提供操作外设的能力。包括:I2C、I2S、ADC、UART、SPI、SDIO、GPIO、PWM、FLASH等。 |
| 分布式软总线 | 在OpenHarmony分布式网络中,提供设备被发现、数据传输的能力。 |
| 设备安全绑定 | 提供在设备互联场景中,数据在设备之间的安全流转的能力。 |
| 基础加解密 | 提供密钥管理、加解密等能力。 |
| 系统服务管理 | 系统服务管理基于面向服务的架构,提供了OpenHarmony统一化的系统服务开发框架。 |
| 启动引导 | 提供系统服务的启动入口标识。在系统服务管理启动时,调用bootstrap标识的入口函数,并启动系统服务。 |
| 系统属性 | 提供获取与设置系统属性的能力。 |
| 基础库 | 提供公共基础库能力。包括:文件操作、KV存储管理等。 |
| DFX | 提供DFX能力。包括:流水日志、时间打点等。 |
| XTS | 提供OpenHarmony生态认证测试套件的集合能力。 |
# 轻量与小型系统入门概述
## 简介
OpenHarmony轻量和小型系统适用于内存较小的IOT设备(参考内存≥128KiB)。通过本文,开发者可以快速熟悉OpenHarmony标准系统的环境搭建、编译、烧录、调测以及运行“Hello World”等。
考虑到开发者的开发习惯,OpenHarmony为开发者提供了以下两种入门指导:
- IDE方式:完全采用IDE(DevEco Device Tool)进行一站式开发,编译依赖工具的安装及编译、烧录、运行都通过IDE进行操作。
- 安装包方式:通过命令行进行编译依赖工具的下载安装,编译操作也通过命令实现。烧录、运行等操作使用IDE。OpenHarmony还为开发者提供了[Docker环境](../get-code/gettools-acquire.md),在很大程度上简化了编译前的环境配置,习惯使用安装包方式的开发者也可以选择Docker环境进行编译 。
本文采用安装包方式进行介绍,习惯使用DevEco Device Tool的开发者可参考[轻量与小型系统快速入门(IDE方式)](../quick-start/quickstart-ide-lite-overview.md)
## 开发环境
推荐开发者采用Windows+Ubuntu环境进行OpenHarmony开发:
- Windows:用于源码开发、烧录等。
- Ubuntu:用于源码编译。
本文将介绍如何基于Windows+Ubuntu环境进行OpenHarmony的开发。
## 开发板
本文基于以下两款典型开发板进行开发介绍 :Hi3861 WLAN模组、Hi3516DV300。开发板的具体外观和规格可参见[本文附录](../quick-start/quickstart-lite-introduction-hi3861.md),开发者可根据需要自行购买开发板。
## 开发流程
轻量和小型系统快速入门流程如下图所示。
**图1** 轻量和小型系统快速入门开发流程 
 
![zh-cn_image_0000001227114628](figures/zh-cn_image_0000001227114628.png)
## 轻量和小型系统快速入门(安装包方式)
- [轻量与小型系统入门概述](quickstart-lite-overview.md)
- [搭建轻量与小型系统环境](quickstart-lite-env-setup.md)
- 运行“Hello World”
- Hi3861开发板
- [安装Hi3861开发板环境](quickstart-lite-steps-hi3861-setting.md)
- [编写“Hello World”程序](quickstart-lite-steps-hi3861-helloworld.md)
- [编译](quickstart-lite-steps-hi3861-building.md)
- [烧录](quickstart-lite-steps-hi3861-burn.md)
- [联网](quickstart-lite-steps-hi3861-netconfig.md)
- [调试验证](quickstart-lite-steps-hi3861-debug.md)
- [运行](quickstart-lite-steps-hi3861-running.md)
- Hi3516开发板
- [安装Hi3516开发板环境](quickstart-lite-steps-hi3516-setting.md)
- [编写“Hello World”程序](quickstart-lite-steps-hi3516-helloworld.md)
- [编译](quickstart-lite-steps-hi3516-building.md)
- [烧录](quickstart-lite-steps-hi3516-burn.md)
- [运行](quickstart-lite-steps-hi3516-running.md)
- 常见问题
- [hb安装异常](quickstart-lite-faq-hb.md)
- [编译异常](quickstart-lite-faq-compose.md)
- [烧录异常](quickstart-lite-faq-burning.md)
- 附录
- 开发板介绍
- [Hi3861开发板介绍](quickstart-lite-introduction-hi3861.md)
- [Hi3516开发板介绍](quickstart-lite-introduction-hi3516.md)
- [参考信息](quickstart-lite-reference.md)
- [使用HiTool烧录代码](quickstart-lite-hitool.md)
# 烧录
烧录是指将编译后的程序文件下载到芯片开发板上的动作,为后续的程序调试提供基础。DevEco Device Tool提供一键烧录功能,操作简单,能快捷、高效的完成程序烧录,提升烧录的效率。
Hi3516DV300支持USB烧录、网口烧录和串口烧录三种方式,本文采用USB方式进行烧录。相关操作在Windows环境下进行 。
## 导入源码
在编译完成后,[保证Windows系统可以远程访问Ubuntu环境](quickstart-lite-env-setup.md)的情况下,您还需要通过以下步骤将编译好的源码导入DevEco Device Tool,方可进行烧录。
1. 打开DevEco Device Tool,进入Home页,点击**Import Project**打开工程。
![zh-cn_image_0000001278358765](figures/zh-cn_image_0000001278358765.png)
2. 选择OpenHarmony源码根目录路径(需要访问Ubuntu下的源码目录),然后再选择**Import OpenHarmony Source**选项,点击**Import**进行导入。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 工程存储路径不能包含中文字符、空格。
![zh-cn_image_0000001271477045](figures/zh-cn_image_0000001271477045.png)
3. 在Import Project界面,选择**Product**后,会自动填充对应的SOC、Board、Company和Kernel信息,然后**Ohos Ver**选择对应的OpenHarmony源码版本。
![zh-cn_image_0000001279586409](figures/zh-cn_image_0000001279586409.png)
4. 点击**Open**打开工程或源码。
## 烧录
完成源码导入后,通过以下步骤进行烧录:
1. 请连接好电脑和待烧录开发板,需要连接USB口和串口,具体可参考[Hi3516DV300开发板介绍](quickstart-lite-introduction-hi3516.md)
2. 根据[Hi3516DV300开发板串口驱动安装指导](https://gitee.com/link?target=https%3A%2F%2Fdevice.harmonyos.com%2Fcn%2Fdocs%2Fdocumentation%2Fguide%2Fhi3516_hi3518-drivers-0000001050743695)[Hi3516DV300开发板USB驱动安装指导](https://device.harmonyos.com/cn/docs/documentation/guide/usb_driver-0000001058690393)安装USB驱动及USB转串口的驱动。若您的设备中已安装此驱动,请忽略该步骤。
3. 在DevEco Device Tool中,选择REMOTE DEVELOPMENT &gt; Local PC,查看远程计算机(Ubuntu开发环境)与本地计算机(Windows开发环境)的连接状态。
- 如果Local PC右边连接按钮为![zh-cn_image_0000001261315939](figures/zh-cn_image_0000001261315939.png),则远程计算机与本地计算机为已连接状态,不需要执行其他操作。
- 如果Local PC右边连接按钮为![zh-cn_image_0000001261515989](figures/zh-cn_image_0000001261515989.png),则点击绿色按钮进行连接。连接时DevEco Device Tool会重启服务,因此请不要在下载源码或源码编译过程中进行连接,否则会中断任务。
![zh-cn_image_0000001261395999](figures/zh-cn_image_0000001261395999.png)
4. 在菜单栏中点击**Project Settings**按钮,进入Hi3516DV300工程配置界面。
![zh-cn_image_0000001198566364](figures/zh-cn_image_0000001198566364.png)
5. 在“Tool Chain”页签,设置Uploader烧录器工具,可以通过Tool Chain页签中的Install按钮在线安装。
![zh-cn_image_0000001198566365](figures/zh-cn_image_0000001198566365.png)
6. 在“hi3516dv300”页签,设置烧录选项,包括upload_partitions、upload_port和upload_protocol。
- upload_partitions:选择待烧录的文件,默认情况下会同时烧录fastboot、kernel、rootfs和userfs。DevEco Device Tool已预置默认的烧录文件信息,包括起始地址、分区大小、待烧录文件地址等,开发者可根据实际情况进行调整,点击每个待烧录文件后的![zh-cn_image_0000001275592884.png](figures/zh-cn_image_0000001275592884.png)按钮进行修改。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 在设置烧录分区起始地址和分区长度时,应根据实际待烧录文件的大小进行设置,要求设置的烧录分区大小,要大于待烧录文件的大小;同时,各烧录文件的分区地址设置不能出现重叠。
![zh-cn_image_0000001312778829](figures/zh-cn_image_0000001312778829.png)
- upload_protocol:选择烧录协议,固定选择“hiburn-usb”。
- upload_port:选择已查询到的串口号。
![zh-cn_image_0000001223190441](figures/zh-cn_image_0000001223190441.png)
7. 所有的配置都修改完成后,在工程配置页签的顶部,点击**Save**进行保存。
8. 点击hi3516dv300下的**Upload**按钮。
![zh-cn_image_0000001266887264](figures/zh-cn_image_0000001266887264.png)
此时待烧录文件会从Ubuntu系统传输到Windows下,传输完成后界面显示“Operation paused, Please press Enter key to continue”时,请点击**Enter**键启动烧录。
![zh-cn_image_0000001114129426](figures/zh-cn_image_0000001114129426.png)
9. 在终端窗口显示如下提示信息时,请在15秒内,按住Update键,插拔USB线,最后松开Update键启动烧录。
![zh-cn_image_0000001326412233.png](figures/zh-cn_image_0000001326412233.png)
启动烧录后,界面提示**SUCCESS**信息时,表示烧录成功。
![zh-cn_image_0000001160649343](figures/zh-cn_image_0000001160649343.png)
10. 烧录成功后,请根据运行章节进行操作,启动系统。
# 运行
## 启动系统
在完成Hi3516DV300的烧录后,还需要设置BootLoader引导程序,才能运行OpenHarmony系统。
1. 在Hi3516DV300任务中,点击**Configure bootloader(Boot OS)**进行配置即可。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> DevEco Device Tool针对Hi3516DV300开发板的BootLoader设置进行了适配,无需开发者手动修改。
![zh-cn_image_0000001209906547](figures/zh-cn_image_0000001209906547.png)
2. 提示如下图中的重启开发板的提示信息时,重启开发板,然后在控制台输出“SUCCESS”表示设置成功。
![zh-cn_image_0000001210385161](figures/zh-cn_image_0000001210385161.png)
3. 在任务栏点击**Monitor**按钮,启动串口工具。
![zh-cn_image_0000001164506870](figures/zh-cn_image_0000001164506870.png)
4. 当界面打印回显信息,点击Enter按钮,直到界面显示OHOS \#信息,表示系统启动成功。
![zh-cn_image_0000001198626874](figures/zh-cn_image_0000001198626874.png)
## 运行“Hello World”
系统启动成功后,取源码out目录下的helloworld可执行文件放入系统的bin目录,通过以下步骤运行“Hello World”。
1. 在启动界面进入bin目录。
```
cd bin
```
2. 进入bin目录后可以看到helloworld文件,通过以下命令运行helloworld程序。
```
./helloworld
```
界面打印“Hello World!”,程序运行成功。
![zh-cn_image_0000001271234769](figures/zh-cn_image_0000001271234769.png)
## 下一步学习
恭喜您,已完成Hi3516DV300的快速上手!建议您下一步进入[带屏摄像头产品开发](../guide/device-camera-control-overview.md)的学习 。
# 安装Hi3516开发板环境
## Hi3516工具要求
### 硬件要求
- Hi3516DV300 IoT Camera开发板
- USB转串口线、网线(Linux工作台通过USB转串口线、网线与Hi3516DV300 开发板连接)
### 软件要求
Hi3516DV300开发板对Linux服务器通用环境配置需要的工具及其用途如下表所示。
**表1** Linux服务器开发工具及用途
| 开发工具 | 用途 |
| -------- | -------- |
| dosfstools、mtools、mtd-utils | 文件打包工具 |
| Java虚拟机环境 | 编译、调试和运行Java程序 |
## 安装Linux服务器工具
Hi3516DV300依赖以下工具:dosfstools、mtools、mtd-utils、Java运行时环境(JRE)和Java sdk 开发工具包。
上述工具已在[安装必要的库和工具](../quick-start/quickstart-lite-env-setup.md)环节完成安装,此处无需再进行安装。
# 烧录
烧录是指将编译后的程序文件下载到芯片开发板上的动作,为后续的程序调试提供基础。DevEco Device Tool提供一键烧录功能,操作简单,能快捷、高效的完成程序烧录,提升烧录的效率。
Hi3861V100开发板支持串口烧录方式,在Windows下通过以下步骤进行烧录:
## 导入源码
在编译完成后,[保证Windows系统可以远程访问Ubuntu环境](quickstart-lite-env-setup.md)的情况下,您还需要通过以下步骤将编译好的源码导入DevEco Device Tool,方可进行烧录。
1. 打开DevEco Device Tool,进入Home页,点击**Import Project**打开工程。
![zh-cn_image_0000001278358765](figures/zh-cn_image_0000001278358765.png)
2. 选择OpenHarmony源码根目录路径(需要访问Ubuntu下的源码目录),然后再选择**Import OpenHarmony Source**选项,点击**Import**进行导入。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 工程存储路径不能包含中文字符、空格。
![zh-cn_image_0000001271477045](figures/zh-cn_image_0000001271477045.png)
3. 在Import Project界面,选择**Product**后,会自动填充对应的SOC、Board、Company和Kernel信息,然后**Ohos Ver**选择对应的OpenHarmony源码版本。
![zh-cn_image_0000001279425450](figures/zh-cn_image_0000001279425450.png)
4. 点击**Open**打开工程或源码。
## 烧录
完成源码导入后,通过以下步骤进行烧录:
1. 请连接好电脑和待烧录开发板,需要连接USB口,具体可参考[Hi3861V100开发板介绍](quickstart-lite-introduction-hi3861.md)
2. 根据[Hi3861V100开发板串口驱动安装指导](https://gitee.com/link?target=https%3A%2F%2Fdevice.harmonyos.com%2Fcn%2Fdocs%2Fdocumentation%2Fguide%2Fhi3861-drivers-0000001058153433)安装USB转串口的驱动程序。若您的设备中已安装此驱动,请忽略该步骤。
3. 在DevEco Device Tool中,选择REMOTE DEVELOPMENT &gt; Local PC,查看远程计算机(Ubuntu开发环境)与本地计算机(Windows开发环境)的连接状态。
- 如果Local PC右边连接按钮为![zh-cn_image_0000001261315939](figures/zh-cn_image_0000001261315939.png),则远程计算机与本地计算机为已连接状态,不需要执行其他操作。
- 如果Local PC右边连接按钮为![zh-cn_image_0000001261515989](figures/zh-cn_image_0000001261515989.png),则点击绿色按钮进行连接。连接时DevEco Device Tool会重启服务,因此请不要在下载源码或源码编译过程中进行连接,否则会中断任务。
![zh-cn_image_0000001261395999](figures/zh-cn_image_0000001261395999.png)
4. 在菜单栏中点击**Project Settings**按钮,进入Hi3861V100工程配置界面。
![zh-cn_image_0000001333802045.png](figures/zh-cn_image_0000001333802045.png)
5. 在“Tool Chain”页签,设置Uploader烧录器工具,可以通过Tool Chain页签中的Install按钮在线安装。
![zh-cn_image_0000001198943768](figures/zh-cn_image_0000001198943768.png)
6. 在“hi3861”页签,设置烧录选项,包括upload_port、upload_protocol和upload_partitions。
- upload_port:选择已查询的串口号。
- upload_protocol:选择烧录协议,选择“hiburn-serial”。
- upload_partitions:选择待烧录的文件名称。DevEco Device Tool已预置默认的烧录文件信息,如果需要修改待烧录文件地址,可点击每个待烧录文件后的![zh-cn_image_0000001333642545.png](figures/zh-cn_image_0000001333642545.png)按钮进行修改。
![zh-cn_image_0000001243704061](figures/zh-cn_image_0000001243704061.png)
7. 所有的配置都修改完成后,在工程配置页签的顶部,点击**Save**进行保存。
8. 点击**Open**打开工程文件,然后在“PROJECT TASKS”中,点击hi3861下的**Upload**按钮,启动烧录。
![zh-cn_image_0000001216440138](figures/zh-cn_image_0000001216440138.png)
9. 启动烧录后,显示如下提示信息时,请在15秒内,按下开发板上的RST按钮重启开发板。
![zh-cn_image_0000001198466090](figures/zh-cn_image_0000001198466090.png)
重新上电后,界面提示如下信息时,表示烧录成功。
![zh-cn_image_0000001216761476](figures/zh-cn_image_0000001216761476.png)
# 联网
完成版本编译及烧录后,下面开始介绍如何在串口终端上执行AT命令,使Hi3861 WLAN模组联网。
1. 保持Windows工作台和WLAN模组的连接状态,在DevEco Device Tool最下方,点击“DevEco:Serial Monitor”按钮。
**图1** 打开DevEco Device Tool串口终端示意图  
![zh-cn_image_0000001227114644](figures/zh-cn_image_0000001227114644.png)
2. 复位Hi3861 WLAN模组,终端界面显示“ready to OS start”,则启动成功。
**图2** Hi3861 WLAN模组复位成功示意图
  
![zh-cn_image_0000001226794704](figures/zh-cn_image_0000001226794704.png)
3. 在串口终端中,依次执行如下AT命令,启动STA模式,连接指定AP热点,并开启DHCP功能。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 开发板启动后,串口会打印测试用例信息,待测试用例信息打印完成后再执行AT指令,否则AT指令会被测试用例信息覆盖。
```
AT+STARTSTA # 启动STA模式
AT+SCAN # 扫描周边AP
AT+SCANRESULT # 显示扫描结果
AT+CONN="SSID",,2,"PASSWORD" # 连接指定AP,其中SSID/PASSWORD为待连接的热点名称和密码
AT+STASTAT # 查看连接结果
AT+DHCP=wlan0,1 # 通过DHCP向AP请求wlan0的IP地址
```
4. 查看Hi3861 WLAN模组与网关联通是否正常,如下图所示。
```
AT+IFCFG # 查看模组接口IP
AT+PING=X.X.X.X # 检查模组与网关的联通性,其中X.X.X.X需替换为实际的网关地址
```
**图3** Hi3861 WLAN模组联网成功示意图  
![zh-cn_image_0000001226954648](figures/zh-cn_image_0000001226954648.png)
# 运行
## 运行结果
示例代码编译、烧录、运行、调测后,重启开发板后将自动在界面输出如下结果:
```
ready to OS start
FileSystem mount ok.
wifi init success!
[DEMO] Hello world.
```
## 下一步学习
恭喜,您已完成Hi3861 WLAN模组快速上手!建议您下一步进入[WLAN产品开发](../guide/device-wlan-led-control.md)的学习 。
# 快速入门概述
OpenHarmony是一款面向全场景的开源分布式操作系统,采用组件化设计,支持在128KiB到xGiB RAM资源的设备上运行系统组件,设备开发者可基于目标硬件能力自由选择系统组件进行集成。
OpenHarmony当前定义了三种基础系统类型,设备开发者通过选择基础系统类型完成必选组件集配置后,便可实现其最小系统的开发。这三种基础系统类型的参考定义如下:
**表1** 基础类型系统简介
| 类型 | 处理器 | 最小内存 | 能力 |
| -------- | -------- | -------- | -------- |
| 轻量系统(mini&nbsp;system) | MCU类处理器(例如Arm&nbsp;Cortex-M、RISC-V&nbsp;32位的设备) | 128KiB | 提供多种轻量级网络协议,轻量级的图形框架,以及丰富的IOT总线读写部件等。可支撑的产品如智能家居领域的连接类模组、传感器设备、穿戴类设备等。 |
| 小型系统(small&nbsp;system) | 应用处理器(例如Arm&nbsp;Cortex-A的设备) | 1MiB | 提供更高的安全能力、标准的图形框架、视频编解码的多媒体能力。可支撑的产品如智能家居领域的IP&nbsp;Camera、电子猫眼、路由器以及智慧出行域的行车记录仪等。 |
| 标准系统(standard&nbsp;system) | 应用处理器(例如Arm&nbsp;Cortex-A的设备) | 128MiB | 提供增强的交互能力、3D&nbsp;GPU以及硬件合成能力、更多控件以及动效更丰富的图形能力、完整的应用框架。可支撑的产品如高端的冰箱显示屏。 |
本文通过介绍OpenHarmony系统的开发环境搭建、编译、烧录、调测以及运行“Hello World”等,引导开发者快速熟悉OpenHarmony设备开发的基本流程和方法。
## 操作方式
考虑到开发者的开发习惯,OpenHarmony为开发者提供了以下两种入门指导:
**表2** 入门方式
| 方式 | 工具 | 特点 | 适用人群 |
| -------- | -------- | -------- | -------- |
| [基于IDE入门](quickstart-ide-env--win.md) | IDE(DevEco&nbsp;Device&nbsp;Tool) | 完全采用IDE进行一站式开发,编译依赖工具的安装及编译、烧录、运行都通过IDE进行操作。<br/>DevEco&nbsp;Device&nbsp;Tool采用Windows+Ubuntu混合开发环境:<br/>-&nbsp;在Windows上主要进行代码开发、代码调试、烧录等操作。<br/>-&nbsp;在Ubuntu环境实现源码编译。<br/>DevEco&nbsp;Device&nbsp;Tool提供界面化的操作接口,可以为您提供更快捷的开发体验。 | -&nbsp;不熟悉命令行操作的开发者<br/>-&nbsp;习惯界面化操作的开发者 |
| [基于命令行入门](quickstart-pkg-prepare.md) | 命令行工具包 | 通过命令行方式下载安装编译依赖工具,在Linux系统中进行编译时,相关操作通过命令实现;在Windows系统中使用开发板厂商提供的工具进行代码烧录。<br/>命令行方式提供了简便统一的工具链安装方式。 | 习惯使用命令行操作的开发者 |
## 开发板
本文选取了如下三款典型开发板,用于介绍不同系统的开发过程,开发者可根据需要自行购买开发板。
**表3** 开发板-系统对应关系
| 名称 | 适配系统 | 简介 |
| -------- | -------- | -------- |
| Hi3861&nbsp;WLAN模组 | 轻量 | [Hi3861开发板介绍](quickstart-appendix-hi3861.md) |
| Hi3516DV300 | 小型 | [Hi3516开发板介绍](quickstart-appendix-hi3516.md) |
| RK3568 | 标准 | [RK3568开发板介绍](quickstart-appendix-rk3568.md) |
## 开发流程
设备开发快速入门流程如下图所示。
**图1** 快速入门开发流程
![quickstart-overview-process](figures/quickstart-overview-process.png)
# 编译
OpenHarmony支持hb和build.sh两种编译方式。此处介绍hb方式,build.sh脚本编译方式请参考[使用build.sh脚本编译源码](quickstart-lite-reference.md)
OpenHarmony支持hb和build.sh两种编译方式。此处介绍hb方式,build.sh脚本编译方式请参考[使用build.sh脚本编译源码](quickstart-pkg-common-build.md#使用buildsh脚本编译源码)
请进入源码根目录,执行如下命令进行编译:
想要详细了解OpenHarmony编译构建模块功能的开发者可参考[编译构建指南](../subsystems/subsys-build-all.md)
## 前提条件
- 已正确[安装库和工具集](quickstart-pkg-install_package.md)
- 已正确[安装编译工具](quickstart-pkg-install_tool.md)
- “Hello World”程序已编写完成。
- 可正常登录Ubuntu环境。
## 操作步骤
请进入源码根目录,执行如下命令进行编译:
1. 设置编译路径。
```
hb set
```
2. 选择当前路径。
```
.
```
3. 在hisilicon下选择ipcamera_hispark_taurus并回车。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
>
> 同样的开发板在适配不同的场景时,要采用的编译形态不同(即此处要选择的product不同),请参考[编译形态整体说明](quickstart-appendix-compiledform.md)。
**图1** Hi3516编译设置图例  
![zh-cn_image_0000001317198053](figures/zh-cn_image_0000001317198053.png)
![quickstart-lite-3516-build](figures/quickstart-lite-3516-build.png)
4. 执行编译。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> - 单独编译一个部件(例如hello),可使用“hb build -T _目标名称_”进行编译。
>
......@@ -36,13 +53,12 @@ OpenHarmony支持hb和build.sh两种编译方式。此处介绍hb方式,build.
>
> 此处以完整编译整个产品为例进行说明。
```
hb build -f
```
5. 编译结束后,出现“build success”字样,则证明构建成功。
> ![icon-notice.gif](public_sys-resources/icon-notice.gif) **须知:**
> 烧录相关文件获取路径:
>
......
# 使用HiTool烧录代码
# 烧录
针对Hi3516DV300开发板,除了DevEco Device Tool外,还可以使用HiTool进行烧录。
针对Hi3516DV300开发板,除了DevEco Device Tool(操作方法请参考[烧录](quickstart-ide-3516-burn.md)外,还可以使用HiTool进行烧录。
## 前提条件
......@@ -10,7 +10,7 @@
- 客户端(操作平台,例如Windows系统)已下载并安装[HiTool工具](http://www.hihope.org/download/download.aspx)
- 客户端(操作平台,例如Windows系统)已安装USB驱动,可参考[Hi3516DV300/Hi3518EV300开发板USB驱动安装指导](https://device.harmonyos.com/cn/docs/documentation/guide/usb_driver-0000001058690393)
- 客户端(操作平台,例如Windows系统)已安装USB驱动,可参考[Hi3516DV300开发板USB驱动安装指导](https://gitee.com/link?target=https%3A%2F%2Fdevice.harmonyos.com%2Fcn%2Fdocs%2Fdocumentation%2Fguide%2Fusb_driver-0000001058690393)
- 客户端已安装串口终端工具(例如IPOP)。
......@@ -20,15 +20,12 @@
## 操作步骤
1. 准备烧录相关文件。
1. 在客户端新建用于保存烧录文件的文件夹,例如D:\liteos或D:\linux。
1. 在客户端新建用于保存烧录文件的文件夹,例如“D:\liteos”或“D:\linux”。
2. 将烧录所需烧写配置文件和启动引导文件保存到新建的文件夹中。
- 其小型系统(LiteOS)烧写配置文件为L1_3516_liteos.xml,其启动引导文件为“[u-boot-hi3516dv300.bin](https://gitee.com/openharmony/device_board_hisilicon/tree/master/hispark_taurus/uboot/out/boot)”。
- 其L1_LiteOS烧写配置文件为L1_3516_liteos.xml,其启动引导文件为“[u-boot-hi3516dv300.bin](https://gitee.com/openharmony/device_board_hisilicon/tree/master/hispark_taurus/uboot/out/boot)”。
其中L1_3516_liteos.xml文件需要开发者自行准备,模板如下:
```
<?xml version="1.0" encoding="GB2312" ?>
<Partition_Info ProgrammerFile="">
......@@ -38,10 +35,10 @@
<Part Sel="1" PartitionName="" FlashType="emmc" FileSystem="none" Start="60M" Length="50M" SelectFile="D:\liteos\userfs_vfat.img"/>
</Partition_Info>
```
- 其小型系统(Linux)烧写配置文件为L1_3516_linux.xml,其启动引导文件为“[u-boot-hi3516dv300.bin](https://gitee.com/openharmony/device_board_hisilicon/tree/master/hispark_taurus/uboot/out/boot)”。
- 其L1_Linux烧写配置文件为L1_3516_linux.xml,其启动引导文件为“[u-boot-hi3516dv300.bin](https://gitee.com/openharmony/device_board_hisilicon/tree/master/hispark_taurus/uboot/out/boot)”。
其中L1_3516_linux.xml文件需要开发者自行准备,模板如下:
```
<?xml version="1.0" encoding="GB2312" ?>
<Partition_Info ProgrammerFile="">
......@@ -53,52 +50,43 @@
</Partition_Info>
```
3. 将编译完成的源码包下载至客户端并解压,将烧录相关文件拷贝至步骤1中新建的文件夹。
针对Hi3516开发板(轻量级系统使用LiteOS内核或Linux内核根据业务实际需要选择):
针对Hi3516开发板(小型系统使用LiteOS内核或Linux内核根据业务实际需要选择):
- 其小型系统(LiteOS)烧写所需文件为:OHOS_Image.bin、rootfs_vfat.img、userfs_vfat.img
- 其小型系统(Linux)烧写所需文件为:uImage_hi3516dv300_smp、rootfs_ext4.img、userfs_ext4.img、userdata_ext4.img
- 其L1_LiteOS烧写所需文件为:OHOS_Image.bin、rootfs_vfat.img、userfs_vfat.img
- 其L1_Linux烧写所需文件为:uImage_hi3516dv300_smp、rootfs_ext4.img、userfs_ext4.img、userdata_ext4.img
2. 使用HiTool烧录。
1. 打开HiTool。
2. 设置HiTool参数。
传输方式选择USB口,烧写方式选择烧写eMMC(单板的存储介质为eMMC)。
传输方式选择USB口,烧写方式选择烧写eMMC(单板的存储介质为eMMC)。
3. 单击浏览在步骤1创建的文件夹中选择烧写配置文件(例如L1_3516_linux.xml)。
![image](figures/zh-cn_image_0000001249937195.png)
![zh-cn_image_0000001249937195](figures/zh-cn_image_0000001249937195.png)
4. 单击烧写后,按住开发板上串口旁的按钮(Update键),并拔插USB线(上下电)。
烧录开始后,可以在HiTool工具下方的控制台区域观察到烧录过程中的打印信息。
烧录开始后,可以在HiTool工具下方的控制台区域观察到烧录过程中的打印信息。
烧录完成后,HiTool弹出提示框显示烧写成功。
烧录完成后,HiTool弹出提示框显示烧写成功。
5. 单击确定。
3. 导入启动参数。
1. 使用终端工具打开串口。
2. 拔插开发板电源使其重启,3s内在串口终端输入回车。
终端界面中出现hisilicon \#表示已连接开发板串口。
终端界面中出现“hisilicon \#”表示已连接开发板串口。
3. 在串口终端拷贝如下启动参数后,按回车完成配置。
- 其小型系统(LiteOS)对应的启动参数为:
- 其L1_LiteOS对应的启动参数为:
```
setenv bootcmd "mmc read 0x0 0x80000000 0x800 0x4800;go 0x80000000";
setenv bootargs "console=ttyAMA0,115200n8 root=emmc fstype=vfat rootaddr=10M rootsize=50M rw";
saveenv
reset
sa;reset
```
- 其小型系统(Linux)对应的启动参数为:
-L1_Linux对应的启动参数为:
```
setenv bootargs "mem=128M console=ttyAMA0,115200 root=/dev/mmcblk0p3 rw rootfstype=ext4 rootwait blkdevparts=mmcblk0:1M(boot),9M(kernel),50M(rootfs),50M(userfs),1024M(userdata)"
setenv bootcmd "mmc read 0x0 0x82000000 0x800 0x4800; mw 0x10FF0044 0x0600;mw 0x120D2010 0x00000000;mw 0x120D2400 0x000000ff;mw 0x120D2010 0x00000000; bootm 0x82000000"
......
......@@ -9,7 +9,7 @@
示例完整目录如下:
```
applications/sample/hello
│── BUILD.gn
......@@ -20,13 +20,13 @@ applications/sample/hello
## 开发步骤
请在源码目录中通过以下步骤创建“Hello World”应用程序
请在源码目录中通过以下步骤创建“Hello World”应用程序
1. 新建目录及源码。
新建applications/sample/hello/src/helloworld.c目录及文件,代码如下所示,用户可以自定义修改打印内容(例如:修改OHOS为World)。当前应用程序可支持标准C及C++的代码开发。
新建**applications/sample/hello/src/helloworld.c**目录及文件,代码如下所示,用户可以自定义修改打印内容(例如:修改OHOS为World)。当前应用程序可支持标准C及C++的代码开发。
```
#include <stdio.h>
......@@ -41,10 +41,10 @@ applications/sample/hello
```
2. 新建编译组织文件。
新建applications/sample/hello/BUILD.gn文件,内容如下所示:
新建**applications/sample/hello/BUILD.gn**文件,内容如下所示:
```
import("//build/lite/config/component/lite_component.gni")
lite_component("hello-OHOS") {
......@@ -57,10 +57,10 @@ applications/sample/hello
```
3. 添加新组件。
修改文件build/lite/components/communication.json,添加组件hello_world_app的配置,如下所示为**communication.json**文件片段,"\#\#start\#\#"和"\#\#end\#\#"之间为新增配置("\#\#start\#\#"和"\#\#end\#\#"仅用来标识位置,添加完配置后删除这两行):
修改文件**build/lite/components/communication.json**,添加组件hello_world_app的配置,如下所示为communication.json文件片段,"\#\#start\#\#"和"\#\#end\#\#"之间为新增配置("\#\#start\#\#"和"\#\#end\#\#"仅用来标识位置,添加完配置后删除这两行):
```
{
"components": [
......@@ -120,10 +120,10 @@ applications/sample/hello
```
4. 修改单板配置文件。
修改文件vendor/hisilicon/hispark_taurus/config.json,新增hello_world_app组件的条目,如下所示代码片段为applications子系统配置,"\#\#start\#\#"和"\#\#end\#\#"之间为新增条目("\#\#start\#\#"和"\#\#end\#\#"仅用来标识位置,添加完配置后删除这两行):
修改文件**vendor/hisilicon/hispark_taurus/config.json**,新增hello_world_app组件的条目,如下所示代码片段为applications子系统配置,"\#\#start\#\#"和"\#\#end\#\#"之间为新增条目("\#\#start\#\#"和"\#\#end\#\#"仅用来标识位置,添加完配置后删除这两行):
```
{
"subsystem": "applications",
......
# 运行
系统启动成功后,取源码out目录下的helloworld可执行文件放入系统的bin目录,通过以下步骤运行“Hello World”。
## 操作步骤
1. 在启动界面进入bin目录。
```
cd bin
```
2. 进入bin目录后可以看到helloworld文件,通过以下命令运行helloworld程序。
```
./helloworld
```
界面打印“Hello World!”,程序运行成功。
![quickstart-pkg-3516-running](figures/quickstart-pkg-3516-running.png)
## 下一步学习
恭喜您,已完成Hi3516的快速上手!建议您下一步进学习 。可参考:
- [屏幕和摄像头控制](../guide/device-camera-control-overview.md)
- [视觉应用开发](../guide/device-camera-visual-overview.md)
# 编译
OpenHarmony支持hb和build.sh两种编译方式。此处介绍hb方式,build.sh脚本编译方式请参考[使用build.sh脚本编译源码](quickstart-standard-reference.md)
OpenHarmony支持hb和build.sh两种编译方式。此处介绍hb方式,build.sh脚本编译方式请参考[使用build.sh脚本编译源码](quickstart-pkg-common-build.md#使用buildsh脚本编译源码)
在Ubuntu环境下进入源码根目录,执行如下命令进行编译:
想要详细了解OpenHarmony编译构建模块功能的开发者可参考[编译构建指南](../subsystems/subsys-build-all.md)
## 前提条件
- 已正确[安装库和工具集](quickstart-pkg-install_package.md)
- 已正确[安装编译工具](quickstart-pkg-install_tool.md)
- “Hello World”程序已编写完成。
- 可正常登录Ubuntu环境。
## 操作步骤
在Ubuntu环境下进入源码根目录,执行如下命令进行编译:
1. 设置编译路径。
```
hb set
```
2. 选择当前路径。
```
.
```
3. 在hihope下选择rk3568并回车。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
>
> 同样的开发板在适配不同的场景时,要采用的编译形态不同(即此处要选择的product不同),请参考[编译形态整体说明](quickstart-appendix-compiledform.md)。
**图1** RK3568编译设置图例  
![zh-cn_image_0000001268598074](figures/zh-cn_image_0000001268598074.png)
![quickstart-standard-rk3568-build](figures/quickstart-standard-rk3568-build.png)
4. 默认情况下,编译的是32位系统,若不需要调整,则跳过此步骤。
如需编译为64位系统,请执行如下命令:
```
hb build --target-cpu arm64
```
5. 执行编译。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> - 单独编译一个部件(例如hello),可使用“hb build -T _目标名称_”进行编译。
>
......@@ -44,11 +62,11 @@ OpenHarmony支持hb和build.sh两种编译方式。此处介绍hb方式,build.
>
> 此处以完整编译整个产品为例进行说明。
```
hb build -f
```
6. 编译结束后,出现“rk3568 build success”字样,明构建成功。
6. 编译结束后,出现“rk3568 build success”字样,则证明构建成功。
> ![icon-notice.gif](public_sys-resources/icon-notice.gif) **须知:**
> 编译结果文件及编译日志文件获取路径:out/rk3568。
# 烧录
针对RK3568开发板,除了DevEco Device Tool外(操作方法请参考[烧录](quickstart-ide-3568-burn.md)),还可以使用RKDevTool进行烧录。
## 前提条件
- 开发板相关源码已编译完成,已形成烧录文件。
- 客户端(操作平台,例如Windows系统)已下载并安装[RKDevTool工具和USB驱动](https://gitee.com/hihope_iot/docs/tree/master/HiHope_DAYU200/%E7%83%A7%E5%86%99%E5%B7%A5%E5%85%B7%E5%8F%8A%E6%8C%87%E5%8D%97/windows)
## 操作步骤
使用RKDevTool的详细操作方法,请参考《[HiHope_DAYU200烧录指导](https://gitee.com/hihope_iot/docs/blob/master/HiHope_DAYU200/docs/%E7%83%A7%E5%BD%95%E6%8C%87%E5%AF%BC%E6%96%87%E6%A1%A3.md)》。
......@@ -8,7 +8,7 @@
示例完整目录如下。
```
applications/sample/hello
│── BUILD.gn
......@@ -27,13 +27,13 @@ vendor/hihope
## 开发步骤
请在源码目录中通过以下步骤创建“Hello World”应用程序
请在源码目录中通过以下步骤创建“Hello World”应用程序
1. 创建目录,编写业务代码。
新建applications/sample/hello/src/helloworld.c目录及文件,代码如下所示,用户可以自定义修改打印内容(例如:修改World为OHOS)。其中helloworld.h包含字符串打印函数HelloPrint的声明。当前应用程序可支持标准C及C++的代码开发。
```
#include <stdio.h>
#include "helloworld.h"
......@@ -54,7 +54,7 @@ vendor/hihope
再添加头文件applications/sample/hello/include/helloworld.h,代码如下所示。
```
#ifndef HELLOWORLD_H
#define HELLOWORLD_H
......@@ -75,9 +75,8 @@ vendor/hihope
```
2. 新建编译组织文件。
1. 新建applications/sample/hello/BUILD.gn文件,内容如下所示:
```
import("//build/ohos.gni") # 导入编译模板
ohos_executable("helloworld") { # 可执行模块
......@@ -98,7 +97,7 @@ vendor/hihope
}
```
2. 新建applications/sample/hello/bundle.json文件,添加sample部件描述,内容如下所示。
```
{
"name": "@ohos/hello",
......@@ -137,10 +136,10 @@ vendor/hihope
bundle.json文件包含两个部分,第一部分描述该部件所属子系统的信息,第二部分component则定义该部件构建相关配置。添加的时候需要指明该部件包含的模块sub_component,假如有提供给其它部件的接口,需要在inner_kits中说明,假如有测试用例,需要在test中说明,inner_kits与test没有也可以不添加。
3. 修改子系统配置文件。
在build/subsystem_config.json中添加新建的子系统的配置。
```
"sample": {
"path": "applications/sample/hello",
......@@ -149,7 +148,7 @@ vendor/hihope
```
4. 修改产品配置文件。
在vendor/hihope/rk3568/config.json中添加对应的hello部件,直接添加到原有部件后即可。
```
......
......@@ -3,19 +3,19 @@
## 启动系统
镜像烧录完成重启开发板后,系统将会自动启动。开发板附带的屏幕呈现以下界面,表明系统已运行成功。
烧录完成重启开发板后,系统将会自动启动。开发板附带的屏幕呈现以下界面,表明系统已运行成功。
**图1** 系统启动效果图  
![zh-cn_image_0000001226602406](figures/zh-cn_image_0000001226602406.jpg)
![quickstart-pkg-3568-running-restart](figures/quickstart-pkg-3568-running-restart.png)
## 运行“Hello World”
1. 设备启动后打开串口工具(以putty为例),波特率设置为1500000,连接设备。
![zh-cn_image_0000001226922310](figures/zh-cn_image_0000001226922310.png)
![rk3568-run-configuration](figures/rk3568-run-configuration.png)
2. 打开串口后,在任意目录(以设备根目录为例)下输入命令helloworld后回车,界面打印“Hello World!”,程序运行成功。
![zh-cn_image_0000001271202465](figures/zh-cn_image_0000001271202465.png)
![helloworld](figures/helloworld.png)
# 编译
OpenHarmony支持hb和build.sh两种编译方式。此处介绍hb方式,build.sh脚本编译方式请参考[使用build.sh脚本编译源码](quickstart-lite-reference.md)
OpenHarmony支持hb和build.sh两种编译方式。此处介绍hb方式,build.sh脚本编译方式请参考[使用build.sh脚本编译源码](quickstart-pkg-common-build.md#使用buildsh脚本编译源码)
在Ubuntu环境下进入源码根目录,执行如下命令进行编译:
想要详细了解OpenHarmony编译构建模块功能的开发者可参考[编译构建指南](../subsystems/subsys-build-all.md)
## 前提条件
- 已正确[安装库和工具集](quickstart-pkg-install_package.md)
- 已正确[安装编译工具](quickstart-pkg-install_tool.md)
- 已正确[安装Hi3861特有工具](quickstart-pkg-3861-tool.md)
- “Hello World”程序已编写完成。
- 可正常登录Ubuntu环境。
## 操作步骤
在Ubuntu环境下进入源码根目录,执行如下命令进行编译:
1. 设置编译路径。
```
hb set
```
2. 选择当前路径。
```
.
```
3. 在hisilicon下选择wifiiot_hispark_pegasus并回车。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
>
> 同样的开发板在适配不同的场景时,要采用的编译形态不同(即此处要选择的product不同),请参考[编译形态整体说明](quickstart-appendix-compiledform.md)。
**图1** Hi3861编译设置图例  
![zh-cn_image_0000001317078157](figures/zh-cn_image_0000001317078157.png)
![quickstart-lite-3861-build](figures/quickstart-lite-3861-build.png)
4. 执行编译。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> - 单独编译一个部件(例如hello),可使用“hb build -T _目标名称_”进行编译。
>
......@@ -36,12 +55,11 @@ OpenHarmony支持hb和build.sh两种编译方式。此处介绍hb方式,build.
>
> 此处以完整编译整个产品为例进行说明。
```
hb build -f
```
5. 编译结束后,出现“build success”字样,则证明构建成功。
> ![icon-notice.gif](public_sys-resources/icon-notice.gif) **须知:**
> 编译结果文件及编译日志获取路径:out/hispark_pegasus/wifiiot_hispark_pegasus。
# 烧录
针对Hi3861开发板,除了DevEco Device Tool(操作方法请参考[烧录](quickstart-ide-3861-burn.md))外,还可以使用Hiburn进行烧录。
## 前提条件
- 开发板相关源码已编译完成,已形成烧录文件。
- 客户端(操作平台,例如Windows系统)已下载并安装[HiBurn工具](https://gitee.com/hihope_iot/docs/tree/master/HiSpark_WiFi_IoT/Software/tools)
- 客户端(操作平台,例如Windows系统)已安装USB驱动,可参考[USB驱动安装指导](https://device.harmonyos.com/cn/docs/documentation/guide/hi3861-drivers-0000001058153433)
- 客户端已安装串口终端工具(例如IPOP)。
- 使用USB线缆连接客户端与开发板。
## 操作步骤
1. 准备烧录相关文件。
1. 在客户端新建用于保存烧录文件的文件夹,例如“D:\hi3861”。
2. 将编译完成的源码包下载至客户端并解压,将烧录相关文件拷贝至步骤1中新建的文件夹。
烧写所需文件为:Hi3861_wifiiot_app_allinone.bin、Hi3861_loader_signed.bin
2. 使用HiBurn烧录。
1. 打开HiBurn。
2. 设置HiBurn参数,根据实际情况选择COM口,勾选“Select all”和“Auto burn”。
**图1** HiBurn烧写界面参数设置  
![quickstart-pkg-3861-burn-hiburn](figures/quickstart-pkg-3861-burn-hiburn.png)
3. 单击Select file在步骤1创建的文件夹中选择烧写文件Hi3861_wifiiot_app_allinone.bin。
**图2** hiburn文件选择完成  
![quickstart-pkg-3861-burn-selectfile](figures/quickstart-pkg-3861-burn-selectfile.png)
4. 确保COM口选择正确,然后单击Connect后,按一下开发板上串口旁的按钮(Reset键)开始烧写。
烧录开始后,可以在HiBurn工具下方的控制台区域观察到烧录过程中的打印信息。
烧录完成后,控制台区域会打印提示"Execution Successful"。
**图3** 单击"Connect"后  
![quickstart-pkg-3861-burn-connect](figures/quickstart-pkg-3861-burn-connect.png)
**图4** 单击开发板重置按键后,烧写中  
![quickstart-pkg-3861-burn-burning](figures/quickstart-pkg-3861-burn-burning.png)
**图5** 烧写完成  
![quickstart-pkg-3861-burn-end](figures/quickstart-pkg-3861-burn-end.png)
5. 单击Disconnect断开连接。
......@@ -5,12 +5,12 @@
1. 确定目录结构。
开发者编写业务时,务必先在./applications/sample/wifi-iot/app路径下新建一个目录(或一套目录结构),用于存放业务源码文件。
例如:在app下新增业务my_first_app,其中hello_world.c为业务代码,BUILD.gn为编译脚本,具体规划目录结构如下:
```
.
└── applications
......@@ -23,9 +23,9 @@
```
2. 编写业务代码。
新建./applications/sample/wifi-iot/app/my_first_app下的hello_world.c文件,在hello_world.c中新建业务入口函数HelloWorld,并实现业务逻辑。并在代码最下方,使用OpenHarmony启动恢复模块接口SYS_RUN()启动业务。(SYS_RUN定义在ohos_init.h文件中)
```
#include <stdio.h>
#include "ohos_init.h"
......@@ -39,12 +39,12 @@
```
3. 编写用于将业务构建成静态库的BUILD.gn文件。
新建./applications/sample/wifi-iot/app/my_first_app下的BUILD.gn文件,并完成如下配置。
如步骤1所述,BUILD.gn文件由三部分内容(目标、源文件、头文件路径)构成,需由开发者完成填写。
```
static_library("myapp") {
sources = [
......@@ -61,10 +61,10 @@
- include_dirs中指定source所需要依赖的.h文件路径。
4. 添加新组件。
修改文件build/lite/components/communication.json,添加组件hello_world_app的配置,如下所示为communication.json文件片段,"\#\#start\#\#"和"\#\#end\#\#"之间为新增配置("\#\#start\#\#"和"\#\#end\#\#"仅用来标识位置,添加完配置后删除这两行):
修改文件**build/lite/components/communication.json**,添加组件hello_world_app的配置,如下所示为communication.json文件片段,"\#\#start\#\#"和"\#\#end\#\#"之间为新增配置("\#\#start\#\#"和"\#\#end\#\#"仅用来标识位置,添加完配置后删除这两行):
```
{
"components": [
......@@ -124,10 +124,10 @@
```
5. 修改单板配置文件。
修改文件vendor/hisilicon/hispark_pegasus/config.json,新增hello_world_app组件的条目,如下所示代码片段为applications子系统配置,"\#\#start\#\#"和"\#\#end\#\#"之间为新增条目("\#\#start\#\#"和"\#\#end\#\#"仅用来标识位置,添加完配置后删除这两行):
修改文件**vendor/hisilicon/hispark_pegasus/config.json**,新增hello_world_app组件的条目,如下所示代码片段为applications子系统配置,"\#\#start\#\#"和"\#\#end\#\#"之间为新增条目("\#\#start\#\#"和"\#\#end\#\#"仅用来标识位置,添加完配置后删除这两行):
```
{
"subsystem": "applications",
......
# 调试验证
# 运行
完成烧录及联网之后,用户可根据需要进行调试验证。目前调试验证的方法有以下两种,开发者可以根据具体业务情况选择。
## 联网配置
由于Hi3861为WLAN模组,您可以在版本编译及烧录后,通过如下操作,使开发板实现联网功能。
1. 保持Windows工作台和Hi3861 WLAN模组的连接状态,确认串口终端显示正常。
2. 复位Hi3861 WLAN模组,终端界面显示“ready to OS start”,则启动成功。
**图1** Hi3861 WLAN模组复位成功示意图  
![quickstart-pkg-3861-running-restart](figures/quickstart-pkg-3861-running-restart.png)
3. 依次执行如下AT命令,启动STA模式,连接指定AP热点,并开启DHCP功能。
```
AT+STARTSTA # 启动STA模式
AT+SCAN # 扫描周边AP
AT+SCANRESULT # 显示扫描结果
AT+CONN="SSID",,2,"PASSWORD" # 连接指定AP,其中SSID/PASSWORD为待连接的热点名称和密码
AT+STASTAT # 查看连接结果
AT+DHCP=wlan0,1 # 通过DHCP向AP请求wlan0的IP地址
```
4. 查看Hi3861 WLAN模组与网关联通是否正常,如下图所示。
```
AT+IFCFG # 查看模组接口IP
AT+PING=X.X.X.X # 检查模组与网关的联通性,其中X.X.X.X需替换为实际的网关地址
```
**图2** Hi3861 WLAN模组联网成功示意图  
![quickstart-pkg-3861-running-success](figures/quickstart-pkg-3861-running-success.png)
## 调测验证
完成烧录及联网之后,用户可根据需要进行调试验证。目前调试验证的方法有以下两种,开发者可以根据具体业务情况选择。
1. 通过printf打印日志
2. 通过asm文件定位panic问题
由于本示例业务简单,采用printf打印日志的调试方式即可。下方将介绍这两种调试手段的使用方法。
## printf打印
### printf打印
代码中增加printf维测,信息会直接打印到串口上。开发者可在业务关键路径或业务异常位置增加日志打印,如下所示:
```
void HelloWorld(void)
{
......@@ -25,10 +59,10 @@ void HelloWorld(void)
```
## 根据asm文件进行问题定位
### 根据asm文件进行问题定位
系统异常退出时,会在串口上打印异常退出原因调用栈信息,如下文所示。通过解析异常栈信息可以定位异常位置。
```
=======KERNEL PANIC=======
**Call Stack*
......@@ -47,7 +81,7 @@ Call Stack end***
1. 将调用栈CallStack信息保存到txt文档中,以便于编辑。(可选)
2. 打开asm文件,并搜索CallStack中的地址,列出对应的函数名信息。通常只需找出前几个栈信息对应的函数,就可明确异常代码方向。
```
Call Stack 0 -- 4860d8 addr:f784c -- WadRecvCB
Call Stack 1 -- 47b2b2 addr:f788c -- wal_sdp_process_rx_data
......@@ -59,7 +93,28 @@ Call Stack end***
```
3. 根据以上调用栈信息,可以定位WadRecvCB函数中出现了异常。
![zh-cn_image_0000001271354733](figures/zh-cn_image_0000001271354733.png)
![hi3861-test](figures/hi3861-test.png)
4. 完成代码排查及修改。
## 运行结果
示例代码编译、烧录、运行、调测后,重启开发板后将自动在界面输出如下结果:
```
ready to OS start
FileSystem mount ok.
wifi init success!
[DEMO] Hello world.
```
下一步学习
恭喜,您已完成Hi3861 WLAN模组快速上手!建议您下一步进入的学习 。可参考:
- [LED外设控制](../guide/device-wlan-led-control.md)
- [集成三方SDK](../guide/device-wlan-sdk.md)
# 安装Hi3861开发板环境
# 安装Hi3861开发板特有环境
## Hi3861工具要求
除上述[安装库和工具集](quickstart-pkg-install_package.md)[安装编译工具](quickstart-pkg-install_tool.md)外,针对Hi3861开发板还需要安装特定的编译工具。
### 硬件要求
- Linux工作台
- Hi3861 WLAN模组
- USB Type-C线(Linux工作台通过USB与Hi3861开发板连接)
### 软件要求
Hi3861 WLAN模组需要的工具如下表所示。
## 工具要求
**表1** Hi3861 WLAN模组需要安装的编译工具
......@@ -26,40 +15,42 @@ Hi3861 WLAN模组需要的工具如下表所示。
| gcc&nbsp;riscv32 | 编译构建工具 |
## 安装编译工具
## 操作步骤
编译Hi3861 WLAN模组需要一些特定的编译工具,在Ubuntu下通过以下步骤安装
相关操作在Ubuntu环境下进行
### 安装Scons
1. 运行如下命令,安装SCons安装包。
```
python3 -m pip install scons
```
2. 运行如下命令,查看是否安装成功。如果安装成功,查询结果下图所示。
```
scons -v
```
**图1** SCons安装成功界面,版本要求3.0.4以上  
![zh-cn_image_0000001271234749](figures/zh-cn_image_0000001271234749.png)
![hi3861-scons-install-success](figures/hi3861-scons-install-success.png)
### 安装python模块
1. 运行如下命令,安装python模块setuptools。
```
pip3 install setuptools
```
2. 安装GUI menuconfig工具(Kconfiglib),建议安装Kconfiglib 13.2.0+版本,任选如下一种方式。
- **命令行方式:**
```
sudo pip3 install kconfiglib
```
......@@ -67,15 +58,16 @@ Hi3861 WLAN模组需要的工具如下表所示。
1. 下载.whl文件(例如:kconfiglib-13.2.0-py2.py3-none-any.whl)。
下载路径:“[https://pypi.org/project/kconfiglib#files](https://pypi.org/project/kconfiglib#files)
2. 运行如下命令,安装.whl文件。
```
sudo pip3 install kconfiglib-13.2.0-py2.py3-none-any.whl
```
3. 安装pycryptodome,任选如下一种方式。
安装升级文件签名依赖的Python组件包,包括:pycryptodome、six、ecdsa。安装ecdsa依赖six,请先安装six,再安装ecdsa。
安装升级文件签名依赖的Python组件包,包括:pycryptodome、six、ecdsa。安装ecdsa依赖six,请先安装six,再安装ecdsa。
- **命令行方式:**
```
sudo pip3 install pycryptodome
```
......@@ -84,14 +76,14 @@ Hi3861 WLAN模组需要的工具如下表所示。
1. 下载.whl文件(例如:pycryptodome-3.9.9-cp38-cp38-manylinux1_x86_64.whl)。
下载路径:“[https://pypi.org/project/pycryptodome/#files](https://pypi.org/project/pycryptodome/#files)”。
2. 运行如下命令,安装.whl文件。
```
sudo pip3 install pycryptodome-3.9.9-cp38-cp38-manylinux1_x86_64.whl
```
4. 安装six,任选如下一种方式。
- **命令行方式:**
```
sudo pip3 install six --upgrade --ignore-installed six
```
......@@ -99,14 +91,14 @@ Hi3861 WLAN模组需要的工具如下表所示。
1. 下载.whl文件(例如:six-1.12.0-py2.py3-none-any.whl)。
下载路径:“[https://pypi.org/project/six/#files](https://pypi.org/project/six/#files)
2. 运行如下命令,安装.whl文件。
```
sudo pip3 install six-1.12.0-py2.py3-none-any.whl
```
5. 安装ecdsa,任选如下一种方式。
- **命令行方式:**
```
sudo pip3 install ecdsa
```
......@@ -114,7 +106,7 @@ Hi3861 WLAN模组需要的工具如下表所示。
1. 下载.whl文件(例如:ecdsa-0.14.1-py2.py3-none-any.whl)。
下载路径:“[https://pypi.org/project/ecdsa/#files](https://pypi.org/project/ecdsa/#files)
2. 运行如下命令,安装.whl文件。
```
sudo pip3 install ecdsa-0.14.1-py2.py3-none-any.whl
```
......@@ -130,31 +122,31 @@ Hi3861 WLAN模组需要的工具如下表所示。
1. 打开Linux编译服务器终端。
2. 下载riscv-gnu-toolchain交叉编译工具链。
```
git clone --recursive https://gitee.com/mirrors/riscv-gnu-toolchain.git
```
3. 打开文件夹riscv-gnu-toolchain,先删除空文件夹,以防止下载newlib,binutils,gcc时冲突。
```
cd riscv-gnu-toolchain && rm -rf riscv-newlib && rm -rf riscv-binutils && rm -rf riscv-gcc
```
4. 下载riscv-newlib-3.0.0。
```
git clone -b riscv-newlib-3.0.0 https://github.com/riscv/riscv-newlib.git
```
5. 下载riscv-binutils-2.31.1。
```
git clone -b riscv-binutils-2.31.1 https://github.com/riscv/riscv-binutils-gdb.git
```
6. 下载riscv-gcc-7.3.0。
```
git clone -b riscv-gcc-7.3.0 https://github.com/riscv/riscv-gcc
```
......@@ -163,43 +155,43 @@ Hi3861 WLAN模组需要的工具如下表所示。
访问gcc官方补丁链接[89411](https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=026216a753ef0a757a9e368a59fa667ea422cf09;hp=2a23a1c39fb33df0277abd4486a3da64ae5e62c2)[86724](https://gcc.gnu.org/git/?p=gcc.git;a=blobdiff;f=gcc/graphite.h;h=be0a22b38942850d88feb159603bb846a8607539;hp=4e0e58c60ab83f1b8acf576e83330466775fac17;hb=b1761565882ed6a171136c2c89e597bc4dd5b6bf;hpb=fbd5f023a03f9f60c6ae36133703af5a711842a3),按照补丁链接中要求的修改,手动将变更添加到对应的.c和.h文件中,注意由于patch版本与下载的gcc版本有所偏差,行数有可能对应不上,请自行查找patch中的关键字定位到对应行。
8. 下载[GMP 6.1.2](https://gmplib.org/download/gmp/gmp-6.1.2.tar.bz2),并解压安装。
```
tar -xvf gmp-6.1.2.tar.bz2 && mkdir build_gmp && cd build_gmp && ../gmp-6.1.2/configure --prefix=/usr/local/gmp-6.1.2 --disable-shared --enable-cxx && make && make install
```
9. 下载[mpfr-4.0.2 ](https://www.mpfr.org/mpfr-4.0.2/mpfr-4.0.2.tar.gz),并解压安装。
```
tar -xvf mpfr-4.0.2.tar.gz && mkdir build_mpfr && cd build_mpfr && ../mpfr-4.0.2/configure --prefix=/usr/local/mpfr-4.0.2 --with-gmp=/usr/local/gmp-6.1.2 --disable-shared && make && make install
```
10. 下载[mpc-1.1.0](https://ftp.gnu.org/gnu/mpc/mpc-1.1.0.tar.gz) ,并解压安装。
```
tar -xvf mpc-1.1.0.tar.gz && mkdir build_mpc && cd build_mpc && ../mpc-1.1.0/configure --prefix=/usr/local/mpc-1.1.0 --with-gmp=/usr/local/gmp-6.1.2 --with-mpfr=/usr/local/mpfr-4.0.2 --disable-shared && make && make install
```
11. 打开文件夹riscv-gnu-toolchain,新建工具链输出目录。
```
cd /opt && mkdir gcc_riscv32
```
12. 编译binutils。
```
mkdir build_binutils && cd build_binutils && ../riscv-binutils-gdb/configure --prefix=/opt/gcc_riscv32 --target=riscv32-unknown-elf --with-arch=rv32imc --with-abi=ilp32 --disable-__cxa_atexit --disable-libgomp --disable-libmudflap --enable-libssp --disable-libstdcxx-pch --disable-nls --disable-shared --disable-threads --disable-multilib --enable-poison-system-directories --enable-languages=c,c++ --with-gnu-as --with-gnu-ld --with-newlib --with-system-zlib CFLAGS="-fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wl,-z,relro,-z,now,-z,noexecstack -fPIE" CXXFLAGS="-fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wl,-z,relro,-z,now,-z,noexecstack -fPIE" CXXFLAGS_FOR_TARGET="-Os -mcmodel=medlow -Wall -fstack-protector-strong -Wl,-z,relro,-z,now,-z,noexecstack -Wtrampolines -fno-short-enums -fno-short-wchar" CFLAGS_FOR_TARGET="-Os -mcmodel=medlow -Wall -fstack-protector-strong -Wl,-z,relro,-z,now,-z,noexecstack -Wtrampolines -fno-short-enums -fno-short-wchar" --bindir=/opt/gcc_riscv32/bin --libexecdir=/opt/gcc_riscv32/riscv32 --libdir=/opt/gcc_riscv32 --includedir=/opt/gcc_riscv32 && make -j16 && make install && cd ..
```
13. 编译newlib。
```
mkdir build_newlib && cd build_newlib && ../riscv-newlib/configure --prefix=/opt/gcc_riscv32 --target=riscv32-unknown-elf --with-arch=rv32imc --with-abi=ilp32 --disable-__cxa_atexit --disable-libgomp --disable-libmudflap --enable-libssp --disable-libstdcxx-pch --disable-nls --disable-shared --disable-threads --disable-multilib --enable-poison-system-directories --enable-languages=c,c++ --with-gnu-as --with-gnu-ld --with-newlib --with-system-zlib CFLAGS="-fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wl,-z,relro,-z,now,-z,noexecstack -fPIE" CXXFLAGS="-fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wl,-z,relro,-z,now,-z,noexecstack -fPIE" \CXXFLAGS_FOR_TARGET="-Os -mcmodel=medlow -Wall -fstack-protector-strong -Wl,-z,relro,-z,now,-z,noexecstack -Wtrampolines -fno-short-enums -fno-short-wchar" CFLAGS_FOR_TARGET="-Os -mcmodel=medlow -Wall -fstack-protector-strong -Wl,-z,relro,-z,now,-z,noexecstack -Wtrampolines -fno-short-enums -fno-short-wchar" --bindir=/opt/gcc_riscv32/bin --libexecdir=/opt/gcc_riscv32 --libdir=/opt/gcc_riscv32 --includedir=/opt/gcc_riscv32 && make -j16 && make install && cd ..
```
14. 编译gcc。
```
mkdir build_gcc && cd build_gcc && ../riscv-gcc/configure --prefix=/opt/gcc_riscv32 --target=riscv32-unknown-elf --with-arch=rv32imc --with-abi=ilp32 --disable-__cxa_atexit --disable-libgomp --disable-libmudflap --enable-libssp --disable-libstdcxx-pch --disable-nls --disable-shared --disable-threads --disable-multilib --enable-poison-system-directories --enable-languages=c,c++ --with-gnu-as --with-gnu-ld --with-newlib --with-system-zlib CFLAGS="-fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wl,-z,relro,-z,now,-z,noexecstack -fPIE" CXXFLAGS="-fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wl,-z,relro,-z,now,-z,noexecstack -fPIE" LDFLAGS="-Wl,-z,relro,-z,now,-z,noexecstack" CXXFLAGS_FOR_TARGET="-Os -mcmodel=medlow -Wall -fstack-protector-strong -Wl,-z,relro,-z,now,-z,noexecstack -Wtrampolines -fno-short-enums -fno-short-wchar" CFLAGS_FOR_TARGET="-Os -mcmodel=medlow -Wall -fstack-protector-strong -Wl,-z,relro,-z,now,-z,noexecstack -Wtrampolines -fno-short-enums -fno-short-wchar" --with-headers="/opt/gcc-riscv32/riscv32-unknown-elf/include" --with-mpc=/usr/local/mpc-1.1.0 --with-gmp=/usr/local/gmp-6.1.2 --with-mpfr=/usr/local/mpfr-4.0.2 && make -j16 && make install
```
......@@ -212,27 +204,27 @@ Hi3861 WLAN模组需要的工具如下表所示。
> tar -xvf gcc_riscv32-linux-7.3.0.tar.gz -C ~
> ```
```
vim ~/.bashrc
```
将以下命令拷贝到.bashrc文件的最后一行,保存并退出。
```
export PATH=~/gcc_riscv32/bin:$PATH
```
16. 生效环境变量。
```
source ~/.bashrc
```
17. Shell命令行中输入如下命令,如果能正确显示编译器版本号,表明编译器安装成功。
```
riscv32-unknown-elf-gcc -v
```
# 参考信息
# 使用build.sh脚本编译源码
## 使用build.sh脚本编译源码
1. 进入源码根目录,执行如下命令进行版本编译。
```
./build.sh --product-name name --ccache
```
......@@ -13,7 +11,7 @@
> _name_为产品名称,例如Hi3516DV300、rk3568等。
2. 检查编译结果。编译完成后,log中显示如下:
```
post_process
=====build name successful.
......@@ -21,48 +19,4 @@
编译所生成的文件都归档在out/{device_name}/目录下,结果镜像输出在out/{device_name}/packages/phone/images/ 目录下。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 其他模块化编译操作,可参见[编译构建指导](../subsystems/subsys-build-all.md)。
## 配置代理
### 配置Python代理
1. 新建代理配置文件。
```
mkdir ~/.pipvim ~/.pip/pip.conf
```
2. 在文件中写入如下代理信息并保存退出。
```
[global]
index-url = http://代理网址
trusted-host = 可信任的镜像地址
timeout = 120
```
### 配置NPM代理
1. 新建代理配置文件。
```
vim ~/.npmrc
```
2. 在文件中写入如下代理信息并保存退出。
```
registry=http://代理网址
strict-ssl=false
```
3. 将以下内容添加到.bashrc中并保存退出。
```
export NPM_REGISTRY=http://代理网址
source .bashrc
```
> 其他模块化编译操作,可参见[编译构建指南](../subsystems/subsys-build-all.md)。
# 编译异常
# 编译异常处理
## Linux编译服务器终端输入不识别的命令时提示“ImportError: No module named apt_pkg”
- **现象描述**
Linux编译服务器终端输入不识别的命令时,提示"ImportError: No module named apt_pkg"
- **可能原因**
python3 apt安装兼容性问题。
- **解决办法**
执行如下命令重新安装python3-apt。
```
sudo apt-get remove python3-apt
sudo apt-get install python3-apt
......@@ -22,33 +25,38 @@
## 编译构建过程中,提示找不到“python”
- **现象描述**
编译构建过程中出现以下错误:
```
-bash: /usr/bin/python: No such file or directory
```
- **可能原因**1
没有装python。
- **解决办法**
请使用如下命令安装Python,下方以Python3.8为例。
```
sudo apt-get install python3.8
```
- **可能原因2**
usr/bin目录下没有python软链接
![zh-cn_image_0000001271354745](figures/zh-cn_image_0000001271354745.png)
![faq-python-error](figures/faq-python-error.png)
- **解决办法**
请运行以下命令添加软链接:
```
# cd /usr/bin/
# which python3
......@@ -58,22 +66,24 @@
例:
![zh-cn_image_0000001227114636](figures/zh-cn_image_0000001227114636.png)
![faq-python-add-soft-link](figures/faq-python-add-soft-link.png)
## 编译构建过程中,提示找不到“python3”
- **现象描述**
![zh-cn_image_0000001227114640](figures/zh-cn_image_0000001227114640.png)
![faq-python3-not-found](figures/faq-python3-not-found.png)
- **可能原因**
没有装python3。
- **解决办法**
请使用如下命令安装Python3。
```
sudo apt-get install python3.8
```
......@@ -82,14 +92,16 @@
## 安装python3过程中,提示“configure: error: no acceptable C compiler found in $PATH”
- **现象描述**
安装python3过程中出现以下错误:
```
configure: error: no acceptable C compiler found in $PATH. See 'config.log' for more details
```
- **可能原因**
环境中未安装“gcc”。
- **解决办法**
......@@ -100,14 +112,16 @@
## 安装python3过程中,提示“-bash: make: command not found”
- **现象描述**
安装python3过程中出现以下错误:
```
-bash: make: command not found
```
- **可能原因**
环境中未安装“make”。
- **解决办法**
......@@ -118,18 +132,19 @@
## 安装python3过程中,提示“No module named '_ctypes'”
- **现象描述**
安装python3过程中出现以下错误:
```
ModuleNotFoundError:No module named ‘_ctypes’
```
- **可能原因**
环境中未安装“libffi”和“libffi-devel”。
- **解决办法**
1. 通过命令“apt-get install libffi\* -y”,在线安装。
2. 完成后,重新安装python3。
......@@ -137,25 +152,26 @@
## 编译构建过程中,提示“No module named 'Crypto'”
- **现象描述**
编译构建过程中出现以下错误:
```
ModuleNotFoundError: No module named 'Crypto'
```
- **可能原因**
环境中未安装“Crypto”。
- **解决办法**
方法1:通过命令“pip3 install Crypto”,在线安装。
方法2:离线安装。
通过网页[https://pypi.org/project/pycrypto/#files](https://pypi.org/project/pycrypto/#files),下载源码。
![zh-cn_image_0000001226794696](figures/zh-cn_image_0000001226794696.png)
![faq-download-pycrypto](figures/faq-download-pycrypto.png)
将源码放置在Linux服务器中,解压,并安装“python3 setup.py install”。
......@@ -165,25 +181,26 @@
## (Hi3861)编译构建过程中,提示“No module named 'ecdsa'”
- **现象描述**
编译构建过程中出现以下错误:
```
ModuleNotFoundError:No module named 'ecdsa'
```
- **可能原因**
环境中未安装“ecdsa”。
- **解决办法**
方法1:通过命令“pip3 install ecdsa”,在线安装。
方法2:离线安装
通过网页[https://pypi.org/project/ecdsa/#files](https://pypi.org/project/ecdsa/#files),下载安装包。
![zh-cn_image_0000001271594753](figures/zh-cn_image_0000001271594753.png)
![faq-download-ecdsa](figures/faq-download-ecdsa.png)
将安装包放置Linux服务器中,并安装“pip3 install ecdsa-0.15-py2.py3-none-any.whl”。
......@@ -193,25 +210,26 @@
## (Hi3861)编译构建过程中,提示“Could not find a version that satisfies the requirement six&gt;=1.9.0”
- **现象描述**
编译构建过程中出现以下错误:
```
Could not find a version that satisfies the requirement six>=1.9.0
```
- **可能原因**
环境中未安装合适的“six”。
- **解决办法**
方法1:通过命令“pip3 install six”,在线安装。
方法2:离线安装。
通过网页[https://pypi.org/project/six/#files](https://pypi.org/project/six/#files),下载安装包。
![zh-cn_image_0000001271474573](figures/zh-cn_image_0000001271474573.png)
![faq-download-six](figures/faq-download-six.png)
将源码放置在Linux服务器中,并安装“pip3 install six-1.14.0-py2.py3-none-any.whl”。
......@@ -221,25 +239,28 @@
## (Hi3861)编译构建过程中,提示找不到“-lgcc”
- **现象描述**
编译构建过程中出现以下错误:
```
riscv32-unknown-elf-ld: cannot find -lgcc
```
- **可能原因**
交叉编译器gcc_riscv32的PATH添加错误,如下,在"bin"后多添加了一个“/”,应该删除。
```
~/gcc_riscv32/bin/:/data/toolchain/
```
- **解决办法**
重新修改gcc_riscv32的PATH,将多余的“/”删除。
```
~/gcc_riscv32/bin:/data/toolchain/
```
......@@ -248,15 +269,18 @@
## (Hi3861)安装kconfiglib时,遇到lsb_release错误
- **现象描述**
安装kconfiglib过程中遇到如下错误打印:
```
subprocess.CalledProcessError: Command '('lsb_release', '-a')' returned non-zero exit status 1.
```
- **可能原因**
lsb_release模块基于的python版本与现有python版本不一致。
- **解决办法**
执行"find / -name lsb_release",找到lsb_release位置并删除,如:"sudo rm -rf /usr/bin/lsb_release"。
# 烧录异常
# 烧录异常处理
## 烧写选择串口后提示“Error: Opening COMxx: Access denied”
- **现象描述**
点击烧写并选择串口后,出现Error: Opening COMxx: Access denied。
单击烧写并选择串口后,出现Error: Opening COMxx: Access denied。
**图1** 打开串口失败图 
![zh-cn_image_0000001226634728](figures/zh-cn_image_0000001226634728.png)
**图1** 打开串口失败图  
![hi3516-faq-serial-access-denied](figures/hi3516-faq-serial-access-denied.png)
- **可能原因**
串口已经被占用。
- **解决办法**
1. 按图依次选择下拉框,查找带有serial-xx的终端。
**图2** 查找是否存在占用串口的终端  
**图2** 查找是否存在占用串口的终端  
![zh-cn_image_0000001226954644](figures/zh-cn_image_0000001226954644.png)
2. 点击标号中的垃圾桶图标,关闭串口。
**图3** 关闭串口终端 
![hi3516-faq-serial-check](figures/hi3516-faq-serial-check.png)
2. 单击标号中的垃圾桶图标,关闭串口。
**图3** 关闭串口终端  
![hi3516-faq-serial-close-terminal](figures/hi3516-faq-serial-close-terminal.png)
![zh-cn_image_0000001271234761](figures/zh-cn_image_0000001271234761.png)
3. 重新点击烧写,选择串口并开始烧写程序。
**图4** 重新启动烧写任务  
![zh-cn_image_0000001271594765](figures/zh-cn_image_0000001271594765.png)
3. 重新单击烧写,选择串口并开始烧写程序。
**图4** 重新启动烧写任务  
![hi3516-faq-serial-reburn](figures/hi3516-faq-serial-reburn.png)
## Windows电脑与单板网络连接失败
- **现象描述**
点击烧写并选择串口后,无法获取文件。
**图5** 网络不通,单板无法获取文件图  
单击烧写并选择串口后,无法获取文件。
![zh-cn_image_0000001271234757](figures/zh-cn_image_0000001271234757.png)
**图5** 网络不通,单板无法获取文件图  
![hi3516-faq-network-fail](figures/hi3516-faq-network-fail.png)
- **可能原因**
单板网络与Windows电脑不联通。
Windows电脑防火墙未允许Visual Studio Code联网。
......@@ -53,76 +56,67 @@
1. 检查网线是否连接。
2. 点击Windows防火墙。
2. 单击Windows防火墙。
**图6** 网络防火墙设置图  
**图6** 网络防火墙设置图  
![hi3516-faq-firewall-setting](figures/hi3516-faq-firewall-setting.png)
![zh-cn_image_0000001226634732](figures/zh-cn_image_0000001226634732.png)
3. 点击“允许应用通过防火墙”。
**图7** 防火墙和网络保护界面图  
![zh-cn_image_0000001271354749](figures/zh-cn_image_0000001271354749.png)
3. 单击“允许应用通过防火墙”。
**图7** 防火墙和网络保护界面图  
![hi3516-faq-firewall-setting-allow](figures/hi3516-faq-firewall-setting-allow.png)
4. 查找Visual Studio Code应用。
**图8** 查找Visual Studio Code应用图  
![zh-cn_image_0000001271234765](figures/zh-cn_image_0000001271234765.png)
**图8** 查找Visual Studio Code应用图  
![hi3516-faq-firewall-find-vscode](figures/hi3516-faq-firewall-find-vscode.png)
5. 勾选Visual Studio Code的专用和公用网络的访问权限。
**图9** 允许Visual Studio Code应用访问网络  
![zh-cn_image_0000001271474585](figures/zh-cn_image_0000001271474585.png)
## 烧写失败
- **现象描述**
点击烧写并选择串口后,出现无法烧写的情况。
- **可能原因**
安装IDE插件DevEco后未重启。
- **解决方法**
重启IDE。
![hi3516-faq-firewall-vscode-allow-network](figures/hi3516-faq-firewall-vscode-allow-network.png)
## (Hi3516)串口无回显
- **现象描述**
串口显示已连接,重启单板后,回车无任何回显。
- **可能原因1**
串口连接错误。
- **解决办法**
修改串口号。
请查看设备管理器,确认连接单板的串口与终端中连接串口是否一致,若不一致,请按烧写选择串口后提示error-opening-comxx-access-denied修改串口号。
请查看设备管理器,确认连接单板的串口与终端中连接串口是否一致,若不一致,请按[串口访问失败的步骤](#烧写选择串口后提示error-opening-comxx-access-denied)修改串口号。
- **可能原因2**
单板U-boot被损坏。
- **解决办法**
烧写U-boot。
若上述步骤依旧无法连接串口,可能由于单板U-boot损坏,按下述步骤烧写U-boot。
1. 获取引导文件U-boot。
> ![icon-notice.gif](public_sys-resources/icon-notice.gif) **须知:**
> 单板的U-boot文件请在开源包中获取:device\hisilicon\hispark_taurus\sdk_liteos\uboot\out\boot\u-boot-hi3516dv300.bin
2. 根据USB烧写步骤烧写U-boot文件。
按照[Hi3516系列USB烧写步骤](https://device.harmonyos.com/cn/docs/documentation/guide/ide-hi3516-upload-0000001052148681)中描述的烧写方法,选择对应单板的U-boot文件进行烧写。
按照[Hi3516系列USB烧写步骤](https://device.harmonyos.com/cn/docs/documentation/guide/upload_hi3516_small_system-0000001326267405)中描述的烧写方法,选择对应单板的U-boot文件进行烧写。
3. 烧写完成后,登录串口如下图所示。
**图10** U-boot烧写完成串口显示图 
![zh-cn_image_0000001271234753](figures/zh-cn_image_0000001271234753.png)
**图10** U-boot烧写完成串口显示图  
![hi3516-faq-burn-uboot-success](figures/hi3516-faq-burn-uboot-success.png)
# hb安装异常
# hb安装异常处理
## hb安装过程中出现乱码、段错误
- **现象描述**
执行“python3 -m pip install --user ohos-build”出现乱码、段错误(segmentation fault)。
- **可能原因**
pip版本过低。
- **解决办法**
执行如下命令升级pip。
```
python3 -m pip install -U pip
```
......@@ -21,15 +24,18 @@
## hb安装过程中提示"cannot import 'sysconfig' from 'distutils'"
- **现象描述**
执行“python3 -m pip install --user ohos-build”提示"cannot import 'sysconfig' from 'distutils'"
- **可能原因**
缺少distutils模块。
- **解决办法**
执行如下命令安装。
```
sudo apt-get install python3.8-distutils
```
......@@ -38,15 +44,18 @@
## hb安装过程中提示"module 'platform' has no attribute 'linux_distribution'"
- **现象描述**
执行“python3 -m pip install --user ohos-build”提示"module 'platform' has no attribute 'linux_distribution'"
- **可能原因**
python3 pip安装兼容性问题。
- **解决办法**
执行如下命令重新安装pip。
```
sudo apt remove python3-pip
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
......@@ -57,15 +66,17 @@
## hb安装过程中提示"Could not find a version that satisfies the requirement ohos-build"
- **现象描述**
执行“python3 -m pip install --user ohos-build”提示"Could not find a version that satisfies the requirement ohos-build"
- **可能原因**
可能是网络环境较差导致的安装失败。
可能是网络环境较差导致的安装失败。
- **解决办法**
1. 请检查网络连接是否正常。如果网络有问题,请修复网络问题后重新安装。
2. 若网络正常,请尝试指定临时pypi源的方式安装:
```
python3 -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple ohos-build
```
# 参考信息
## 使用build.sh脚本编译源码
1. 进入源码根目录,执行如下命令进行版本编译。
```
./build.sh --product-name name --ccache
```
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> _name_为产品名称,例如Hi3516DV300、rk3568等。
2. 检查编译结果。编译完成后,log中显示如下:
```
post_process
=====build name successful.
```
编译所生成的文件都归档在out/{device_name}/目录下,结果镜像输出在out/{device_name}/packages/phone/images/ 目录下。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 其他模块化编译操作,可参见[编译构建指导](../subsystems/subsys-build-all.md)。
## 配置代理
# 配置代理
### 配置Python代理
......
# 搭建开发环境
在嵌入式开发中,很多开发者习惯于使用Windows进行代码的编辑,比如使用Windows的Visual Studio Code进行OpenHarmony代码的开发。但当前阶段,大部分的开发板源码还不支持在Windows环境下进行编译,如Hi3861、Hi3516系列开发板。因此,建议使用Ubuntu的编译环境对源码进行编译。同时,开发板的烧录需要在Windows环境中进行。
# 常用信息
- **[配置代理](quickstart-pkg-common-proxy.md)**
- **[使用build.sh脚本编译源码](quickstart-pkg-common-build.md)**
- **[hb安装异常处理](quickstart-pkg-common-hberr.md)**
- **[编译异常处理](quickstart-pkg-common-builderr.md)**
- **[烧录异常处理](quickstart-pkg-common-burnerr.md)**
\ No newline at end of file
# 安装库和工具集
使用命令行进行设备开发时,可以通过以下步骤安装编译OpenHarmony需要的库和工具。
相应操作在Ubuntu环境中进行。
1. 使用如下apt-get命令安装后续操作所需的库和工具:
```
sudo apt-get update && sudo apt-get install binutils binutils-dev git git-lfs gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib gcc-arm-linux-gnueabi libc6-dev-i386 libc6-dev-amd64 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip m4 bc gnutls-bin python3.8 python3-pip ruby genext2fs device-tree-compiler make libffi-dev e2fsprogs pkg-config perl openssl libssl-dev libelf-dev libdwarf-dev u-boot-tools mtd-utils cpio doxygen liblz4-tool openjdk-8-jre gcc g++ texinfo dosfstools mtools default-jre default-jdk libncurses5 apt-utils wget scons python3.8-distutils tar rsync git-core libxml2-dev lib32z-dev grsync xxd libglib2.0-dev libpixman-1-dev kmod jfsutils reiserfsprogs xfsprogs squashfs-tools pcmciautils quota ppp libtinfo-dev libtinfo5 libncurses5-dev libncursesw5 libstdc++6 gcc-arm-none-eabi vim ssh locales libxinerama-dev libxcursor-dev libxrandr-dev libxi-dev
```
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 以上安装命令适用于Ubuntu18.04,其他版本请根据安装包名称采用对应的安装命令。其中:
>
> - Python要求安装Python 3.8及以上版本,此处以Python 3.8为例。
>
> - Java要求java8及以上版本,此处以java8为例。
2. 将Python 3.8设置为默认Python版本。
查看Python 3.8的位置:
```
which python3.8
```
将Python和Python3切换为Python 3.8:
```
sudo update-alternatives --install /usr/bin/python python {Python 3.8 路径} 1 #{Python 3.8 路径}为上一步查看的Python 3.8的位置
sudo update-alternatives --install /usr/bin/python3 python3 {Python 3.8 路径} 1 #{Python 3.8 路径}为上一步查看的Python 3.8的位置
```
# 安装编译工具
## 安装编译工具
想要详细了解OpenHarmony编译构建模块功能的开发者可参考[编译构建指南](../subsystems/subsys-build-all.md)
相关操作在Ubuntu环境下进行。
### 安装hb
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 如需安装代理,请参考[配置代理](quickstart-pkg-common-proxy.md)。
1. 运行如下命令安装hb并更新至最新版本
```
pip3 install --user build/lite
```
2. 设置环境变量
```
vim ~/.bashrc
```
将以下命令拷贝到.bashrc文件的最后一行,保存并退出。
```
export PATH=~/.local/bin:$PATH
```
执行如下命令更新环境变量。
```
source ~/.bashrc
```
3. 在源码目录执行"hb -h",界面打印以下信息即表示安装成功:
```
usage: hb
OHOS build system
positional arguments:
{build,set,env,clean}
build Build source code
set OHOS build settings
env Show OHOS build env
clean Clean output
optional arguments:
-h, --help show this help message and exit
```
> ![icon-notice.gif](public_sys-resources/icon-notice.gif) **须知:**
> - 可采用以下命令卸载hb:
>
> ```
> pip3 uninstall ohos-build
> ```
>
> - 若安装hb的过程中遇到问题,请参见下文[常见问题](quickstart-pkg-common-hberr.md)进行解决。
### 安装LLVM(仅OpenHarmony_v1.x分支/标签需要)
> ![icon-notice.gif](public_sys-resources/icon-notice.gif) **须知:**
> 如果下载的源码为OpenHarmony_v1.x分支/标签,请按下面的步骤安装9.0.0版本的llvm。
>
> 如果下载的源码为Master及非OpenHarmony_v1.x分支/标签,可直接跳过本小节,hb会自动下载最新的llvm。
1. 打开Linux编译服务器终端。
2. [下载LLVM工具](https://repo.huaweicloud.com/harmonyos/compiler/clang/9.0.0-36191/linux/llvm-linux-9.0.0-36191.tar)
3. 解压LLVM安装包至~/llvm路径下。
```
tar -zxvf llvm.tar -C ~/
```
4. 设置环境变量。
```
vim ~/.bashrc
```
将以下命令拷贝到.bashrc文件的最后一行,保存并退出。
```
export PATH=~/llvm/bin:$PATH
```
5. 生效环境变量。
```
source ~/.bashrc
```
# 准备开发环境
在嵌入式开发中,很多开发者习惯于使用Windows进行代码的编辑,比如使用Windows的Visual Studio Code进行OpenHarmony代码的开发。但当前阶段,大部分的开发板源码还不支持在Windows环境下进行编译,如Hi3861、Hi3516系列开发板。因此,建议使用Ubuntu的编译环境对源码进行编译。同时,开发板的烧录需要在Windows环境中进行。
在基于命令行方式开发的过程中,除下述[Windows环境要求](#windows环境要求)[Ubuntu环境要求](#ubuntu环境要求)外,不对开发设备做另外的要求,请用户自行准备Windows环境、Ubuntu环境。本章节主要介绍通过Samba服务器实现Windows环境远程连接Ubuntu环境的方法。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> OpenHarmony还为开发者提供了[Docker环境](https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/get-code/gettools-acquire.md),整合的docker包在很大程度上简化了编译前的环境配置,习惯使用命令行的开发者也可以选择Docker环境进行编译 。
进行工具安装之前,需要做如下准备。
## Windows环境要求
源码烧录需要Windows10 64位的系统环境。
## Ubuntu环境要求
- Ubuntu18.04及以上版本,内存推荐16 GB及以上。
- Ubuntu系统的用户名不能包含中文字符。
## 远程访问准备
当在Windows下进行烧录时,开发者需要访问Ubuntu环境下的源码和镜像文件。您可以使用习惯的文件传输或共享工具实现文件的共享或传输。
此处介绍通过Samba服务器进行连接的操作方法。
### 配置Samba服务器
在Ubuntu环境下进行以下操作:
1. 安装Samba软件包。
```
sudo apt-get install samba samba-common
```
2. 修改Samba配置文件,配置共享信息。
打开配置文件:
```
sudo gedit /etc/samba/smb.conf
```
在配置文件末尾添加以下配置信息(根据实际需要配置相关内容):
```
[Share] #在Windows中映射的根文件夹名称(此处以“Share”为例)
comment = Shared Folder #共享信息说明
path = /home/share #共享目录
valid users = username #可以访问该共享目录的用户(Ubuntu的用户名)
directory mask = 0775 #默认创建的目录权限
create mask = 0775 #默认创建的文件权限
public = yes #是否公开
writable = yes #是否可写
available = yes #是否可获取
browseable = yes #是否可浏览
```
3. 添加Samba服务器用户和访问密码。
```
sudo smbpasswd -a username #用户名为Ubuntu用户名。输入命令后,根据提示设置密码。
```
4. 重启Samba服务。
```
sudo service smbd restart
```
### 设置Windows映射
在Windows环境下进行以下操作:
1. 右键计算机选择映射网络驱动器,输入共享文件夹信息。在文件夹输入框填入Ubuntu设备的IP地址和Ubuntu共享文件夹的路径。
![quickstart-pkg-prepare-networkdriver](figures/quickstart-pkg-prepare-networkdriver.png)
2. 输入Samba服务器的访问用户名和密码([在配置Samba服务器时已完成配置](#配置samba服务器))。
![quickstart-pkg-prepare-setsamba](figures/quickstart-pkg-prepare-setsamba.png)
3. 用户名和密码输入完成后即可在Windows下看到Linux的共享目录,并可对其进行访问。
......@@ -10,22 +10,22 @@
2. 注册码云SSH公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191)
3. 安装git客户端和git-lfs。(上述工具已在搭建环境章节安装。如已安装,请忽略)
3. 安装git客户端和git-lfs。(上述工具已在安装必要的库和工具小节安装。如已安装,请忽略)
更新软件源:
```
sudo apt-get update
```
通过以下命令安装:
```
sudo apt-get install git git-lfs
```
4. 配置用户信息。
```
git config --global user.name "yourname"
git config --global user.email "your-email-address"
......@@ -33,9 +33,9 @@
```
5. 执行如下命令安装码云repo工具。
下述命令中的安装路径以"~/bin"为例,请用户自行创建所需目录。
```
mkdir ~/bin
curl https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 -o ~/bin/repo
......@@ -44,7 +44,7 @@
```
6. 将repo添加到环境变量。
```
vim ~/.bashrc # 编辑环境变量
export PATH=~/bin:$PATH # 在环境变量的最后添加一行repo路径信息
......@@ -55,12 +55,17 @@
## 获取方式
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> Master主干为开发分支,开发者可通过Master主干获取最新特性。发布分支代码相对比较稳定,开发者可基于发布分支代码进行商用功能开发
> 发布分支代码相对比较稳定,开发者可基于发布分支代码进行商用功能开发。Master主干为开发分支,开发者可通过Master主干获取最新特性
- **OpenHarmony主干代码获取**
- **OpenHarmony发布分支代码获取**
OpenHarmony各个版本发布分支的源码获取方式请参考[Release-Notes](../../release-notes/Readme.md)
方式一(推荐):通过repo + ssh下载(需注册公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191))。
- **OpenHarmony主干代码获取**
方式一(推荐):通过repo + ssh下载(需注册公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191))。
```
repo init -u git@gitee.com:openharmony/manifest.git -b master --no-repo-verify
repo sync -c
......@@ -69,22 +74,18 @@
方式二:通过repo + https下载。
```
repo init -u https://gitee.com/openharmony/manifest.git -b master --no-repo-verify
repo sync -c
repo forall -c 'git lfs pull'
```
- **OpenHarmony发布分支代码获取**
OpenHarmony各个版本发布分支的源码获取方式请参考[Release-Notes](../../release-notes/Readme.md)
### 执行prebuilts
## 执行prebuilts
在源码根目录下执行prebuilts脚本,安装编译器及二进制工具。
```
bash build/prebuilts_download.sh
```
# 使用命令行快速入门
- 基于命令行入门
- 搭建开发环境
- [准备开发环境](quickstart-pkg-prepare.md)
- [安装库和工具集](quickstart-pkg-install_package.md)
- [获取源码](quickstart-pkg-sourcecode.md)
- [安装编译工具](quickstart-pkg-install_tool.md)
- 轻量系统(基于Hi3861开发板)
- [安装Hi3861开发板特有环境](quickstart-pkg-3861-tool.md)
- [编写“Hello World”程序](quickstart-pkg-3861-helloworld.md)
- [编译](quickstart-pkg-3861-build.md)
- [烧录](quickstart-pkg-3861-burn.md)
- [运行](quickstart-pkg-3861-running.md)
- 小型系统(基于Hi3516开发板)
- [编写“Hello World”程序](quickstart-pkg-3516-helloworld.md)
- [编译](quickstart-pkg-3516-build.md)
- [烧录](quickstart-pkg-3516-burn.md)
- [运行](quickstart-pkg-3516-running.md)
- 标准系统(基于RK3568开发板)
- [编写“Hello World”程序](quickstart-pkg-3568-helloworld.md)
- [编译](quickstart-pkg-3568-build.md)
- [烧录](quickstart-pkg-3568-burn.md)
- [运行](quickstart-pkg-3568-running.md)
- 常用信息
- [配置代理](quickstart-pkg-common-proxy.md)
- [使用build.sh脚本编译源码](quickstart-pkg-common-build.md)
- [hb安装异常处理](quickstart-pkg-common-hberr.md)
- [编译异常处理](quickstart-pkg-common-builderr.md)
- [烧录异常处理](quickstart-pkg-common-burnerr.md)
\ No newline at end of file
# Hi3516开发板介绍
## 开发板简介
Hi3516DV300作为新一代行业专用Smart HD IP摄像机SOC,集成新一代ISP(Image Signal Processor)、H.265视频压缩编码器以及高性能NNIE引擎,具备低码率、高画质、低功耗等特点,并具备强劲的智能处理和分析能力。
**图1** Hi3516单板正面外观图  
![zh-cn_image_0000001226922318](figures/zh-cn_image_0000001226922318.png)
## 开发板规格
**表1** Hi3516开发板规格清单
| 规格类型 | 规格清单 |
| -------- | -------- |
| **处理器及内部存储** | -&nbsp;Hi3516DV300芯片<br/>-&nbsp;DDR3&nbsp;1GB<br/>-&nbsp;eMMC4.5,8GB容量 |
| **外部器件** | -&nbsp;以太网口<br/>-&nbsp;音频视频<br/>&nbsp;&nbsp;-&nbsp;1路语音输入<br/>&nbsp;&nbsp;-&nbsp;1路单声道(AC_L)输出,接3W功放(LM4871)<br/>&nbsp;&nbsp;-&nbsp;MicroHDMI(1路HDMI&nbsp;1.4)<br/>-&nbsp;摄像头<br/>&nbsp;&nbsp;-&nbsp;传感器IMX335<br/>&nbsp;&nbsp;-&nbsp;镜头M12,焦距4mm,光圈1.8<br/>-&nbsp;显示屏<br/>&nbsp;&nbsp;-&nbsp;LCD连接器(2.35寸)<br/>&nbsp;&nbsp;-&nbsp;LCD连接器(5.5寸)<br/>-&nbsp;外部器件及接口<br/>&nbsp;&nbsp;-&nbsp;SD卡接口<br/>&nbsp;&nbsp;-&nbsp;JTAG/I2S接口<br/>&nbsp;&nbsp;-&nbsp;ADC接口<br/>&nbsp;&nbsp;-&nbsp;舵机接口<br/>&nbsp;&nbsp;-&nbsp;Grove连接器<br/>&nbsp;&nbsp;-&nbsp;USB2.0(Type&nbsp;C)<br/>&nbsp;&nbsp;-&nbsp;功能按键3个,2个用户自定义按键,1个升级按键<br/>&nbsp;&nbsp;-&nbsp;LED指示灯,绿灯,红灯 |
# RK3568开发板介绍
## 开发板简介
RK3568开发板基于Rockchip RK3568芯片,集成双核心架构GPU以及高效能NPU;搭载四核64位Cortex-A55处理器,采用22nm先进工艺,主频高达2.0GHz;支持蓝牙、Wi-Fi、音频、视频和摄像头等功能,拥有丰富的扩展接口,支持多种视频输入输出接口;配置双千兆自适应RJ45以太网口,可满足NVR、工业网关等多网口产品需求。
**图1** RK3568开发板正面
  
![zh-cn_image_0000001271442261](figures/zh-cn_image_0000001271442261.png)
**图2** RK3568开发板背面 
 
![zh-cn_image_0000001226602394](figures/zh-cn_image_0000001226602394.png)
## 开发板规格
**表1** RK3568开发板规格说明
| 规格类型 | 规格清单 |
| -------- | -------- |
| 显示接口 | -&nbsp;1×HDMI2.0(Type-A)接口,支持4K/60fps输出<br/>-&nbsp;2×MIPI接口,支1920\*1080\@60fps输出<br/>-&nbsp;1×eDP接口,支持2K\@60fps输出 |
| 音频接口 | -&nbsp;1×8ch&nbsp;I2S/TDM/PDM<br/>-&nbsp;1×HDMI音频输出<br/>-&nbsp;1×喇叭输出<br/>-&nbsp;1×耳机输出<br/>-&nbsp;1×麦克风,板载音频输入 |
| 以太网 | 2×GMAC(10/100/1000M) |
| 无线网络 | SDIO接口,支持WIFI6&nbsp;5G/2.5G,BT4.2 |
| 摄像头接口 | MIPI-CSI2,1x4-lane/2x2-lane\@2.5Gbps/lane |
| USB | -&nbsp;2×USB2.0&nbsp;Host,Type-A<br/>-&nbsp;1×USB3.0&nbsp;Host,Type-A<br/>-&nbsp;1×USB3.0&nbsp;OTG |
| PCIe | 1×2Lanes&nbsp;PCIe3.0&nbsp;Connector&nbsp;(RC&nbsp;Mode) |
| SATA | 1×SATA3.0&nbsp;Connector |
| SDMMC | 1×Micro&nbsp;SD&nbsp;Card3.0 |
| 按键 | -&nbsp;1×Vol+/Recovery<br/>-&nbsp;1×Reset<br/>-&nbsp;1×Power<br/>-&nbsp;1×Vol-<br/>-&nbsp;1×Mute |
| 调试 | 1×调试串口 |
| RTC | 1×RTC |
| IR | 1×IR |
| 三色灯 | 3×LED |
| G-sensor | 1×G-sensor |
| FAN | 1×Fan |
| 扩展接口 | 20Pin扩展接口包括:<br/>-&nbsp;2×ADC接口<br/>-&nbsp;2×I2C接口<br/>-&nbsp;7×GPIO口(或者3×gpio&nbsp;+&nbsp;4×uart信号)<br/>-&nbsp;3×VCC电源(12V、3.3V、5V) |
| 底板尺寸 | 180mm×130mm |
| PCB规格 | 4&nbsp;层板 |
# 搭建标准系统环境
## 系统要求
- Windows系统要求:Windows10 64位系统。
- Ubuntu系统要求:Ubuntu18.04~21.10版本,内存推荐16 GB及以上。
- Windows系统和Ubuntu系统的用户名不能包含中文字符。
- Windows和Ubuntu上安装的DevEco Device Tool为3.0 Release版本。
## 安装必要的库和工具
编译OpenHarmony需要一些库和工具,可以通过以下步骤进行安装。
相应操作在Ubuntu环境中进行。
1. 使用如下apt-get命令安装后续操作所需的库和工具:
```
sudo apt-get update && sudo apt-get install binutils binutils-dev git git-lfs gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib gcc-arm-linux-gnueabi libc6-dev-i386 libc6-dev-amd64 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip m4 bc gnutls-bin python3.8 python3-pip ruby genext2fs device-tree-compiler make libffi-dev e2fsprogs pkg-config perl openssl libssl-dev libelf-dev libdwarf-dev u-boot-tools mtd-utils cpio doxygen liblz4-tool openjdk-8-jre gcc g++ texinfo dosfstools mtools default-jre default-jdk libncurses5 apt-utils wget scons python3.8-distutils tar rsync git-core libxml2-dev lib32z-dev grsync xxd libglib2.0-dev libpixman-1-dev kmod jfsutils reiserfsprogs xfsprogs squashfs-tools pcmciautils quota ppp libtinfo-dev libtinfo5 libncurses5-dev libncursesw5 libstdc++6 gcc-arm-none-eabi vim ssh locales libxinerama-dev libxcursor-dev libxrandr-dev libxi-dev
```
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 以上安装命令适用于Ubuntu18.04,其他版本请根据安装包名称采用对应的安装命令。其中:
>
> - Python要求安装Python 3.8及以上版本,此处以Python 3.8为例。
>
> - Java要求java8及以上版本,此处以java8为例。
2. 将python 3.8设置为默认python版本。
查看python 3.8的位置:
```
which python3.8
```
将python和python3切换为python3.8:
```
sudo update-alternatives --install /usr/bin/python python {python3.8 路径} 1 #{python3.8 路径}为上一步查看的python3.8的位置
sudo update-alternatives --install /usr/bin/python3 python3 {python3.8 路径} 1 #{python3.8 路径}为上一步查看的python3.8的位置
```
## 安装DevEco Device Tool
通过Windows系统远程访问Ubuntu环境进行烧录等操作,需要先在Windows和Ubuntu下分别安装DevEco Device Tool。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> DevEco Device Tool是OpenHarmony的一站式开发工具,支持源码开发、编译、烧录,调测等,本文主要用其远端链接Ubuntu环境进行烧录和运行。
### 安装Window版本DevEco Device Tool
1. 下载[DevEco Device Tool 3.0 Release](https://device.harmonyos.com/cn/ide#download) Windows版。
2. 解压DevEco Device Tool压缩包,双击安装包程序,点击Next进行安装。
3. 设置DevEco Device Tool的安装路径,请注意安装路径不能包含中文字符,同时建议安装到非系统盘符,点击**Next**
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
>
> 如果您已安装DevEco Device Tool 3.0 Beta2及以前的版本,则在安装新版本时,会先卸载旧版本,卸载过程中出现如下错误提示时,请点击“Ignore”继续安装,该错误不影响新版本的安装。
>
> ![zh-cn_image_0000001239275843](figures/zh-cn_image_0000001239275843.png)
![zh-cn_image_0000001270076961](figures/zh-cn_image_0000001270076961.png)
4. 根据安装向导提示,勾选要自动安装的软件。
1. 在弹出VSCode installation confirm页面,勾选“Install VScode 1.62.2automatically”,点击**Next**
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 如果检测到Visual Studio Code已安装,且版本为1.62及以上,则会跳过该步骤。
![zh-cn_image_0000001237801283](figures/zh-cn_image_0000001237801283.png)
2. 在弹出的Python select page选择“Download from Huawei mirror”,点击**Next**
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 如果系统已安装可兼容的Python版本(Python 3.8~3.9版本),可选择“Use one of compatible on your PC”。
![zh-cn_image_0000001193983334](figures/zh-cn_image_0000001193983334.png)
5. 在以下界面点击**Next**
![zh-cn_image_0000001259180828](figures/zh-cn_image_0000001259180828.png)
6. 请详细阅读以下界面的用户协议和隐私声明,这里须勾选"I accept the licenses",然后点击Next,安装向导才会继续进行软件下载和安装。
![zh-cn_image_0000001307019009](figures/zh-cn_image_0000001307019009.png)
7. 继续等待DevEco Device Tool安装向导自动安装DevEco Device Tool插件,直至安装完成,点击**Finish**,关闭DevEco Device Tool安装向导。
![zh-cn_image_0000001239650137](figures/zh-cn_image_0000001239650137.png)
8. 打开Visual Studio Code,进入DevEco Device Tool工具界面。至此,DevEco Device Tool Windows开发环境安装完成。
![zh-cn_image_0000001225760456](figures/zh-cn_image_0000001225760456.png)
### 安装Ubuntu版本DevEco Device Tool
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 如果没有Ubuntu系统,可在Windows系统中通过虚拟机方式搭建Ubuntu系统,具体请参考[Ubuntu系统安装指导](https://developer.huawei.com/consumer/cn/training/course/video/C101639987816176315)。Ubuntu系统安装完成后,请根据指导完成[Ubuntu基础环境配置](https://developer.huawei.com/consumer/cn/training/course/video/C101639988048536240),然后再根据本章节进行DevEco Device Tool工具的安装。
1. 将Ubuntu Shell环境修改为bash。
1. 执行如下命令,确认输出结果为bash。如果输出结果不是bash,请根据步骤2,将Ubuntu shell修改为bash。
```
ls -l /bin/sh
```
![zh-cn_image_0000001226764302](figures/zh-cn_image_0000001226764302.png)
2. 打开终端工具,执行如下命令,输入密码,然后选择**No**,将Ubuntu shell由dash修改为bash。
```
sudo dpkg-reconfigure dash
```
![zh-cn_image_0000001243641075](figures/zh-cn_image_0000001243641075.png)
2. 下载[DevEco Device Tool 3.0 Release](https://device.harmonyos.com/cn/ide#download) Linux版本。
3. 解压DevEco Device Tool软件包并对解压后的文件夹进行赋权。
1. 进入DevEco Device Tool软件包目录,执行如下命令解压软件包,其中devicetool-linux-tool-3.0.0.401.zip为软件包名称,请根据实际进行修改。
```
unzip devicetool-linux-tool-3.0.0.401.zip
```
2. 进入解压后的文件夹,执行如下命令,赋予安装文件可执行权限,其中devicetool-linux-tool-3.0.0.401.sh请根据实际进行修改。
```
chmod u+x devicetool-linux-tool-3.0.0.401.sh
```
4. 执行如下命令,安装DevEco Device Tool,其中devicetool-linux-tool-3.0.0.401.sh请根据实际进行修改。
```
sudo ./devicetool-linux-tool-3.0.0.401.sh
```
5. 在用户协议和隐私声明签署界面,请详细阅读用户协议和隐私声明,需签署同意用户协议和隐私声明才能进行下一步的安装。
![zh-cn_image_0000001322167645.png](figures/zh-cn_image_0000001322167645.png)
安装完成后,当界面输出“DevEco Device Tool successfully installed.”时,表示DevEco Device Tool安装成功。
![zh-cn_image_0000001198722374](figures/zh-cn_image_0000001198722374.png)
## 配置Windows远程访问Ubuntu环境
### 安装SSH服务并获取远程访问的IP地址
1. 在Ubuntu系统中,打开终端工具,执行如下命令安装SSH服务。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
>
> 如果执行该命令失败,提示openssh-server和openssh-client依赖版本不同,请根据CLI界面提示信息,安装openssh-client相应版本后(例如:sudo apt-get install openssh-client=1:8.2p1-4),再重新执行该命令安装openssh-server。
```
sudo apt-get install openssh-server
```
2. 执行如下命令,启动SSH服务。
```
sudo systemctl start ssh
```
3. 执行如下命令,获取当前用户的IP地址,用于Windows系统远程访问Ubuntu环境。
```
ifconfig
```
![zh-cn_image_0000001215737140](figures/zh-cn_image_0000001215737140.png)
### 安装Remote SSH
1. 打开Windows系统下的Visual Studio Code,点击![zh-cn_image_0000001239080359](figures/zh-cn_image_0000001239080359.png),在插件市场的搜索输入框中输入“remote-ssh”。
![zh-cn_image_0000001193920448](figures/zh-cn_image_0000001193920448.png)
2. 点击Remote-SSH的**Install**按钮,安装Remote-SSH。安装成功后,在**INSTALLED**下可以看到已安装Remote-SSH。
![zh-cn_image_0000001238880335](figures/zh-cn_image_0000001238880335.png)
### 远程连接Ubuntu环境
1. 打开Windows系统的Visual Studio Code,点击![zh-cn_image_0000001238760373](figures/zh-cn_image_0000001238760373.png),在REMOTE EXPLORER页面点击+按钮。
![zh-cn_image_0000001215878922](figures/zh-cn_image_0000001215878922.png)
2. 在弹出的SSH连接命令输入框中输入“ssh _username_\@_ip_address_”,其中ip_address为要连接的远程计算机的IP地址,username为登录远程计算机的帐号。
![zh-cn_image_0000001215879750](figures/zh-cn_image_0000001215879750.png)
3. 在弹出的输入框中,选择SSH configuration文件,选择默认的第一选项即可。
![zh-cn_image_0000001260519729](figures/zh-cn_image_0000001260519729.png)
4. 在SSH TARGETS中,找到远程计算机,点击![zh-cn_image_0000001194080414](figures/zh-cn_image_0000001194080414.png),打开远程计算机。
![zh-cn_image_0000001215720398](figures/zh-cn_image_0000001215720398.png)
5. 在弹出的输入框中,选择**Linux**,然后在选择**Continue**,然后输入登录远程计算机的密码,连接远程计算机 。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
>
> 在Windows系统远程访问Ubuntu过程中,需要频繁的输入密码进行连接,为解决该问题,您可以使用SSH公钥来进行设置,设置方法请参考[注册远程访问Ubuntu环境的公钥](https://device.harmonyos.com/cn/docs/documentation/guide/ide-registering-public-key-0000001247162706)。
![zh-cn_image_0000001215897530](figures/zh-cn_image_0000001215897530.png)
连接成功后,等待在远程计算机.vscode-server文件夹下自动安装插件,安装完成后,根据界面提示在Windows系统下重新加载Visual Studio Code,便可以在Windows的DevEco Device Tool界面进行源码开发、编译、烧录等操作。
## 获取源码
在Ubuntu环境下通过以下步骤获取OpenHarmony源码。
### 准备工作
1. 注册码云gitee帐号。
2. 注册码云SSH公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191)
3. 安装git客户端和git-lfs。(上述工具已在安装必要的库和工具小节安装。如已安装,请忽略)
更新软件源:
```
sudo apt-get update
```
通过以下命令安装:
```
sudo apt-get install git git-lfs
```
4. 配置用户信息。
```
git config --global user.name "yourname"
git config --global user.email "your-email-address"
git config --global credential.helper store
```
5. 执行如下命令安装码云repo工具。
下述命令中的安装路径以"~/bin"为例,请用户自行创建所需目录。
```
mkdir ~/bin
curl https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 -o ~/bin/repo
chmod a+x ~/bin/repo
pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple requests
```
6. 将repo添加到环境变量。
```
vim ~/.bashrc # 编辑环境变量
export PATH=~/bin:$PATH # 在环境变量的最后添加一行repo路径信息
source ~/.bashrc # 应用环境变量
```
### 获取方式
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> Master主干为开发分支,开发者可通过Master主干获取最新特性。发布分支代码相对比较稳定,开发者可基于发布分支代码进行商用功能开发。
- **OpenHarmony主干代码获取**
方式一(推荐):通过repo + ssh下载(需注册公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191))。
```
repo init -u git@gitee.com:openharmony/manifest.git -b master --no-repo-verify
repo sync -c
repo forall -c 'git lfs pull'
```
方式二:通过repo + https下载。
```
repo init -u https://gitee.com/openharmony/manifest.git -b master --no-repo-verify
repo sync -c
repo forall -c 'git lfs pull'
```
- **OpenHarmony发布分支代码获取**
OpenHarmony各个版本发布分支的源码获取方式请参考[Release-Notes](../../release-notes/Readme.md)
### 执行prebuilts
在源码根目录下执行prebuilts脚本,安装编译器及二进制工具。
```
bash build/prebuilts_download.sh
```
## 安装编译工具
hb是OpenHarmony的编译工具,可通过以下步骤在Ubuntu下进行安装。想要详细了解OpenHarmony编译构建模块功能的开发者可参考[编译构建指导](../subsystems/subsys-build-all.md)
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 如需安装代理,请参考[配置代理](../quick-start/quickstart-standard-reference.md#配置代理)。
1. 运行如下命令安装hb并更新至最新版本
```
pip3 install --user build/lite
```
2. 设置环境变量
```
vim ~/.bashrc
```
将以下命令拷贝到.bashrc文件的最后一行,保存并退出。
```
export PATH=~/.local/bin:$PATH
```
执行如下命令更新环境变量。
```
source ~/.bashrc
```
3. 在源码目录执行"hb -h",界面打印以下信息即表示安装成功:
```
usage: hb
OHOS build system
positional arguments:
{build,set,env,clean}
build Build source code
set OHOS build settings
env Show OHOS build env
clean Clean output
optional arguments:
-h, --help show this help message and exit
```
> ![icon-notice.gif](public_sys-resources/icon-notice.gif) **须知:**
> - 可采用以下命令卸载hb:
>
> ```
> pip3 uninstall ohos-build
> ```
>
> - 若安装hb的过程中遇到问题,请参见下文[常见问题](../quick-start/quickstart-standard-faq-hb.md)进行解决。
# 烧录异常
## 烧写选择串口后提示“Error: Opening COMxx: Access denied”
- **现象描述**
点击烧写并选择串口后,出现Error: Opening COMxx: Access denied。
**图1** 打开串口失败图  
![zh-cn_image_0000001271202461](figures/zh-cn_image_0000001271202461.png)
- **可能原因**
串口已经被占用。
- **解决办法**
1. 按图依次选择下拉框,查找带有serial-xx的终端。
**图2** 查找是否存在占用串口的终端  
![zh-cn_image_0000001271202473](figures/zh-cn_image_0000001271202473.png)
2. 点击标号中的垃圾桶图标,关闭串口。
**图3** 关闭串口终端  
![zh-cn_image_0000001271202469](figures/zh-cn_image_0000001271202469.png)
3. 重新点击烧写,选择串口并开始烧写程序。
**图4** 重新启动烧写任务  
![zh-cn_image_0000001271562449](figures/zh-cn_image_0000001271562449.png)
## Windows电脑与单板网络连接失败
- **现象描述**
点击烧写并选择串口后,无法获取文件。
**图5** 网络不通,单板无法获取文件图  
![zh-cn_image_0000001226922306](figures/zh-cn_image_0000001226922306.png)
- **可能原因**
单板网络与Windows电脑不联通。
Windows电脑防火墙未允许Visual Studio Code联网。
- **解决方法**
1. 检查网线是否连接。
2. 点击Windows防火墙。
**图6** 网络防火墙设置图  
![zh-cn_image_0000001227082322](figures/zh-cn_image_0000001227082322.png)
3. 点击“允许应用通过防火墙”。
**图7** 防火墙和网络保护界面图  
![zh-cn_image_0000001271202457](figures/zh-cn_image_0000001271202457.png)
4. 查找Visual Studio Code应用。
**图8** 查找Visual Studio Code应用图  
![zh-cn_image_0000001271562445](figures/zh-cn_image_0000001271562445.png)
5. 勾选Visual Studio Code的专用和公用网络的访问权限。
**图9** 允许Visual Studio Code应用访问网络 
 
![zh-cn_image_0000001271442273](figures/zh-cn_image_0000001271442273.png)
## 烧写失败
- **现象描述**
点击烧写并选择串口后,出现无法烧写的情况。
- **可能原因**
安装IDE插件DevEco后未重启。
- **解决方法**
重启IDE。
# 编译异常
## Linux编译服务器终端输入不识别的命令时提示“ImportError: No module named apt_pkg”
- **现象描述**
Linux编译服务器终端输入不识别的命令时,提示"ImportError: No module named apt_pkg"
- **可能原因**
python3 apt安装兼容性问题。
- **解决办法**
执行如下命令重新安装python3-apt。
```
sudo apt-get remove python3-apt
sudo apt-get install python3-apt
```
## 编译构建过程中,提示找不到“python”
- **现象描述**
编译构建过程中出现以下错误:
```
-bash: /usr/bin/python: No such file or directory
```
- **可能原因**1
没有装python。
- **解决办法**
请使用如下命令安装Python,下方以Python3.8为例。
```
sudo apt-get install python3.8
```
- **可能原因2**
usr/bin目录下没有python软链接
![zh-cn_image_0000001226922322](figures/zh-cn_image_0000001226922322.png)
- **解决办法**
请运行以下命令添加软链接:
```
# cd /usr/bin/
# which python3
# ln -s /usr/local/bin/python3 python
# python --version
```
例:
![zh-cn_image_0000001271562453](figures/zh-cn_image_0000001271562453.png)
## 编译构建过程中,提示找不到“python3”
- **现象描述**
![zh-cn_image_0000001226602414](figures/zh-cn_image_0000001226602414.png)
- **可能原因**
没有装python3。
- **解决办法**
请使用如下命令安装Python3。
```
sudo apt-get install python3.8
```
## 安装python3过程中,提示“configure: error: no acceptable C compiler found in $PATH”
- **现象描述**
安装python3过程中出现以下错误:
```
configure: error: no acceptable C compiler found in $PATH. See 'config.log' for more details
```
- **可能原因**
环境中未安装“gcc”。
- **解决办法**
1. 通过命令“apt-get install gcc”在线安装。
2. 完成后,重新安装python3。
## 安装python3过程中,提示“-bash: make: command not found”
- **现象描述**
安装python3过程中出现以下错误:
```
-bash: make: command not found
```
- **可能原因**
环境中未安装“make”。
- **解决办法**
1. 通过命令“apt-get install make”在线安装。
2. 完成后,重新安装python3。
## 安装python3过程中,提示“No module named '_ctypes'”
- **现象描述**
安装python3过程中出现以下错误:
```
ModuleNotFoundError:No module named ‘_ctypes’
```
- **可能原因**
环境中未安装“libffi”和“libffi-devel”。
- **解决办法**
1. 通过命令“apt-get install libffi\* -y”,在线安装。
2. 完成后,重新安装python3。
## 编译构建过程中,提示“No module named 'Crypto'”
- **现象描述**
编译构建过程中出现以下错误:
```
ModuleNotFoundError: No module named 'Crypto'
```
- **可能原因**
环境中未安装“Crypto”。
- **解决办法**
方法1:通过命令“pip3 install Crypto”,在线安装。
方法2:离线安装。
通过网页[https://pypi.org/project/pycrypto/#files](https://pypi.org/project/pycrypto/#files),下载源码。
![zh-cn_image_0000001227082334](figures/zh-cn_image_0000001227082334.png)
将源码放置在Linux服务器中,解压,并安装“python3 setup.py install”。
完成上述安装后,重新构建。
# hb安装异常
## hb安装过程中出现乱码、段错误
- **现象描述**
执行“python3 -m pip install --user ohos-build”出现乱码、段错误(segmentation fault)。
- **可能原因**
pip版本过低。
- **解决办法**
执行如下命令升级pip。
```
python3 -m pip install -U pip
```
## hb安装过程中提示"cannot import 'sysconfig' from 'distutils'"
- **现象描述**
执行“python3 -m pip install --user ohos-build”提示"cannot import 'sysconfig' from 'distutils'"
- **可能原因**
缺少distutils模块。
- **解决办法**
执行如下命令安装。
```
sudo apt-get install python3.8-distutils
```
## hb安装过程中提示"module 'platform' has no attribute 'linux_distribution'"
- **现象描述**
执行“python3 -m pip install --user ohos-build”提示"module 'platform' has no attribute 'linux_distribution'"
- **可能原因**
python3 pip安装兼容性问题。
- **解决办法**
执行如下命令重新安装pip。
```
sudo apt remove python3-pip
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py
```
## hb安装过程中提示"Could not find a version that satisfies the requirement ohos-build"
- **现象描述**
执行“python3 -m pip install --user ohos-build”提示"Could not find a version that satisfies the requirement ohos-build"
- **可能原因**
可能是网络环境较差导致的安装失败。
- **解决办法**
1. 请检查网络连接是否正常。如果网络有问题,请修复网络问题后重新安装。
2. 若网络正常,请尝试指定临时pypi源的方式安装:
```
python3 -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple ohos-build
```
# 使用HiTool烧录代码
针对Hi3516DV300开发板,除了DevEco Device Tool外,还可以使用HiTool进行烧录。
## 前提条件
- 开发板相关源码已编译完成,已形成烧录文件。
- 客户端(操作平台,例如Windows系统)已下载并安装[HiTool工具](http://www.hihope.org/download/download.aspx)
- 客户端(操作平台,例如Windows系统)已安装USB驱动,可参考[Hi3516DV300/Hi3518EV300开发板USB驱动安装指导](https://device.harmonyos.com/cn/docs/documentation/guide/usb_driver-0000001058690393)
- 客户端已安装串口终端工具(例如IPOP)。
- 使用USB线缆、串口线缆连接客户端与开发板。
## 操作步骤
1. 准备烧录相关文件。
1. 在客户端新建用于保存烧录文件的文件夹,例如D:\L2。
2. 将编译完成的源码包下载至客户端并解压,将烧录相关文件拷贝至步骤1中新建的文件夹。
Hi3516DV300开发板烧写所需文件为:boot.img、Hi3516DV300-emmc.xml、system.img、u-boot-hi3516dv300_emmc.bin、uImage、updater.img、userdata.img、vendor.img。
2. 使用HiTool烧录。
1. 打开HiTool。
2. 设置HiTool参数。
传输方式选择USB口,烧写方式选择烧写eMMC(单板的存储介质为eMMC)。
3. 单击浏览在步骤1创建的文件夹中选择烧写配置文件(例如Hi3516DV300-emmc.xml)。
![zh-cn_image_0000001249937194](figures/zh-cn_image_0000001249937194.png)
4. 单击烧写后,按住开发板上串口旁的按钮(Update键),并拔插USB线(上下电)。
烧录开始后,可以在HiTool工具下方的控制台区域观察到烧录过程中的打印信息。
烧录完成后,HiTool弹出提示框显示烧写成功。
5. 单击确定。
3. 导入启动参数。
1. 使用终端工具打开串口。
2. 拔插开发板电源使其重启,3s内在串口终端输入回车。
终端界面中出现hisilicon \#表示已连接开发板串口。
3. 在串口终端拷贝如下启动参数后,按回车完成配置。
```
setenv bootargs 'mem=640M console=ttyAMA0,115200 mmz=anonymous,0,0xA8000000,384M clk_ignore_unused androidboot.selinux=permissive rootdelay=10 hardware=Hi3516DV300 init=/init root=/dev/ram0 rw blkdevparts=mmcblk0:1M(boot),15M(kernel),20M(updater),2M(misc),3307M(system),256M(vendor),-(userdata)';setenv bootcmd 'mmc read 0x0 0x82000000 0x800 0x4800; bootm 0x82000000'
saveenv
reset
```
> ![icon-notice.gif](public_sys-resources/icon-notice.gif) **须知:**
> 输入启动参数时,请勿自行删除其中的空行。
## 标准系统快速入门(IDE方式)
- [标准系统入门概述](quickstart-ide-standard-overview.md)
- 准备标准系统环境
- [搭建Windows+Ubuntu混合开发环境](quickstart-ide-standard-env-setup-win-ubuntu.md)
- [获取源码](quickstart-ide-standard-sourcecode-acquire.md)
- [导入源码工程](quickstart-ide-standard-create-project.md)
- 运行“Hello World”
- Hi3516开发板
- [编写“Hello World”程序](quickstart-ide-standard-running-hi3516-create.md)
- [编译](quickstart-ide-standard-running-hi3516-build.md)
- [烧录](quickstart-ide-standard-running-hi3516-burning.md)
- [运行](quickstart-ide-standard-running-hi3516-running.md)
- RK3568开发板
- [编写“Hello World”程序](quickstart-ide-standard-running-rk3568-create.md)
- [编译](quickstart-ide-standard-running-rk3568-build.md)
- [烧录](quickstart-ide-standard-running-rk3568-burning.md)
- [运行](quickstart-ide-standard-running-rk3568-running.md)
- 附录
- [Hi3516开发板介绍](quickstart-ide-standard-board-introduction-hi3516.md)
- [RK3568开发板介绍](quickstart-ide-standard-board-introduction-rk3568.md)
- [编译形态整体说明](quickstart-build.md)
\ No newline at end of file
# 标准系统入门概述
## 简介
OpenHarmony标准系统适用于参考内存≥128MiB的设备。通过本文,开发者可以快速熟悉OpenHarmony标准系统的环境搭建、编译、烧录、调测以及运行“Hello World”等。
考虑到开发者的开发习惯,OpenHarmony为开发者提供了以下两种入门指导:
- IDE方式:完全采用IDE(DevEco Device Tool)进行一站式开发,编译依赖工具的安装及编译、烧录、运行都通过IDE进行操作。
- 安装包方式:通过命令行进行编译依赖工具的下载安装,编译操作也通过命令实现。烧录、运行等操作使用IDE。
OpenHarmony还为开发者提供了[Docker环境](../get-code/gettools-acquire.md),在很大程度上简化了编译前的环境配置,习惯使用安装包方式的开发者也可以选择Docker环境进行编译 。
本文采用安装包方式进行介绍,习惯使用DevEco Device Tool的开发者可参考[标准系统快速入门(IDE方式)](../quick-start/quickstart-ide-standard-overview.md)
## 开发环境
推荐开发者采用Windows+Ubuntu环境进行OpenHarmony开发:
- Windows:用于源码开发、烧录等。
- Ubuntu:用于源码编译。
本文将介绍如何基于Windows+Ubuntu环境进行OpenHarmony的开发。
## 开发板
本文选取了两款典型开发板:Hi3516DV300、RK3516,并基于上述两款开发板进行开发介绍。开发板的具体外观和规格可参见[本文附录](../quick-start/quickstart-standard-board-introduction-hi3516.md),开发者可根据需要自行购买开发板。
## 开发流程
标准系统快速入门流程如下图所示。
**图1** 标准系统快速入门开发流程  
![zh-cn_image_0000001227082314](figures/zh-cn_image_0000001227082314.png)
## 标准系统快速入门(安装包方式)
- [标准系统入门概述](quickstart-standard-overview.md)
- [搭建标准系统环境](quickstart-standard-env-setup.md)
- 运行“Hello World”
- Hi3516开发板
- [编写“Hello World”程序](quickstart-std-3516-create.md)
- [编译](quickstart-standard-running-hi3516-build.md)
- [烧录](quickstart-standard-running-hi3516-burning.md)
- [运行](quickstart-standard-running-hi3516-running.md)
- RK3568开发板
- [编写“Hello World”程序](quickstart-standard-running-rk3568-create.md)
- [编译](quickstart-standard-running-rk3568-build.md)
- [烧录](quickstart-standard-running-rk3568-burning.md)
- [运行](quickstart-standard-running-rk3568-running.md)
- 常见问题
- [hb安装异常](quickstart-standard-faq-hb.md)
- [编译异常](quickstart-standard-faq-compose.md)
- [烧录异常](quickstart-standard-faq-burning.md)
- 附录
- 开发板介绍
- [Hi3516开发板介绍](quickstart-standard-board-introduction-hi3516.md)
- [RK3568开发板介绍](quickstart-standard-board-introduction-rk3568.md)
- [编译形态整体说明](quickstart-build.md)
- [参考信息](quickstart-standard-reference.md)
- [使用HiTool烧录代码](quickstart-standard-hitool.md)
\ No newline at end of file
# 编译
OpenHarmony支持hb和build.sh两种编译方式。此处介绍hb方式,build.sh脚本编译方式请参考[使用build.sh脚本编译源码](quickstart-standard-reference.md)
在Ubuntu环境下进入源码根目录,执行如下命令进行编译:
1. 设置编译路径。
```
hb set
```
2. 选择当前路径。
```
.
```
3. 在hisilicon下选择hispark_taurus_standard并回车。
**图1** Hi3516编译设置图例  
![zh-cn_image_0000001268278138](figures/zh-cn_image_0000001268278138.png)
4. 执行编译。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> - 单独编译一个部件(例如hello),可使用“hb build -T _目标名称_”进行编译。
>
> - 增量编译整个产品,可使用“hb build”进行编译。
>
> - 完整编译整个产品,可使用“hb build -f”进行编译。
>
> 此处以完整编译整个产品为例进行说明。
```
hb build -f
```
5. 编译结束后,出现“build success”字样,则证明构建成功。
> ![icon-notice.gif](public_sys-resources/icon-notice.gif) **须知:**
> 编译结果文件及编译日志文件获取路径:out/hi3516dv300。
# 烧录
烧录是指将编译后的程序文件下载到芯片开发板上的动作,为后续的程序调试提供基础。DevEco Device Tool提供一键烧录功能,操作简单,能快捷、高效的完成程序烧录,提升烧录的效率。
Hi3516DV300开发板小型系统的烧录方式包括USB烧录、网口烧录两种方式,本文采用USB方式进行烧录。
## 导入源码
在编译完成后,[保证Windows系统可以远程访问Ubuntu环境](quickstart-standard-env-setup.md)的情况下,您还需要通过以下步骤将编译好的源码导入DevEco Device Tool,方可进行烧录。
1. 打开DevEco Device Tool,进入Home页,点击**Import Project**打开工程。
![zh-cn_image_0000001278358765](figures/zh-cn_image_0000001278358765.png)
2. 选择OpenHarmony源码根目录路径(需要访问Ubuntu下的源码目录),然后再选择**Import OpenHarmony Source**选项,点击**Import**进行导入。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 工程存储路径不能包含中文字符、空格。
![zh-cn_image_0000001271477045](figures/zh-cn_image_0000001271477045.png)
3. 在Import Project界面,选择**Product**后,会自动填充对应的SOC、Board、Company和Kernel信息,然后**Ohos Ver**选择对应的OpenHarmony源码版本。
![zh-cn_image_0000001279426717](figures/zh-cn_image_0000001279426717.png)
4. 点击**Open**打开工程或源码。
## 烧录
完成源码导入后,通过以下步骤进行烧录:
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 使用USB烧录方式,在DevEco Device Tool 2.2 Beta2及更高版本中支持。
1. 请连接好电脑和待烧录开发板,需要连接USB口和串口,具体可参考[Hi3516DV300开发板介绍](quickstart-lite-introduction-hi3516.md)
2. 根据[Hi3516DV300/Hi3518EV300开发板串口驱动安装指导](https://gitee.com/link?target=https%3A%2F%2Fdevice.harmonyos.com%2Fcn%2Fdocs%2Fdocumentation%2Fguide%2Fhi3516_hi3518-drivers-0000001050743695)[Hi3516DV300/Hi3518EV300开发板USB驱动安装指导](https://device.harmonyos.com/cn/docs/documentation/guide/usb_driver-0000001058690393)安装USB驱动及USB转串口的驱动。若您的设备中已安装此驱动,请忽略该步骤。
3. 在DevEco Device Tool中,选择REMOTE DEVELOPMENT &gt; Local PC,查看远程计算机(Ubuntu开发环境)与本地计算机(Windows开发环境)的连接状态。
- 如果Local PC右边连接按钮为![zh-cn_image_0000001261315939](figures/zh-cn_image_0000001261315939.png),则远程计算机与本地计算机为已连接状态,不需要执行其他操作。
- 如果Local PC右边连接按钮为![zh-cn_image_0000001261515989](figures/zh-cn_image_0000001261515989.png),则点击绿色按钮进行连接。连接时DevEco Device Tool会重启服务,因此请不要在下载源码或源码编译过程中进行连接,否则会中断任务。
![zh-cn_image_0000001261395999](figures/zh-cn_image_0000001261395999.png)
4. 在菜单栏中点击**Project Settings**按钮,进入Hi3516DV300工程配置界面。
![zh-cn_image_0000001198566364](figures/zh-cn_image_0000001198566364.png)
5. 在“Tool Chain”页签,设置Uploader烧录器工具,可以通过Tool Chain页签中的Install按钮在线安装。
![zh-cn_image_0000001198566365](figures/zh-cn_image_0000001198566365.png)
6. 在“hi3516dv300”页签,设置烧录选项,包括upload_partitions、upload_port和upload_protocol。
- upload_partitions:选择待烧录程序的配置文件(已预置默认的配置文件),该配置文件会指定烧录文件名称、起始烧录地址、地址长度等信息;同时请勾选**Enable to use upload_partitions_profile for upload**选项。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
>
> 如需修改烧录profile文件,在设置烧录分区起始地址和分区长度时,应根据实际待烧录文件的大小进行设置,要求设置的烧录分区大小,要大于待烧录文件的大小;同时,各烧录文件的分区地址设置不能出现重叠。
>
> 首次烧录,请勾选**Enable to use upload_partitions_profile for upload**选项,会自动生成upload_partitions文件。再次烧录时,可根据实际情况选择生成upload_partitions文件进行自定义烧录,也可以再勾选**Enable to use upload_partitions_profile for upload**选项,使用upload_partitions_profile重新生成upload_partitions文件用于烧录。
- upload_protocol:选择烧录协议,固定选择“hiburn-usb”。
- upload_port:选择已查询的串口号。
![zh-cn_image_0000001177478136](figures/zh-cn_image_0000001177478136.png)
7. 所有的配置都修改完成后,在工程配置页签的顶部,点击**Save**进行保存。
8. 点击hi3516dv300下的**Upload**按钮。
![zh-cn_image_0000001267532292](figures/zh-cn_image_0000001267532292.png)
此时待烧录文件会从Ubuntu系统传输到Windows下,传输完成后界面显示“Operation paused, Please press Enter key to continue”时,请点击**Enter**键启动烧录。
![zh-cn_image_0000001114129427](figures/zh-cn_image_0000001114129427.png)
9. 在终端窗口显示如下提示信息时,请在15秒内,按住Update键,插拔USB线,最后松开Update键启动烧录。
![zh-cn_image_0000001326412233.png](figures/zh-cn_image_0000001326412233.png)
启动烧录后,界面提示**SUCCESS**信息时,表示烧录成功。
![zh-cn_image_0000001160649344](figures/zh-cn_image_0000001160649344.png)
10. 烧录成功后,请根据运行章节进行操作,启动系统。
\ No newline at end of file
# 运行
## 启动系统
烧录完成后在Windows下通过以下步骤启动系统:
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 初次烧写标准系统,需要完成以下配置,后续烧写或者启动,可以跳过以下操作。
1. 在DevEco Device Tool中,点击Monitor,打开串口工具。
![zh-cn_image_0000001226762374](figures/zh-cn_image_0000001226762374.png)
2. 重启开发板,在倒计时结束前,按任意键进入系统。
![zh-cn_image_0000001271442265](figures/zh-cn_image_0000001271442265.gif)
3. 通过以下两条命令设置启动参数。
```
setenv bootargs 'mem=640M console=ttyAMA0,115200 mmz=anonymous,0,0xA8000000,384M clk_ignore_unused rootdelay=10 hardware=Hi3516DV300 init=/init root=/dev/ram0 rw blkdevparts=mmcblk0:1M(boot),15M(kernel),20M(updater),2M(misc),3307M(system),256M(vendor),-(userdata)';
```
```
setenv bootcmd 'mmc read 0x0 0x82000000 0x800 0x4800; bootm 0x82000000'
```
![zh-cn_image_0000001271322437](figures/zh-cn_image_0000001271322437.png)
4. 保存参数设置。
```
save
```
![zh-cn_image_0000001271562437](figures/zh-cn_image_0000001271562437.png)
5. 重启开发板,完成系统启动。
```
reset
```
![zh-cn_image_0000001226762378](figures/zh-cn_image_0000001226762378.png)
## 运行“Hello World”
设备启动后打开串口工具,在任意目录下输入命令helloworld后回车,界面打印“Hello World!”,程序运行成功。
![zh-cn_image_0000001226602398](figures/zh-cn_image_0000001226602398.png)
## 下一步
恭喜!您已经完成了OpenHarmony标准系统的快速入门,接下来可[开发一个小示例](../guide/device-clock-guide.md),进一步熟悉OpenHarmony的开发。
# 烧录
烧录是指将编译后的程序文件下载到芯片开发板上的动作,为后续的程序调试提供基础。DevEco Device Tool提供一键烧录功能,操作简单,能快捷、高效的完成程序烧录,提升烧录的效率。
RK3568的镜像烧录通过Windows环境进行烧录。
## 导入源码
在编译完成后,[保证Windows系统可以远程访问Ubuntu环境](quickstart-standard-env-setup.md)的情况下,您还需要通过以下步骤将编译好的源码导入DevEco Device Tool,方可进行烧录。
1. 打开DevEco Device Tool,进入Home页,点击**Import Project**打开工程。
![zh-cn_image_0000001278358765](figures/zh-cn_image_0000001278358765.png)
2. 选择OpenHarmony源码根目录路径(需要访问Ubuntu下的源码目录),然后再选择**Import OpenHarmony Source**选项,点击**Import**进行导入。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 工程存储路径不能包含中文字符、空格。
![zh-cn_image_0000001271477045](figures/zh-cn_image_0000001271477045.png)
3. 在Import Project界面,选择**Product**后,会自动填充对应的SOC、Board、Company和Kernel信息,然后**Ohos Ver**选择对应的OpenHarmony源码版本。
![zh-cn_image_0000001279587085](figures/zh-cn_image_0000001279587085.png)
4. 点击**Open**打开工程或源码。
## 烧录
完成源码导入后,通过以下步骤进行烧录:
1. [下载](https://gitee.com/hihope_iot/docs/blob/master/HiHope_DAYU200/%E7%83%A7%E5%86%99%E5%B7%A5%E5%85%B7%E5%8F%8A%E6%8C%87%E5%8D%97/windows/DriverAssitant_v5.1.1.zip)并安装驱动DriverInstall.exe。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
>
> 如果已经安装旧版本的烧写工具,请先点击"驱动卸载"按钮卸载驱动,然后再点击"驱动安装"按钮安装驱动。
2. 请连接好电脑和待烧录开发板,连接USB接口,具体可参考[RK3568开发板介绍](quickstart-standard-board-introduction-rk3568.md)
3. 在DevEco Device Tool中,选择REMOTE DEVELOPMENT &gt; Local PC,查看远程计算机(Ubuntu开发环境)与本地计算机(Windows开发环境)的连接状态。
- 如果Local PC右边连接按钮为![zh-cn_image_0000001261315939](figures/zh-cn_image_0000001261315939.png),则远程计算机与本地计算机为已连接状态,不需要执行其他操作。
- 如果Local PC右边连接按钮为![zh-cn_image_0000001261515989](figures/zh-cn_image_0000001261515989.png),则点击绿色按钮进行连接。连接时DevEco Device Tool会重启服务,因此请不要在下载源码或源码编译过程中进行连接,否则会中断任务。
![zh-cn_image_0000001261395999](figures/zh-cn_image_0000001261395999.png)
4. 在菜单栏中点击**Project Settings**按钮,进入RK3568工程配置界面。
![zh-cn_image_0000001198566364](figures/zh-cn_image_0000001198566364.png)
5. 在“Tool Chain”页签,设置Uploader烧录器工具,可以通过Tool Chain页签中的Install按钮在线安装。
![zh-cn_image_0000001239661509](figures/zh-cn_image_0000001239661509.png)
6. 在“hh_scdy200”页签,设置烧录选项,包括upload_partitions和upload_protocol。
- upload_partitions_profile:选择待烧录程序的配置文件,该配置文件会指定烧录文件名称、起始烧录地址、地址长度等信息;同时请勾选**Enable to use upload_partitions_profile for upload**选项。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
>
> 如需修改烧录profile文件,在设置烧录分区起始地址和分区长度时,应根据实际待烧录文件的大小进行设置,要求设置的烧录分区大小,要大于待烧录文件的大小;同时,各烧录文件的分区地址设置不能出现重叠。
>
> 首次烧录,请勾选**Enable to use upload_partitions_profile for upload**选项,会自动生成upload_partitions文件。再次烧录时,可根据实际情况选择生成upload_partitions文件进行自定义烧录,也可以再勾选**Enable to use upload_partitions_profile for upload**选项,使用upload_partitions_profile重新生成upload_partitions文件用于烧录。
- upload_protocol:选择烧录协议,固定选择“upgrade”。
![zh-cn_image_0000001194504874](figures/zh-cn_image_0000001194504874.png)
7. 所有的配置都修改完成后,在工程配置页签的顶部,点击**Save**进行保存。
8. 在“PROJECT TASKS”中,点击hh_scdy200下的**Upload**按钮启动烧录。
![zh-cn_image_0000001194821710](figures/zh-cn_image_0000001194821710.png)
9. 当屏幕提示“Operation paused,Please press Enter key to continue”,请按回车键继续。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
>
> 如果开发板未处于烧录模式,屏幕会提示“The board is not in Loader mode.Please Hold on the VOL+key...”,此时,请长按音量+键,3秒后点击RESET键,然后再过3秒放开音量+键,使开发板进入烧录模式。
等待开发板烧录完成,当屏幕提示如下信息时,表示烧录成功。
![zh-cn_image_0000001194984912](figures/zh-cn_image_0000001194984912.png)
# 编写“Hello World”程序
下方将展示如何在单板上运行第一个应用程序,其中包括新建应用程序、编译、烧写、运行等步骤,最终输出“Hello World!”。
## 示例目录
示例完整目录如下。
```
applications/sample/hello
│ │── BUILD.gn
│ │── include
│ │ └── helloworld.h
│ │── src
│ │ └── helloworld.c
│ └── bundle.json
build
└── subsystem_config.json
vendor/hihope
└── rk3568
└── config.json
```
## 开发步骤
请在源码目录中通过以下步骤创建“Hello World”应用程序:
1. 创建目录,编写业务代码。
新建applications/sample/hello/src/helloworld.c目录及文件,代码如下所示,用户可以自定义修改打印内容(例如:修改World为OH)。其中helloworld.h包含字符串打印函数HelloPrint的声明。当前应用程序可支持标准C及C++的代码开发。
```
#include <stdio.h>
#include "helloworld.h"
int main(int argc, char **argv)
{
HelloPrint();
return 0;
}
void HelloPrint()
{
printf("\n\n");
printf("\n\t\tHello World!\n");
printf("\n\n");
}
```
再添加头文件applications/sample/hello/include/helloworld.h,代码如下所示。
```
#ifndef HELLOWORLD_H
#define HELLOWORLD_H
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif
#endif
void HelloPrint();
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif
#endif // HELLOWORLD_H
```
2. 新建编译组织文件。
1. 新建applications/sample/hello/BUILD.gn文件,内容如下所示:
```
import("//build/ohos.gni") # 导入编译模板
ohos_executable("helloworld") { # 可执行模块
sources = [ # 模块源码
"src/helloworld.c"
]
include_dirs = [ # 模块依赖头文件目录
"include"
]
cflags = []
cflags_c = []
cflags_cc = []
ldflags = []
configs = []
deps =[] # 部件内部依赖
part_name = "hello" # 所属部件名称,必选
install_enable = true # 是否默认安装(缺省默认不安装),可选
}
```
2. 新建applications/sample/hello/bundle.json文件,添加sample部件描述,内容如下所示。
```
{
"name": "@ohos/hello",
"description": "Hello world example.",
"version": "3.1",
"license": "Apache License 2.0",
"publishAs": "code-segment",
"segment": {
"destPath": "applications/sample/hello"
},
"dirs": {},
"scripts": {},
"component": {
"name": "hello",
"subsystem": "sample",
"syscap": [],
"features": [],
"adapted_system_type": [ "mini", "small", "standard" ],
"rom": "10KB",
"ram": "10KB",
"deps": {
"components": [],
"third_party": []
},
"build": {
"sub_component": [
"//applications/sample/hello:helloworld"
],
"inner_kits": [],
"test": []
}
}
}
```
bundle.json文件包含两个部分,第一部分描述该部件所属子系统的信息,第二部分component则定义该部件构建相关配置。添加的时候需要指明该部件包含的模块sub_component,假如有提供给其它部件的接口,需要在inner_kits中说明,假如有测试用例,需要在test中说明,inner_kits与test没有也可以不添加。
3. 修改子系统配置文件。
在build/subsystem_config.json中添加新建的子系统的配置。
```
"sample": {
"path": "applications/sample/hello",
"name": "sample"
},
```
4. 修改产品配置文件。
在vendor/hihope/rk3568/config.json中添加对应的hello部件,直接添加到原有部件后即可。
```
"usb:usb_manager_native":{},
"applications:prebuilt_hap":{},
"sample:hello":{},
"wpa_supplicant-2.9:wpa_supplicant-2.9":{},
```
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册