未验证 提交 67395d28 编写于 作者: O openharmony_ci 提交者: Gitee

!2975 调整格式

Merge pull request !2975 from duangavin123/OpenHarmony-3.1-Release
...@@ -40,9 +40,6 @@ ...@@ -40,9 +40,6 @@
- [烧录](quickstart-ide-standard-running-rk3568-burning.md) - [烧录](quickstart-ide-standard-running-rk3568-burning.md)
- [运行](quickstart-ide-standard-running-rk3568-running.md) - [运行](quickstart-ide-standard-running-rk3568-running.md)
- 附录 - 附录
- 快速入门(安装包方式)
- [轻量和小型系统快速入门(安装包方式)](quickstart-docker-lite.md)
- [标准系统快速入门(安装包方式)](quickstart-standard-docker.md)
- 开发板介绍 - 开发板介绍
- [Hi3516开发板介绍](quickstart-ide-standard-board-introduction-hi3516.md) - [Hi3516开发板介绍](quickstart-ide-standard-board-introduction-hi3516.md)
- [RK3568开发板介绍](quickstart-ide-standard-board-introduction-rk3568.md) - [RK3568开发板介绍](quickstart-ide-standard-board-introduction-rk3568.md)
# 轻量和小型系统快速入门-安装包 # 轻量和小型系统快速入门(安装包方式)
......
...@@ -21,9 +21,9 @@ ...@@ -21,9 +21,9 @@
5. 在Import Project界面,选择**Product**后,会自动填充对应的MCU、Board、company和kernel信息,然后**ohosVersion**选择对应的OpenHarmony源码版本。下图以导入wifiiot_hispark_pegasus为例进行说明。 5. 在Import Project界面,选择**Product**后,会自动填充对应的MCU、Board、company和kernel信息,然后**ohosVersion**选择对应的OpenHarmony源码版本。下图以导入wifiiot_hispark_pegasus为例进行说明。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** > ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> Hi3861开发板Product选择“wifiiot_hispark_pegasus”。 > - Hi3861开发板Product选择“wifiiot_hispark_pegasus”。
> >
> Hi3516DV300开发板Product选择“ipcamera_hispark_taurus”。 > - Hi3516DV300开发板Product选择“ipcamera_hispark_taurus”。
![zh-cn_image_0000001271237241](figures/zh-cn_image_0000001271237241.png) ![zh-cn_image_0000001271237241](figures/zh-cn_image_0000001271237241.png)
......
...@@ -58,7 +58,7 @@ ...@@ -58,7 +58,7 @@
``` ```
sudo ./devicetool-linux-tool-3.0.0.300.sh sudo ./devicetool-linux-tool-3.0.0.400.sh
``` ```
安装完成后,当界面输出“Deveco Device Tool successfully installed.”时,表示DevEco Device Tool安装成功。 安装完成后,当界面输出“Deveco Device Tool successfully installed.”时,表示DevEco Device Tool安装成功。
......
...@@ -12,7 +12,7 @@ OpenHarmony轻量和小型系统适用于内存较小的IOT设备(参考内存 ...@@ -12,7 +12,7 @@ OpenHarmony轻量和小型系统适用于内存较小的IOT设备(参考内存
- 安装包方式:通过命令行进行编译依赖工具的下载安装,编译操作也通过命令实现。烧录、运行等操作使用IDE。 - 安装包方式:通过命令行进行编译依赖工具的下载安装,编译操作也通过命令实现。烧录、运行等操作使用IDE。
OpenHarmony还为开发者提供了[Docker环境](../get-code/gettools-acquire.md),在很大程度上简化了编译前的环境配置,习惯使用安装包方式的开发者也可以选择Docker环境进行编译 。 OpenHarmony还为开发者提供了[Docker环境](../get-code/gettools-acquire.md),在很大程度上简化了编译前的环境配置,习惯使用安装包方式的开发者也可以选择Docker环境进行编译 。
本文采用Deveco Device Tool进行一站式开发介绍,习惯使用命令行的开发者可参考[轻量和小型系统快速入门(安装包方式)](../quick-start/quickstart-docker-lite.md) 本文采用Deveco Device Tool进行一站式开发介绍,习惯使用命令行的开发者可参考[轻量和小型系统快速入门(安装包方式)](../quick-start/quickstart-lite-package-directory.md)
## 开发环境 ## 开发环境
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
2. 注册码云SSH公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191) 2. 注册码云SSH公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191)
3. 安装git客户端和git-lfs。(上述工具已在搭建环境章节安装。如已安装,请忽略) 3. 安装git客户端和git-lfs。
更新软件源: 更新软件源:
...@@ -47,6 +47,7 @@ ...@@ -47,6 +47,7 @@
> Master主干为开发分支,开发者可通过Master主干获取最新特性。发布分支代码相对比较稳定,开发者可基于发布分支代码进行商用功能开发。 > Master主干为开发分支,开发者可通过Master主干获取最新特性。发布分支代码相对比较稳定,开发者可基于发布分支代码进行商用功能开发。
- **OpenHarmony主干代码获取** - **OpenHarmony主干代码获取**
方式一(推荐):通过repo + ssh下载(需注册公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191))。 方式一(推荐):通过repo + ssh下载(需注册公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191))。
``` ```
...@@ -65,10 +66,11 @@ ...@@ -65,10 +66,11 @@
``` ```
- **OpenHarmony发布分支代码获取** - **OpenHarmony发布分支代码获取**
OpenHarmony各个版本发布分支的源码获取方式请参考[Release-Notes](../../release-notes/Readme.md) OpenHarmony各个版本发布分支的源码获取方式请参考[Release-Notes](../../release-notes/Readme.md)
### 执行prebuilts ## 执行prebuilts
在源码根目录下执行prebuilts脚本,安装编译器及二进制工具。 在源码根目录下执行prebuilts脚本,安装编译器及二进制工具。
......
...@@ -23,6 +23,7 @@ applications/sample/hello ...@@ -23,6 +23,7 @@ applications/sample/hello
请在源码目录中通过以下步骤创建“Hello World”应用程序: 请在源码目录中通过以下步骤创建“Hello World”应用程序:
1. 新建目录及源码。 1. 新建目录及源码。
新建**applications/sample/hello/src/helloworld.c**目录及文件,代码如下所示,用户可以自定义修改打印内容(例如:修改OHOS为World)。当前应用程序可支持标准C及C++的代码开发。 新建**applications/sample/hello/src/helloworld.c**目录及文件,代码如下所示,用户可以自定义修改打印内容(例如:修改OHOS为World)。当前应用程序可支持标准C及C++的代码开发。
...@@ -40,6 +41,7 @@ applications/sample/hello ...@@ -40,6 +41,7 @@ applications/sample/hello
``` ```
2. 新建编译组织文件。 2. 新建编译组织文件。
新建**applications/sample/hello/BUILD.gn**文件,内容如下所示: 新建**applications/sample/hello/BUILD.gn**文件,内容如下所示:
...@@ -55,6 +57,7 @@ applications/sample/hello ...@@ -55,6 +57,7 @@ applications/sample/hello
``` ```
3. 添加新组件。 3. 添加新组件。
修改文件**build/lite/components/applications.json**,添加组件hello_world_app的配置,如下所示为applications.json文件片段,"\#\#start\#\#"和"\#\#end\#\#"之间为新增配置("\#\#start\#\#"和"\#\#end\#\#"仅用来标识位置,添加完配置后删除这两行): 修改文件**build/lite/components/applications.json**,添加组件hello_world_app的配置,如下所示为applications.json文件片段,"\#\#start\#\#"和"\#\#end\#\#"之间为新增配置("\#\#start\#\#"和"\#\#end\#\#"仅用来标识位置,添加完配置后删除这两行):
...@@ -117,6 +120,7 @@ applications/sample/hello ...@@ -117,6 +120,7 @@ applications/sample/hello
``` ```
4. 修改单板配置文件。 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\#\#"仅用来标识位置,添加完配置后删除这两行):
......
...@@ -12,12 +12,15 @@ ...@@ -12,12 +12,15 @@
![zh-cn_image_0000001226794644](figures/zh-cn_image_0000001226794644.png) ![zh-cn_image_0000001226794644](figures/zh-cn_image_0000001226794644.png)
2. 提示如下图中的重启开发板的提示信息时,重启开发板,然后在控制台输出“SUCCESS”表示设置成功。 2. 提示如下图中的重启开发板的提示信息时,重启开发板,然后在控制台输出“SUCCESS”表示设置成功。
![zh-cn_image_0000001227114584](figures/zh-cn_image_0000001227114584.png) ![zh-cn_image_0000001227114584](figures/zh-cn_image_0000001227114584.png)
3. 在任务栏点击**Monitor**按钮,启动串口工具。 3. 在任务栏点击**Monitor**按钮,启动串口工具。
![zh-cn_image_0000001271234705](figures/zh-cn_image_0000001271234705.png) ![zh-cn_image_0000001271234705](figures/zh-cn_image_0000001271234705.png)
4. 当界面打印回显信息,点击Enter按钮,直到界面显示OHOS \#信息,表示系统启动成功。 4. 当界面打印回显信息,点击Enter按钮,直到界面显示OHOS \#信息,表示系统启动成功。
![zh-cn_image_0000001271594709](figures/zh-cn_image_0000001271594709.png) ![zh-cn_image_0000001271594709](figures/zh-cn_image_0000001271594709.png)
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
1. 确定目录结构。 1. 确定目录结构。
开发者编写业务时,务必先在./applications/sample/wifi-iot/app路径下新建一个目录(或一套目录结构),用于存放业务源码文件。 开发者编写业务时,务必先在./applications/sample/wifi-iot/app路径下新建一个目录(或一套目录结构),用于存放业务源码文件。
例如:在app下新增业务my_first_app,其中hello_world.c为业务代码,BUILD.gn为编译脚本,具体规划目录结构如下: 例如:在app下新增业务my_first_app,其中hello_world.c为业务代码,BUILD.gn为编译脚本,具体规划目录结构如下:
...@@ -22,6 +23,7 @@ ...@@ -22,6 +23,7 @@
``` ```
2. 编写业务代码。 2. 编写业务代码。
新建./applications/sample/wifi-iot/app/my_first_app下的hello_world.c文件,在hello_world.c中新建业务入口函数HelloWorld,并实现业务逻辑。并在代码最下方,使用OpenHarmony启动恢复模块接口SYS_RUN()启动业务。(SYS_RUN定义在ohos_init.h文件中) 新建./applications/sample/wifi-iot/app/my_first_app下的hello_world.c文件,在hello_world.c中新建业务入口函数HelloWorld,并实现业务逻辑。并在代码最下方,使用OpenHarmony启动恢复模块接口SYS_RUN()启动业务。(SYS_RUN定义在ohos_init.h文件中)
``` ```
...@@ -37,6 +39,7 @@ ...@@ -37,6 +39,7 @@
``` ```
3. 编写用于将业务构建成静态库的BUILD.gn文件。 3. 编写用于将业务构建成静态库的BUILD.gn文件。
新建./applications/sample/wifi-iot/app/my_first_app下的BUILD.gn文件,并完成如下配置。 新建./applications/sample/wifi-iot/app/my_first_app下的BUILD.gn文件,并完成如下配置。
如步骤1所述,BUILD.gn文件由三部分内容(目标、源文件、头文件路径)构成,需由开发者完成填写。 如步骤1所述,BUILD.gn文件由三部分内容(目标、源文件、头文件路径)构成,需由开发者完成填写。
...@@ -58,6 +61,7 @@ ...@@ -58,6 +61,7 @@
- include_dirs中指定source所需要依赖的.h文件路径。 - include_dirs中指定source所需要依赖的.h文件路径。
4. 添加新组件。 4. 添加新组件。
修改文件**build/lite/components/applications.json**,添加组件hello_world_app的配置,如下所示为applications.json文件片段,"\#\#start\#\#"和"\#\#end\#\#"之间为新增配置("\#\#start\#\#"和"\#\#end\#\#"仅用来标识位置,添加完配置后删除这两行): 修改文件**build/lite/components/applications.json**,添加组件hello_world_app的配置,如下所示为applications.json文件片段,"\#\#start\#\#"和"\#\#end\#\#"之间为新增配置("\#\#start\#\#"和"\#\#end\#\#"仅用来标识位置,添加完配置后删除这两行):
...@@ -120,6 +124,7 @@ ...@@ -120,6 +124,7 @@
``` ```
5. 修改单板配置文件。 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\#\#"仅用来标识位置,添加完配置后删除这两行):
......
...@@ -5,11 +5,15 @@ ...@@ -5,11 +5,15 @@
1. 保持Windows工作台和Hi3861 WLAN模组的连接状态,在DevEco工具最下方,点击“DevEco:Serial Monitor”按钮。 1. 保持Windows工作台和Hi3861 WLAN模组的连接状态,在DevEco工具最下方,点击“DevEco:Serial Monitor”按钮。
**图1** 打开DevEco串口终端示意图 **图1** 打开DevEco串口终端示意图
![zh-cn_image_0000001226634700](figures/zh-cn_image_0000001226634700.png) ![zh-cn_image_0000001226634700](figures/zh-cn_image_0000001226634700.png)
2. 复位Hi3861 WLAN模组,终端界面显示“ready to OS start”,则启动成功。 2. 复位Hi3861 WLAN模组,终端界面显示“ready to OS start”,则启动成功。
**图2** Hi3861 WLAN模组复位成功示意图 **图2** Hi3861 WLAN模组复位成功示意图
![zh-cn_image_0000001271594733](figures/zh-cn_image_0000001271594733.png) ![zh-cn_image_0000001271594733](figures/zh-cn_image_0000001271594733.png)
3. 在DevEco的串口终端中,依次执行如下AT命令,启动STA模式,连接指定AP热点,并开启DHCP功能。 3. 在DevEco的串口终端中,依次执行如下AT命令,启动STA模式,连接指定AP热点,并开启DHCP功能。
...@@ -31,4 +35,5 @@ ...@@ -31,4 +35,5 @@
``` ```
**图3** Hi3861 WLAN模组联网成功示意图 **图3** Hi3861 WLAN模组联网成功示意图
![zh-cn_image_0000001227114612](figures/zh-cn_image_0000001227114612.png) ![zh-cn_image_0000001227114612](figures/zh-cn_image_0000001227114612.png)
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
Hi3516DV300是新一代行业专用Smart HD IP摄像机SOC,集成新一代ISP(Image Signal Processor)、H.265视频压缩编码器、高性能NNIE引擎,在低码率、高画质、智能处理和分析、低功耗等方面引领行业水平。 Hi3516DV300是新一代行业专用Smart HD IP摄像机SOC,集成新一代ISP(Image Signal Processor)、H.265视频压缩编码器、高性能NNIE引擎,在低码率、高画质、智能处理和分析、低功耗等方面引领行业水平。
**图1** Hi3516单板正面外观图 **图1** Hi3516单板正面外观图
![zh-cn_image_0000001227082182](figures/zh-cn_image_0000001227082182.png) ![zh-cn_image_0000001227082182](figures/zh-cn_image_0000001227082182.png)
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
RK3568开发板基于Rockchip RK3568芯片,集成双核心架构GPU以及高效能NPU;搭载四核64位Cortex-A55处理器,采用22nm先进工艺,主频高达2.0GHz;支持蓝牙、Wi-Fi、音频、视频和摄像头等功能,拥有丰富的扩展接口,支持多种视频输入输出接口;配置双千兆自适应RJ45以太网口,可满足NVR、工业网关等多网口产品需求。 RK3568开发板基于Rockchip RK3568芯片,集成双核心架构GPU以及高效能NPU;搭载四核64位Cortex-A55处理器,采用22nm先进工艺,主频高达2.0GHz;支持蓝牙、Wi-Fi、音频、视频和摄像头等功能,拥有丰富的扩展接口,支持多种视频输入输出接口;配置双千兆自适应RJ45以太网口,可满足NVR、工业网关等多网口产品需求。
**图1** RK3568开发板正面 **图1** RK3568开发板正面
![zh-cn_image_0000001271442129](figures/zh-cn_image_0000001271442129.png) ![zh-cn_image_0000001271442129](figures/zh-cn_image_0000001271442261.png)
**图2** RK3568开发板背面 **图2** RK3568开发板背面
![zh-cn_image_0000001271322293](figures/zh-cn_image_0000001271322293.png) ![zh-cn_image_0000001271322293](figures/zh-cn_image_0000001271322293.png)
......
...@@ -21,9 +21,9 @@ ...@@ -21,9 +21,9 @@
5. 在Import Project界面,选择**Product**后,会自动填充对应的MCU、Board、company和kernel信息,然后**ohosVersion**选择对应的OpenHarmony源码版本。下图以导入Hi3516DV300为例进行展示 。 5. 在Import Project界面,选择**Product**后,会自动填充对应的MCU、Board、company和kernel信息,然后**ohosVersion**选择对应的OpenHarmony源码版本。下图以导入Hi3516DV300为例进行展示 。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** > ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> Hi3516DV300开发板Product选择“Hi3516DV300”。 > - Hi3516DV300开发板Product选择“Hi3516DV300”。
> >
> RK3568开发板Product选择“rk3568”。 > - RK3568开发板Product选择“rk3568”。
![zh-cn_image_0000001271448821](figures/zh-cn_image_0000001271448821.png) ![zh-cn_image_0000001271448821](figures/zh-cn_image_0000001271448821.png)
......
...@@ -58,7 +58,7 @@ ...@@ -58,7 +58,7 @@
``` ```
sudo ./devicetool-linux-tool-3.0.0.300.sh sudo ./devicetool-linux-tool-3.0.0.400.sh
``` ```
安装完成后,当界面输出“Deveco Device Tool successfully installed.”时,表示DevEco Device Tool安装成功。 安装完成后,当界面输出“Deveco Device Tool successfully installed.”时,表示DevEco Device Tool安装成功。
......
...@@ -12,7 +12,7 @@ OpenHarmony标准系统适用于参考内存≥128MiB的设备。通过本文, ...@@ -12,7 +12,7 @@ OpenHarmony标准系统适用于参考内存≥128MiB的设备。通过本文,
- 安装包方式:通过命令行进行编译依赖工具的下载安装,编译操作也通过命令实现。烧录、运行等操作使用IDE。 - 安装包方式:通过命令行进行编译依赖工具的下载安装,编译操作也通过命令实现。烧录、运行等操作使用IDE。
OpenHarmony还为开发者提供了[Docker环境](../get-code/gettools-acquire.md),在很大程度上简化了编译前的环境配置,习惯使用安装包方式的开发者也可以选择Docker环境进行编译 。 OpenHarmony还为开发者提供了[Docker环境](../get-code/gettools-acquire.md),在很大程度上简化了编译前的环境配置,习惯使用安装包方式的开发者也可以选择Docker环境进行编译 。
本文采用Deveco Device Tool进行一站式开发介绍,习惯使用命令行的开发者可参考[标准系统快速入门(安装包方式)](../quick-start/quickstart-standard-docker.md) 本文采用Deveco Device Tool进行一站式开发介绍,习惯使用命令行的开发者可参考[标准系统快速入门(安装包方式)](../quick-start/quickstart-standard-package-directory.md)
## 开发环境 ## 开发环境
......
...@@ -31,6 +31,7 @@ productdefine/common ...@@ -31,6 +31,7 @@ productdefine/common
1. 创建目录,编写业务代码。 1. 创建目录,编写业务代码。
新建applications/sample/hello/src/helloworld.c目录及文件,代码如下所示,用户可以自定义修改打印内容(例如:修改World为OHOS)。其中helloworld.h包含字符串打印函数HelloPrint的声明。当前应用程序可支持标准C及C++的代码开发。 新建applications/sample/hello/src/helloworld.c目录及文件,代码如下所示,用户可以自定义修改打印内容(例如:修改World为OHOS)。其中helloworld.h包含字符串打印函数HelloPrint的声明。当前应用程序可支持标准C及C++的代码开发。
...@@ -75,6 +76,7 @@ productdefine/common ...@@ -75,6 +76,7 @@ productdefine/common
``` ```
2. 新建编译组织文件。 2. 新建编译组织文件。
1. 新建applications/sample/hello/BUILD.gn文件,内容如下所示: 1. 新建applications/sample/hello/BUILD.gn文件,内容如下所示:
``` ```
...@@ -136,6 +138,7 @@ productdefine/common ...@@ -136,6 +138,7 @@ productdefine/common
bundle.json文件包含两个部分,第一部分描述该部件所属子系统的信息,第二部分component则定义该部件构建相关配置。添加的时候需要指明该部件包含的模块sub_component,假如有提供给其它部件的接口,需要在inner_kits中说明,假如有测试用例,需要在test中说明,inner_kits与test没有也可以不添加。 bundle.json文件包含两个部分,第一部分描述该部件所属子系统的信息,第二部分component则定义该部件构建相关配置。添加的时候需要指明该部件包含的模块sub_component,假如有提供给其它部件的接口,需要在inner_kits中说明,假如有测试用例,需要在test中说明,inner_kits与test没有也可以不添加。
3. 修改子系统配置文件。 3. 修改子系统配置文件。
在build/subsystem_config.json中添加新建的子系统的配置。 在build/subsystem_config.json中添加新建的子系统的配置。
...@@ -147,6 +150,7 @@ productdefine/common ...@@ -147,6 +150,7 @@ productdefine/common
``` ```
4. 修改产品配置文件。 4. 修改产品配置文件。
在productdefine\common\products\Hi3516DV300.json中添加对应的hello部件,直接添加到原有部件后即可。 在productdefine\common\products\Hi3516DV300.json中添加对应的hello部件,直接添加到原有部件后即可。
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
1. 在Projects中,点击**Settings**按钮,进入HH-SCDY200配置界面。 1. 在Projects中,点击**Settings**按钮,进入HH-SCDY200配置界面。
![zh-cn_image_0000001221036768](figures/zh-cn_image_0000001221036768.png) ![zh-cn_image_0000001221036768](figures/zh-cn_image_0000001221036768.png)
2. 在toolchain页签中,DevEco Device Tool会自动检测依赖的编译工具链是否完备,如果提示部分工具缺失,可点击**SetUp**按钮,自动安装所需工具链。 2. 在toolchain页签中,DevEco Device Tool会自动检测依赖的编译工具链是否完备,如果提示部分工具缺失,可点击**SetUp**按钮,自动安装所需工具链。
...@@ -15,12 +16,15 @@ ...@@ -15,12 +16,15 @@
![zh-cn_image_0000001265676877](figures/zh-cn_image_0000001265676877.png) ![zh-cn_image_0000001265676877](figures/zh-cn_image_0000001265676877.png)
3. 在“hh_scdy200”配置页签中,设置源码的编译类型**build_type**,默认为"debug类型,请根据需要进行修改。然后点击**Save**按钮进行保存。 3. 在“hh_scdy200”配置页签中,设置源码的编译类型**build_type**,默认为"debug类型,请根据需要进行修改。然后点击**Save**按钮进行保存。
![zh-cn_image_0000001265956897](figures/zh-cn_image_0000001265956897.png) ![zh-cn_image_0000001265956897](figures/zh-cn_image_0000001265956897.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) ![zh-cn_image_0000001265516901](figures/zh-cn_image_0000001265516901.png)
5. 等待编译完成,在**TERMINAL**窗口输出“SUCCESS”,编译完成。 5. 等待编译完成,在**TERMINAL**窗口输出“SUCCESS”,编译完成。
![zh-cn_image_0000001222361042](figures/zh-cn_image_0000001222361042.png) ![zh-cn_image_0000001222361042](figures/zh-cn_image_0000001222361042.png)
编译完成后,可以在工程的**out**目录下,查看编译生成的文件,用于后续的[RK3568开发板烧录](https://device.harmonyos.com/cn/docs/documentation/guide/ide-rk3568-upload-0000001239220669) 编译完成后,可以在工程的**out**目录下,查看编译生成的文件,用于后续的[RK3568开发板烧录](https://device.harmonyos.com/cn/docs/documentation/guide/ide-rk3568-upload-0000001239220669)
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
> 该操作仅在远程模式(Windows+Ubuntu混合开发环境)中需要设置,如果采用本地模式(Windows开发环境或Ubuntu开发环境),则请跳过该步骤。 > 该操作仅在远程模式(Windows+Ubuntu混合开发环境)中需要设置,如果采用本地模式(Windows开发环境或Ubuntu开发环境),则请跳过该步骤。
4. 打开DevEco Device Tool,在QUICK ACCESS > DevEco Home > Projects中,点击**Settings**打开工程配置界面。 4. 打开DevEco Device Tool,在QUICK ACCESS > DevEco Home > Projects中,点击**Settings**打开工程配置界面。
![zh-cn_image_0000001239661509](figures/zh-cn_image_0000001239661509.png) ![zh-cn_image_0000001239661509](figures/zh-cn_image_0000001239661509.png)
5. 在“hh_scdy200”页签,设置烧录选项,包括upload_partitions和upload_protocol。 5. 在“hh_scdy200”页签,设置烧录选项,包括upload_partitions和upload_protocol。
...@@ -27,6 +28,7 @@ ...@@ -27,6 +28,7 @@
6. 分别检查待烧录文件的烧录信息,DevEco Device Tool已预置默认的烧录文件信息,可根据实际情况进行调整。待烧录文件包括:loader、parameter、uboot、boot_linux、system、vendor和userdata。 6. 分别检查待烧录文件的烧录信息,DevEco Device Tool已预置默认的烧录文件信息,可根据实际情况进行调整。待烧录文件包括:loader、parameter、uboot、boot_linux、system、vendor和userdata。
1. 在“hh_scdy200_loader”页签,在New Option选项中选择需要修改的项,例如partition_bin(烧录文件路径)、partition_addr(烧录文件起始地址)、partition_length(烧录文件分区长度)等。 1. 在“hh_scdy200_loader”页签,在New Option选项中选择需要修改的项,例如partition_bin(烧录文件路径)、partition_addr(烧录文件起始地址)、partition_length(烧录文件分区长度)等。
![zh-cn_image_0000001224173270](figures/zh-cn_image_0000001224173270.png) ![zh-cn_image_0000001224173270](figures/zh-cn_image_0000001224173270.png)
2. 然后在Partition Options中,分别修改上述步骤中选择的修改项。 2. 然后在Partition Options中,分别修改上述步骤中选择的修改项。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** > ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
...@@ -38,7 +40,9 @@ ...@@ -38,7 +40,9 @@
7. 所有的配置都修改完成后,在工程配置页签的顶部,点击**Save**进行保存。 7. 所有的配置都修改完成后,在工程配置页签的顶部,点击**Save**进行保存。
8. 点击工程的Open按钮,打开工程文件,点击![zh-cn_image_0000001239221905](figures/zh-cn_image_0000001239221905.png)图标,打开DevEco Device Tool界面,在“PROJECT TASKS”中,点击hh_scdy200下的**Upload**按钮,启动烧录。 8. 点击工程的Open按钮,打开工程文件,点击![zh-cn_image_0000001239221905](figures/zh-cn_image_0000001239221905.png)图标,打开DevEco Device Tool界面,在“PROJECT TASKS”中,点击hh_scdy200下的**Upload**按钮,启动烧录。
![zh-cn_image_0000001194821710](figures/zh-cn_image_0000001194821710.png) ![zh-cn_image_0000001194821710](figures/zh-cn_image_0000001194821710.png)
9. 等待开发板烧录完成,当屏幕提示如下信息时,表示烧录成功。 9. 等待开发板烧录完成,当屏幕提示如下信息时,表示烧录成功。
![zh-cn_image_0000001194984912](figures/zh-cn_image_0000001194984912.png) ![zh-cn_image_0000001194984912](figures/zh-cn_image_0000001194984912.png)
...@@ -30,6 +30,7 @@ productdefine/common ...@@ -30,6 +30,7 @@ productdefine/common
请在源码目录中通过以下步骤创建“Hello World”应用程序: 请在源码目录中通过以下步骤创建“Hello World”应用程序:
1. 创建目录,编写业务代码。 1. 创建目录,编写业务代码。
新建applications/sample/hello/src/helloworld.c目录及文件,代码如下所示,用户可以自定义修改打印内容(例如:修改World为OHOS)。其中helloworld.h包含字符串打印函数HelloPrint的声明。当前应用程序可支持标准C及C++的代码开发。 新建applications/sample/hello/src/helloworld.c目录及文件,代码如下所示,用户可以自定义修改打印内容(例如:修改World为OHOS)。其中helloworld.h包含字符串打印函数HelloPrint的声明。当前应用程序可支持标准C及C++的代码开发。
...@@ -74,6 +75,7 @@ productdefine/common ...@@ -74,6 +75,7 @@ productdefine/common
``` ```
2. 新建编译组织文件。 2. 新建编译组织文件。
1. 新建applications/sample/hello/BUILD.gn文件,内容如下所示: 1. 新建applications/sample/hello/BUILD.gn文件,内容如下所示:
``` ```
...@@ -135,6 +137,7 @@ productdefine/common ...@@ -135,6 +137,7 @@ productdefine/common
bundle.json文件包含两个部分,第一部分描述该部件所属子系统的信息,第二部分component则定义该部件构建相关配置。添加的时候需要指明该部件包含的模块sub_component,假如有提供给其它部件的接口,需要在inner_kits中说明,假如有测试用例,需要在test中说明,inner_kits与test没有也可以不添加。 bundle.json文件包含两个部分,第一部分描述该部件所属子系统的信息,第二部分component则定义该部件构建相关配置。添加的时候需要指明该部件包含的模块sub_component,假如有提供给其它部件的接口,需要在inner_kits中说明,假如有测试用例,需要在test中说明,inner_kits与test没有也可以不添加。
3. 修改子系统配置文件。 3. 修改子系统配置文件。
在build/subsystem_config.json中添加新建的子系统的配置。 在build/subsystem_config.json中添加新建的子系统的配置。
...@@ -146,6 +149,7 @@ productdefine/common ...@@ -146,6 +149,7 @@ productdefine/common
``` ```
4. 修改产品配置文件。 4. 修改产品配置文件。
在productdefine\common\products\rk3568.json中添加对应的hello部件,直接添加到原有部件后即可。 在productdefine\common\products\rk3568.json中添加对应的hello部件,直接添加到原有部件后即可。
``` ```
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
2. 注册码云SSH公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191) 2. 注册码云SSH公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191)
3. 安装git客户端和git-lfs。(上述工具已在搭建环境章节安装。如已安装,请忽略) 3. 安装git客户端和git-lfs。
更新软件源: 更新软件源:
...@@ -41,12 +41,13 @@ ...@@ -41,12 +41,13 @@
``` ```
## 获取方式 ## 获取源码
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** > ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> Master主干为开发分支,开发者可通过Master主干获取最新特性。发布分支代码相对比较稳定,开发者可基于发布分支代码进行商用功能开发。 > Master主干为开发分支,开发者可通过Master主干获取最新特性。发布分支代码相对比较稳定,开发者可基于发布分支代码进行商用功能开发。
- **OpenHarmony主干代码获取** - **OpenHarmony主干代码获取**
方式一(推荐):通过repo + ssh下载(需注册公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191))。 方式一(推荐):通过repo + ssh下载(需注册公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191))。
``` ```
...@@ -65,10 +66,11 @@ ...@@ -65,10 +66,11 @@
``` ```
- **OpenHarmony发布分支代码获取** - **OpenHarmony发布分支代码获取**
OpenHarmony各个版本发布分支的源码获取方式请参考[Release-Notes](../../release-notes/Readme.md) OpenHarmony各个版本发布分支的源码获取方式请参考[Release-Notes](../../release-notes/Readme.md)
### 执行prebuilts ## 执行prebuilts
在源码根目录下执行prebuilts脚本,安装编译器及二进制工具。 在源码根目录下执行prebuilts脚本,安装编译器及二进制工具。
......
...@@ -132,7 +132,7 @@ ...@@ -132,7 +132,7 @@
``` ```
sudo ./devicetool-linux-tool-3.0.0.300.sh sudo ./devicetool-linux-tool-3.0.0.400.sh
``` ```
安装完成后,当界面输出“Deveco Device Tool successfully installed.”时,表示DevEco Device Tool安装成功。 安装完成后,当界面输出“Deveco Device Tool successfully installed.”时,表示DevEco Device Tool安装成功。
...@@ -273,6 +273,7 @@ ...@@ -273,6 +273,7 @@
> Master主干为开发分支,开发者可通过Master主干获取最新特性。发布分支代码相对比较稳定,开发者可基于发布分支代码进行商用功能开发。 > Master主干为开发分支,开发者可通过Master主干获取最新特性。发布分支代码相对比较稳定,开发者可基于发布分支代码进行商用功能开发。
- **OpenHarmony主干代码获取** - **OpenHarmony主干代码获取**
方式一(推荐):通过repo + ssh下载(需注册公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191))。 方式一(推荐):通过repo + ssh下载(需注册公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191))。
``` ```
...@@ -291,6 +292,7 @@ ...@@ -291,6 +292,7 @@
``` ```
- **OpenHarmony发布分支代码获取** - **OpenHarmony发布分支代码获取**
OpenHarmony各个版本发布分支的源码获取方式请参考[Release-Notes](../../release-notes/Readme.md) OpenHarmony各个版本发布分支的源码获取方式请参考[Release-Notes](../../release-notes/Readme.md)
......
...@@ -4,38 +4,49 @@ ...@@ -4,38 +4,49 @@
## 烧写选择串口后提示“Error: Opening COMxx: Access denied” ## 烧写选择串口后提示“Error: Opening COMxx: Access denied”
- **现象描述** - **现象描述**
点击烧写并选择串口后,出现Error: Opening COMxx: Access denied。 点击烧写并选择串口后,出现Error: Opening COMxx: Access denied。
**图1** 打开串口失败图 **图1** 打开串口失败图
![zh-cn_image_0000001226634728](figures/zh-cn_image_0000001226634728.png) ![zh-cn_image_0000001226634728](figures/zh-cn_image_0000001226634728.png)
- **可能原因** - **可能原因**
串口已经被占用。 串口已经被占用。
- **解决办法** - **解决办法**
1. 按图依次选择下拉框,查找带有serial-xx的终端。 1. 按图依次选择下拉框,查找带有serial-xx的终端。
**图2** 查找是否存在占用串口的终端 **图2** 查找是否存在占用串口的终端
![zh-cn_image_0000001226954644](figures/zh-cn_image_0000001226954644.png) ![zh-cn_image_0000001226954644](figures/zh-cn_image_0000001226954644.png)
2. 点击标号中的垃圾桶图标,关闭串口。 2. 点击标号中的垃圾桶图标,关闭串口。
**图3** 关闭串口终端 **图3** 关闭串口终端
![zh-cn_image_0000001271234761](figures/zh-cn_image_0000001271234761.png) ![zh-cn_image_0000001271234761](figures/zh-cn_image_0000001271234761.png)
3. 重新点击烧写,选择串口并开始烧写程序。 3. 重新点击烧写,选择串口并开始烧写程序。
**图4** 重新启动烧写任务 **图4** 重新启动烧写任务
![zh-cn_image_0000001271594765](figures/zh-cn_image_0000001271594765.png) ![zh-cn_image_0000001271594765](figures/zh-cn_image_0000001271594765.png)
## Windows电脑与单板网络连接失败 ## Windows电脑与单板网络连接失败
- **现象描述** - **现象描述**
点击烧写并选择串口后,无法获取文件。 点击烧写并选择串口后,无法获取文件。
**图5** 网络不通,单板无法获取文件图 **图5** 网络不通,单板无法获取文件图
![zh-cn_image_0000001271234757](figures/zh-cn_image_0000001271234757.png) ![zh-cn_image_0000001271234757](figures/zh-cn_image_0000001271234757.png)
- **可能原因** - **可能原因**
单板网络与Windows电脑不联通。 单板网络与Windows电脑不联通。
Windows电脑防火墙未允许Visual Studio Code联网。 Windows电脑防火墙未允许Visual Studio Code联网。
...@@ -45,51 +56,67 @@ ...@@ -45,51 +56,67 @@
1. 检查网线是否连接。 1. 检查网线是否连接。
2. 点击Windows防火墙。 2. 点击Windows防火墙。
**图6** 网络防火墙设置图 **图6** 网络防火墙设置图
![zh-cn_image_0000001226634732](figures/zh-cn_image_0000001226634732.png) ![zh-cn_image_0000001226634732](figures/zh-cn_image_0000001226634732.png)
3. 点击“允许应用通过防火墙”。 3. 点击“允许应用通过防火墙”。
**图7** 防火墙和网络保护界面图 **图7** 防火墙和网络保护界面图
![zh-cn_image_0000001271354749](figures/zh-cn_image_0000001271354749.png) ![zh-cn_image_0000001271354749](figures/zh-cn_image_0000001271354749.png)
4. 查找Visual Studio Code应用。 4. 查找Visual Studio Code应用。
**图8** 查找Visual Studio Code应用图 **图8** 查找Visual Studio Code应用图
![zh-cn_image_0000001271234765](figures/zh-cn_image_0000001271234765.png) ![zh-cn_image_0000001271234765](figures/zh-cn_image_0000001271234765.png)
5. 勾选Visual Studio Code的专用和公用网络的访问权限。 5. 勾选Visual Studio Code的专用和公用网络的访问权限。
**图9** 允许Visual Studio Code应用访问网络 **图9** 允许Visual Studio Code应用访问网络
![zh-cn_image_0000001271474585](figures/zh-cn_image_0000001271474585.png) ![zh-cn_image_0000001271474585](figures/zh-cn_image_0000001271474585.png)
## 烧写失败 ## 烧写失败
- **现象描述** - **现象描述**
点击烧写并选择串口后,出现无法烧写的情况。 点击烧写并选择串口后,出现无法烧写的情况。
- **可能原因** - **可能原因**
安装IDE插件DevEco后未重启。 安装IDE插件DevEco后未重启。
- **解决方法** - **解决方法**
重启IDE。 重启IDE。
## (Hi3516)串口无回显 ## (Hi3516)串口无回显
- **现象描述** - **现象描述**
串口显示已连接,重启单板后,回车无任何回显。 串口显示已连接,重启单板后,回车无任何回显。
- **可能原因1** - **可能原因1**
串口连接错误。 串口连接错误。
- **解决办法** - **解决办法**
修改串口号。 修改串口号。
请查看设备管理器,确认连接单板的串口与终端中连接串口是否一致,若不一致,请按[串口访问失败的步骤](#烧写选择串口后提示error-opening-comxx-access-denied)修改串口号。 请查看设备管理器,确认连接单板的串口与终端中连接串口是否一致,若不一致,请按[串口访问失败的步骤](#烧写选择串口后提示error-opening-comxx-access-denied)修改串口号。
- **可能原因2** - **可能原因2**
单板U-boot被损坏。 单板U-boot被损坏。
- **解决办法** - **解决办法**
烧写U-boot。 烧写U-boot。
若上述步骤依旧无法连接串口,可能由于单板U-boot损坏,按下述步骤烧写U-boot。 若上述步骤依旧无法连接串口,可能由于单板U-boot损坏,按下述步骤烧写U-boot。
...@@ -103,8 +130,11 @@ ...@@ -103,8 +130,11 @@
> Hi3518EV300:device\hisilicon\hispark_aries\sdk_liteos\uboot\out\boot\u-boot-hi3518ev300.bin > Hi3518EV300:device\hisilicon\hispark_aries\sdk_liteos\uboot\out\boot\u-boot-hi3518ev300.bin
2. 根据USB烧写步骤烧写U-boot文件。 2. 根据USB烧写步骤烧写U-boot文件。
按照[Hi3516系列USB烧写步骤](https://device.harmonyos.com/cn/docs/documentation/guide/ide-hi3516-upload-0000001052148681)/[Hi3518系列USB烧写步骤](https://device.harmonyos.com/cn/docs/documentation/guide/ide-hi3518-upload-0000001057313128#section93591711580)中描述的烧写方法,选择对应单板的U-boot文件进行烧写。 按照[Hi3516系列USB烧写步骤](https://device.harmonyos.com/cn/docs/documentation/guide/ide-hi3516-upload-0000001052148681)/[Hi3518系列USB烧写步骤](https://device.harmonyos.com/cn/docs/documentation/guide/ide-hi3518-upload-0000001057313128#section93591711580)中描述的烧写方法,选择对应单板的U-boot文件进行烧写。
3. 烧写完成后,登录串口如下图所示。 3. 烧写完成后,登录串口如下图所示。
**图10** U-boot烧写完成串口显示图 **图10** U-boot烧写完成串口显示图
![zh-cn_image_0000001271234753](figures/zh-cn_image_0000001271234753.png) ![zh-cn_image_0000001271234753](figures/zh-cn_image_0000001271234753.png)
...@@ -4,12 +4,15 @@ ...@@ -4,12 +4,15 @@
## Linux编译服务器终端输入不识别的命令时提示“ImportError: No module named apt_pkg” ## Linux编译服务器终端输入不识别的命令时提示“ImportError: No module named apt_pkg”
- **现象描述** - **现象描述**
Linux编译服务器终端输入不识别的命令时,提示"ImportError: No module named apt_pkg" Linux编译服务器终端输入不识别的命令时,提示"ImportError: No module named apt_pkg"
- **可能原因** - **可能原因**
python3 apt安装兼容性问题。 python3 apt安装兼容性问题。
- **解决办法** - **解决办法**
执行如下命令重新安装python3-apt。 执行如下命令重新安装python3-apt。
...@@ -22,6 +25,7 @@ ...@@ -22,6 +25,7 @@
## 编译构建过程中,提示找不到“python” ## 编译构建过程中,提示找不到“python”
- **现象描述** - **现象描述**
编译构建过程中出现以下错误: 编译构建过程中出现以下错误:
...@@ -30,9 +34,11 @@ ...@@ -30,9 +34,11 @@
``` ```
- **可能原因**1 - **可能原因**1
没有装python。 没有装python。
- **解决办法** - **解决办法**
请使用如下命令安装Python,下方以Python3.8为例。 请使用如下命令安装Python,下方以Python3.8为例。
...@@ -41,11 +47,13 @@ ...@@ -41,11 +47,13 @@
``` ```
- **可能原因2** - **可能原因2**
usr/bin目录下没有python软链接 usr/bin目录下没有python软链接
![zh-cn_image_0000001271354745](figures/zh-cn_image_0000001271354745.png) ![zh-cn_image_0000001271354745](figures/zh-cn_image_0000001271354745.png)
- **解决办法** - **解决办法**
请运行以下命令添加软链接: 请运行以下命令添加软链接:
...@@ -64,12 +72,15 @@ ...@@ -64,12 +72,15 @@
## 编译构建过程中,提示找不到“python3” ## 编译构建过程中,提示找不到“python3”
- **现象描述** - **现象描述**
![zh-cn_image_0000001227114640](figures/zh-cn_image_0000001227114640.png) ![zh-cn_image_0000001227114640](figures/zh-cn_image_0000001227114640.png)
- **可能原因** - **可能原因**
没有装python3。 没有装python3。
- **解决办法** - **解决办法**
请使用如下命令安装Python3。 请使用如下命令安装Python3。
...@@ -81,6 +92,7 @@ ...@@ -81,6 +92,7 @@
## 安装python3过程中,提示“configure: error: no acceptable C compiler found in $PATH” ## 安装python3过程中,提示“configure: error: no acceptable C compiler found in $PATH”
- **现象描述** - **现象描述**
安装python3过程中出现以下错误: 安装python3过程中出现以下错误:
...@@ -89,9 +101,11 @@ ...@@ -89,9 +101,11 @@
``` ```
- **可能原因** - **可能原因**
环境中未安装“gcc”。 环境中未安装“gcc”。
- **解决办法** - **解决办法**
1. 通过命令“apt-get install gcc”在线安装。 1. 通过命令“apt-get install gcc”在线安装。
2. 完成后,重新安装python3。 2. 完成后,重新安装python3。
...@@ -99,6 +113,7 @@ ...@@ -99,6 +113,7 @@
## 安装python3过程中,提示“-bash: make: command not found” ## 安装python3过程中,提示“-bash: make: command not found”
- **现象描述** - **现象描述**
安装python3过程中出现以下错误: 安装python3过程中出现以下错误:
...@@ -107,9 +122,11 @@ ...@@ -107,9 +122,11 @@
``` ```
- **可能原因** - **可能原因**
环境中未安装“make”。 环境中未安装“make”。
- **解决办法** - **解决办法**
1. 通过命令“apt-get install make”在线安装。 1. 通过命令“apt-get install make”在线安装。
2. 完成后,重新安装python3。 2. 完成后,重新安装python3。
...@@ -117,6 +134,7 @@ ...@@ -117,6 +134,7 @@
## 安装python3过程中,提示“No module named '_ctypes'” ## 安装python3过程中,提示“No module named '_ctypes'”
- **现象描述** - **现象描述**
安装python3过程中出现以下错误: 安装python3过程中出现以下错误:
...@@ -125,9 +143,11 @@ ...@@ -125,9 +143,11 @@
``` ```
- **可能原因** - **可能原因**
环境中未安装“libffi”和“libffi-devel”。 环境中未安装“libffi”和“libffi-devel”。
- **解决办法** - **解决办法**
1. 通过命令“apt-get install libffi\* -y”,在线安装。 1. 通过命令“apt-get install libffi\* -y”,在线安装。
2. 完成后,重新安装python3。 2. 完成后,重新安装python3。
...@@ -135,6 +155,7 @@ ...@@ -135,6 +155,7 @@
## 编译构建过程中,提示“No module named 'Crypto'” ## 编译构建过程中,提示“No module named 'Crypto'”
- **现象描述** - **现象描述**
编译构建过程中出现以下错误: 编译构建过程中出现以下错误:
...@@ -143,9 +164,11 @@ ...@@ -143,9 +164,11 @@
``` ```
- **可能原因** - **可能原因**
环境中未安装“Crypto”。 环境中未安装“Crypto”。
- **解决办法** - **解决办法**
方法1:通过命令“pip3 install Crypto”,在线安装。 方法1:通过命令“pip3 install Crypto”,在线安装。
方法2:离线安装。 方法2:离线安装。
...@@ -162,6 +185,7 @@ ...@@ -162,6 +185,7 @@
## (Hi3861)编译构建过程中,提示“No module named 'ecdsa'” ## (Hi3861)编译构建过程中,提示“No module named 'ecdsa'”
- **现象描述** - **现象描述**
编译构建过程中出现以下错误: 编译构建过程中出现以下错误:
...@@ -170,9 +194,11 @@ ...@@ -170,9 +194,11 @@
``` ```
- **可能原因** - **可能原因**
环境中未安装“ecdsa”。 环境中未安装“ecdsa”。
- **解决办法** - **解决办法**
方法1:通过命令“pip3 install ecdsa”,在线安装。 方法1:通过命令“pip3 install ecdsa”,在线安装。
方法2:离线安装 方法2:离线安装
...@@ -189,6 +215,7 @@ ...@@ -189,6 +215,7 @@
## (Hi3861)编译构建过程中,提示“Could not find a version that satisfies the requirement six>=1.9.0” ## (Hi3861)编译构建过程中,提示“Could not find a version that satisfies the requirement six>=1.9.0”
- **现象描述** - **现象描述**
编译构建过程中出现以下错误: 编译构建过程中出现以下错误:
...@@ -197,9 +224,11 @@ ...@@ -197,9 +224,11 @@
``` ```
- **可能原因** - **可能原因**
环境中未安装合适的“six”。 环境中未安装合适的“six”。
- **解决办法** - **解决办法**
方法1:通过命令“pip3 install six”,在线安装。 方法1:通过命令“pip3 install six”,在线安装。
方法2:离线安装。 方法2:离线安装。
...@@ -216,6 +245,7 @@ ...@@ -216,6 +245,7 @@
## (Hi3861)编译构建过程中,提示找不到“-lgcc” ## (Hi3861)编译构建过程中,提示找不到“-lgcc”
- **现象描述** - **现象描述**
编译构建过程中出现以下错误: 编译构建过程中出现以下错误:
...@@ -224,6 +254,7 @@ ...@@ -224,6 +254,7 @@
``` ```
- **可能原因** - **可能原因**
交叉编译器gcc_riscv32的PATH添加错误,如下,在"bin"后多添加了一个“/”,应该删除。 交叉编译器gcc_riscv32的PATH添加错误,如下,在"bin"后多添加了一个“/”,应该删除。
...@@ -232,6 +263,7 @@ ...@@ -232,6 +263,7 @@
``` ```
- **解决办法** - **解决办法**
重新修改gcc_riscv32的PATH,将多余的“/”删除。 重新修改gcc_riscv32的PATH,将多余的“/”删除。
...@@ -243,6 +275,7 @@ ...@@ -243,6 +275,7 @@
## (Hi3861)安装kconfiglib时,遇到lsb_release错误 ## (Hi3861)安装kconfiglib时,遇到lsb_release错误
- **现象描述** - **现象描述**
安装kconfiglib过程中遇到如下错误打印: 安装kconfiglib过程中遇到如下错误打印:
...@@ -251,7 +284,9 @@ ...@@ -251,7 +284,9 @@
``` ```
- **可能原因** - **可能原因**
lsb_release模块基于的python版本与现有python版本不一致。 lsb_release模块基于的python版本与现有python版本不一致。
- **解决办法** - **解决办法**
执行"find / -name lsb_release",找到lsb_release位置并删除,如:"sudo rm -rf /usr/bin/lsb_release"。 执行"find / -name lsb_release",找到lsb_release位置并删除,如:"sudo rm -rf /usr/bin/lsb_release"。
...@@ -10,12 +10,12 @@ OpenHarmony轻量和小型系统适用于内存较小的IOT设备(参考内存 ...@@ -10,12 +10,12 @@ OpenHarmony轻量和小型系统适用于内存较小的IOT设备(参考内存
考虑到开发者的开发习惯,OpenHarmony为开发者提供了以下两种入门指导: 考虑到开发者的开发习惯,OpenHarmony为开发者提供了以下两种入门指导:
- IDE方式:完全采用IDE(Deveco Device Tool)进行一站式开发,编译依赖工具的安装及编译、烧录、运行都通过IDE进行操作。 - IDE方式:完全采用IDE(DevEco Device Tool)进行一站式开发,编译依赖工具的安装及编译、烧录、运行都通过IDE进行操作。
- 安装包方式:通过命令行进行编译依赖工具的下载安装,编译操作也通过命令实现。烧录、运行等操作使用IDE。OpenHarmony还为开发者提供了[Docker环境](../get-code/gettools-acquire.md),在很大程度上简化了编译前的环境配置,习惯使用安装包方式的开发者也可以选择Docker环境进行编译 。 - 安装包方式:通过命令行进行编译依赖工具的下载安装,编译操作也通过命令实现。烧录、运行等操作使用IDE。OpenHarmony还为开发者提供了[Docker环境](../get-code/gettools-acquire.md),在很大程度上简化了编译前的环境配置,习惯使用安装包方式的开发者也可以选择Docker环境进行编译 。
本文采用安装包方式进行介绍,习惯使用Deveco Device Tool的开发者可参考[标准系统快速入门(IDE方式)](../quick-start/quickstart-ide-lite.md) 本文采用安装包方式进行介绍,习惯使用DevEco Device Tool的开发者可参考[轻量与小型系统快速入门(IDE方式)](../quick-start/quickstart-ide-lite.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-application-framework.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-hi3816-running.md)
- Hi3516开发板
- [安装Hi3516开发板环境](quickstart-lite-steps-hi3516-setting.md)
- [编写“Hello World”程序](quickstart-lite-steps-hi3516-application-framework.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)
...@@ -23,6 +23,7 @@ applications/sample/hello ...@@ -23,6 +23,7 @@ applications/sample/hello
请在源码目录中通过以下步骤创建“Hello World”应用程序: 请在源码目录中通过以下步骤创建“Hello World”应用程序:
1. 新建目录及源码。 1. 新建目录及源码。
新建**applications/sample/hello/src/helloworld.c**目录及文件,代码如下所示,用户可以自定义修改打印内容(例如:修改OHOS为World)。当前应用程序可支持标准C及C++的代码开发。 新建**applications/sample/hello/src/helloworld.c**目录及文件,代码如下所示,用户可以自定义修改打印内容(例如:修改OHOS为World)。当前应用程序可支持标准C及C++的代码开发。
...@@ -40,6 +41,7 @@ applications/sample/hello ...@@ -40,6 +41,7 @@ applications/sample/hello
``` ```
2. 新建编译组织文件。 2. 新建编译组织文件。
新建**applications/sample/hello/BUILD.gn**文件,内容如下所示: 新建**applications/sample/hello/BUILD.gn**文件,内容如下所示:
...@@ -55,6 +57,7 @@ applications/sample/hello ...@@ -55,6 +57,7 @@ applications/sample/hello
``` ```
3. 添加新组件。 3. 添加新组件。
修改文件**build/lite/components/applications.json**,添加组件hello_world_app的配置,如下所示为applications.json文件片段,"\#\#start\#\#"和"\#\#end\#\#"之间为新增配置("\#\#start\#\#"和"\#\#end\#\#"仅用来标识位置,添加完配置后删除这两行): 修改文件**build/lite/components/applications.json**,添加组件hello_world_app的配置,如下所示为applications.json文件片段,"\#\#start\#\#"和"\#\#end\#\#"之间为新增配置("\#\#start\#\#"和"\#\#end\#\#"仅用来标识位置,添加完配置后删除这两行):
...@@ -117,6 +120,7 @@ applications/sample/hello ...@@ -117,6 +120,7 @@ applications/sample/hello
``` ```
4. 修改单板配置文件。 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\#\#"仅用来标识位置,添加完配置后删除这两行):
......
...@@ -38,6 +38,7 @@ OpenHarmony支持hb和build.sh两种编译方式。此处介绍hb方式,build. ...@@ -38,6 +38,7 @@ OpenHarmony支持hb和build.sh两种编译方式。此处介绍hb方式,build.
**图1** Hi3516编译设置图例 **图1** Hi3516编译设置图例
![zh-cn_image_0000001271594749](figures/zh-cn_image_0000001271594749.png) ![zh-cn_image_0000001271594749](figures/zh-cn_image_0000001271594749.png)
5. 编译结束后,出现“build success”字样,则证明构建成功。 5. 编译结束后,出现“build success”字样,则证明构建成功。
......
...@@ -5,19 +5,22 @@ ...@@ -5,19 +5,22 @@
在完成Hi3516DV300的烧录后,还需要设置BootLoader引导程序,才能运行OpenHarmony系统。 在完成Hi3516DV300的烧录后,还需要设置BootLoader引导程序,才能运行OpenHarmony系统。
1. 在Hi3516DV300任务中,点击**Configure bootloader(Boot OS)**进行配置即可。 1. 在Hi3516DV300任务中,点击Configure bootloader(Boot OS)进行配置即可。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** > ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> DevEco Device Tool针对Hi3516DV300开发板的BootLoader设置进行了适配,无需开发者手动修改。 > DevEco Device Tool针对Hi3516DV300开发板的BootLoader设置进行了适配,无需开发者手动修改。
![zh-cn_image_0000001209906547](figures/zh-cn_image_0000001209906547.png) ![zh-cn_image_0000001209906547](figures/zh-cn_image_0000001209906547.png)
2. 提示如下图中的重启开发板的提示信息时,重启开发板,然后在控制台输出“SUCCESS”表示设置成功。 2. 提示如下图中的重启开发板的提示信息时,重启开发板,然后在控制台输出“SUCCESS”表示设置成功。
![zh-cn_image_0000001210385161](figures/zh-cn_image_0000001210385161.png) ![zh-cn_image_0000001210385161](figures/zh-cn_image_0000001210385161.png)
3. 在任务栏点击**Monitor**按钮,启动串口工具。 3. 在任务栏点击**Monitor**按钮,启动串口工具。
![zh-cn_image_0000001164506870](figures/zh-cn_image_0000001164506870.png) ![zh-cn_image_0000001164506870](figures/zh-cn_image_0000001164506870.png)
4. 当界面打印回显信息,点击Enter按钮,直到界面显示OHOS \#信息,表示系统启动成功。 4. 当界面打印回显信息,点击Enter按钮,直到界面显示OHOS \#信息,表示系统启动成功。
![zh-cn_image_0000001198626874](figures/zh-cn_image_0000001198626874.png) ![zh-cn_image_0000001198626874](figures/zh-cn_image_0000001198626874.png)
......
...@@ -27,4 +27,4 @@ Hi3516DV300开发板对Linux服务器通用环境配置需要的工具及其用 ...@@ -27,4 +27,4 @@ Hi3516DV300开发板对Linux服务器通用环境配置需要的工具及其用
Hi3516DV300依赖以下工具:dosfstools、mtools、mtd-utils、Java运行时环境(JRE)和Java sdk 开发工具包。 Hi3516DV300依赖以下工具:dosfstools、mtools、mtd-utils、Java运行时环境(JRE)和Java sdk 开发工具包。
上述工具已在[ERROR:Invalid link:zh-cn_topic_0000001226794684.xml#xref126711502449,link:zh-cn_topic_0000001215745332.xml#section69901514104616](zh-cn_topic_0000001215745332.xml#section69901514104616)环节完成安装,此处无需再进行安装。 上述工具已在[安装必要的库和工具](../quick-start/quickstart-lite-env-setup.md#安装必要的库和工具)环节完成安装,此处无需再进行安装。
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
1. 确定目录结构。 1. 确定目录结构。
开发者编写业务时,务必先在./applications/sample/wifi-iot/app路径下新建一个目录(或一套目录结构),用于存放业务源码文件。 开发者编写业务时,务必先在./applications/sample/wifi-iot/app路径下新建一个目录(或一套目录结构),用于存放业务源码文件。
例如:在app下新增业务my_first_app,其中hello_world.c为业务代码,BUILD.gn为编译脚本,具体规划目录结构如下: 例如:在app下新增业务my_first_app,其中hello_world.c为业务代码,BUILD.gn为编译脚本,具体规划目录结构如下:
...@@ -22,6 +23,7 @@ ...@@ -22,6 +23,7 @@
``` ```
2. 编写业务代码。 2. 编写业务代码。
新建./applications/sample/wifi-iot/app/my_first_app下的hello_world.c文件,在hello_world.c中新建业务入口函数HelloWorld,并实现业务逻辑。并在代码最下方,使用OpenHarmony启动恢复模块接口SYS_RUN()启动业务。(SYS_RUN定义在ohos_init.h文件中) 新建./applications/sample/wifi-iot/app/my_first_app下的hello_world.c文件,在hello_world.c中新建业务入口函数HelloWorld,并实现业务逻辑。并在代码最下方,使用OpenHarmony启动恢复模块接口SYS_RUN()启动业务。(SYS_RUN定义在ohos_init.h文件中)
``` ```
...@@ -37,9 +39,10 @@ ...@@ -37,9 +39,10 @@
``` ```
3. 编写用于将业务构建成静态库的BUILD.gn文件。 3. 编写用于将业务构建成静态库的BUILD.gn文件。
新建./applications/sample/wifi-iot/app/my_first_app下的BUILD.gn文件,并完成如下配置。 新建./applications/sample/wifi-iot/app/my_first_app下的BUILD.gn文件,并完成如下配置。
[ERROR:Invalid link:zh-cn_topic_0000001226794672.xml#xref7209204195912,link:#li5479332115116](#li5479332115116)所述,BUILD.gn文件由三部分内容(目标、源文件、头文件路径)构成,需由开发者完成填写。 步骤1所述,BUILD.gn文件由三部分内容(目标、源文件、头文件路径)构成,需由开发者完成填写。
``` ```
...@@ -58,6 +61,7 @@ ...@@ -58,6 +61,7 @@
- include_dirs中指定source所需要依赖的.h文件路径。 - include_dirs中指定source所需要依赖的.h文件路径。
4. 添加新组件。 4. 添加新组件。
修改文件**build/lite/components/applications.json**,添加组件hello_world_app的配置,如下所示为applications.json文件片段,"\#\#start\#\#"和"\#\#end\#\#"之间为新增配置("\#\#start\#\#"和"\#\#end\#\#"仅用来标识位置,添加完配置后删除这两行): 修改文件**build/lite/components/applications.json**,添加组件hello_world_app的配置,如下所示为applications.json文件片段,"\#\#start\#\#"和"\#\#end\#\#"之间为新增配置("\#\#start\#\#"和"\#\#end\#\#"仅用来标识位置,添加完配置后删除这两行):
...@@ -120,6 +124,7 @@ ...@@ -120,6 +124,7 @@
``` ```
5. 修改单板配置文件。 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\#\#"仅用来标识位置,添加完配置后删除这两行):
......
...@@ -37,6 +37,7 @@ OpenHarmony支持hb和build.sh两种编译方式。此处介绍hb方式,build. ...@@ -37,6 +37,7 @@ OpenHarmony支持hb和build.sh两种编译方式。此处介绍hb方式,build.
``` ```
**图1** Hi3861编译设置图例 **图1** Hi3861编译设置图例
![zh-cn_image_0000001226634716](figures/zh-cn_image_0000001226634716.png) ![zh-cn_image_0000001226634716](figures/zh-cn_image_0000001226634716.png)
5. 编译结束后,出现“build success”字样,则证明构建成功。 5. 编译结束后,出现“build success”字样,则证明构建成功。
......
...@@ -5,11 +5,15 @@ ...@@ -5,11 +5,15 @@
1. 保持Windows工作台和WLAN模组的连接状态,在DevEco Device Tool最下方,点击“DevEco:Serial Monitor”按钮。 1. 保持Windows工作台和WLAN模组的连接状态,在DevEco Device Tool最下方,点击“DevEco:Serial Monitor”按钮。
**图1** 打开DevEco Device Tool串口终端示意图 **图1** 打开DevEco Device Tool串口终端示意图
![zh-cn_image_0000001227114644](figures/zh-cn_image_0000001227114644.png) ![zh-cn_image_0000001227114644](figures/zh-cn_image_0000001227114644.png)
2. 复位Hi3861 WLAN模组,终端界面显示“ready to OS start”,则启动成功。 2. 复位Hi3861 WLAN模组,终端界面显示“ready to OS start”,则启动成功。
**图2** Hi3861 WLAN模组复位成功示意图 **图2** Hi3861 WLAN模组复位成功示意图
![zh-cn_image_0000001226794704](figures/zh-cn_image_0000001226794704.png) ![zh-cn_image_0000001226794704](figures/zh-cn_image_0000001226794704.png)
3. 在串口终端中,依次执行如下AT命令,启动STA模式,连接指定AP热点,并开启DHCP功能。 3. 在串口终端中,依次执行如下AT命令,启动STA模式,连接指定AP热点,并开启DHCP功能。
...@@ -35,4 +39,5 @@ ...@@ -35,4 +39,5 @@
``` ```
**图3** Hi3861 WLAN模组联网成功示意图 **图3** Hi3861 WLAN模组联网成功示意图
![zh-cn_image_0000001226954648](figures/zh-cn_image_0000001226954648.png) ![zh-cn_image_0000001226954648](figures/zh-cn_image_0000001226954648.png)
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
Hi3516DV300是新一代行业专用Smart HD IP摄像机SOC,集成新一代ISP(Image Signal Processor)、H.265视频压缩编码器、高性能NNIE引擎,在低码率、高画质、智能处理和分析、低功耗等方面引领行业水平。 Hi3516DV300是新一代行业专用Smart HD IP摄像机SOC,集成新一代ISP(Image Signal Processor)、H.265视频压缩编码器、高性能NNIE引擎,在低码率、高画质、智能处理和分析、低功耗等方面引领行业水平。
**图1** Hi3516单板正面外观图 **图1** Hi3516单板正面外观图
![zh-cn_image_0000001226922318](figures/zh-cn_image_0000001226922318.png) ![zh-cn_image_0000001226922318](figures/zh-cn_image_0000001226922318.png)
......
# 标准系统快速入门-安装包 # 标准系统快速入门(安装包方式)
......
...@@ -132,7 +132,7 @@ ...@@ -132,7 +132,7 @@
``` ```
sudo ./devicetool-linux-tool-3.0.0.300.sh sudo ./devicetool-linux-tool-3.0.0.400.sh
``` ```
安装完成后,当界面输出“Deveco Device Tool successfully installed.”时,表示DevEco Device Tool安装成功。 安装完成后,当界面输出“Deveco Device Tool successfully installed.”时,表示DevEco Device Tool安装成功。
...@@ -273,6 +273,7 @@ ...@@ -273,6 +273,7 @@
> Master主干为开发分支,开发者可通过Master主干获取最新特性。发布分支代码相对比较稳定,开发者可基于发布分支代码进行商用功能开发。 > Master主干为开发分支,开发者可通过Master主干获取最新特性。发布分支代码相对比较稳定,开发者可基于发布分支代码进行商用功能开发。
- **OpenHarmony主干代码获取** - **OpenHarmony主干代码获取**
方式一(推荐):通过repo + ssh下载(需注册公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191))。 方式一(推荐):通过repo + ssh下载(需注册公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191))。
``` ```
...@@ -291,6 +292,7 @@ ...@@ -291,6 +292,7 @@
``` ```
- **OpenHarmony发布分支代码获取** - **OpenHarmony发布分支代码获取**
OpenHarmony各个版本发布分支的源码获取方式请参考[Release-Notes](../../release-notes/Readme.md) OpenHarmony各个版本发布分支的源码获取方式请参考[Release-Notes](../../release-notes/Readme.md)
......
...@@ -4,38 +4,50 @@ ...@@ -4,38 +4,50 @@
## 烧写选择串口后提示“Error: Opening COMxx: Access denied” ## 烧写选择串口后提示“Error: Opening COMxx: Access denied”
- **现象描述** - **现象描述**
点击烧写并选择串口后,出现Error: Opening COMxx: Access denied。 点击烧写并选择串口后,出现Error: Opening COMxx: Access denied。
**图1** 打开串口失败图 **图1** 打开串口失败图
![zh-cn_image_0000001271202461](figures/zh-cn_image_0000001271202461.png) ![zh-cn_image_0000001271202461](figures/zh-cn_image_0000001271202461.png)
- **可能原因** - **可能原因**
串口已经被占用。 串口已经被占用。
- **解决办法** - **解决办法**
1. 按图依次选择下拉框,查找带有serial-xx的终端。 1. 按图依次选择下拉框,查找带有serial-xx的终端。
**图2** 查找是否存在占用串口的终端 **图2** 查找是否存在占用串口的终端
![zh-cn_image_0000001271202473](figures/zh-cn_image_0000001271202473.png) ![zh-cn_image_0000001271202473](figures/zh-cn_image_0000001271202473.png)
2. 点击标号中的垃圾桶图标,关闭串口。 2. 点击标号中的垃圾桶图标,关闭串口。
**图3** 关闭串口终端 **图3** 关闭串口终端
![zh-cn_image_0000001271202469](figures/zh-cn_image_0000001271202469.png) ![zh-cn_image_0000001271202469](figures/zh-cn_image_0000001271202469.png)
3. 重新点击烧写,选择串口并开始烧写程序。 3. 重新点击烧写,选择串口并开始烧写程序。
**图4** 重新启动烧写任务 **图4** 重新启动烧写任务
![zh-cn_image_0000001271562449](figures/zh-cn_image_0000001271562449.png) ![zh-cn_image_0000001271562449](figures/zh-cn_image_0000001271562449.png)
## Windows电脑与单板网络连接失败 ## Windows电脑与单板网络连接失败
- **现象描述** - **现象描述**
点击烧写并选择串口后,无法获取文件。 点击烧写并选择串口后,无法获取文件。
**图5** 网络不通,单板无法获取文件图 **图5** 网络不通,单板无法获取文件图
![zh-cn_image_0000001226922306](figures/zh-cn_image_0000001226922306.png) ![zh-cn_image_0000001226922306](figures/zh-cn_image_0000001226922306.png)
- **可能原因** - **可能原因**
单板网络与Windows电脑不联通。 单板网络与Windows电脑不联通。
Windows电脑防火墙未允许Visual Studio Code联网。 Windows电脑防火墙未允许Visual Studio Code联网。
...@@ -45,29 +57,40 @@ ...@@ -45,29 +57,40 @@
1. 检查网线是否连接。 1. 检查网线是否连接。
2. 点击Windows防火墙。 2. 点击Windows防火墙。
**图6** 网络防火墙设置图 **图6** 网络防火墙设置图
![zh-cn_image_0000001227082322](figures/zh-cn_image_0000001227082322.png) ![zh-cn_image_0000001227082322](figures/zh-cn_image_0000001227082322.png)
3. 点击“允许应用通过防火墙”。 3. 点击“允许应用通过防火墙”。
**图7** 防火墙和网络保护界面图 **图7** 防火墙和网络保护界面图
![zh-cn_image_0000001271202457](figures/zh-cn_image_0000001271202457.png) ![zh-cn_image_0000001271202457](figures/zh-cn_image_0000001271202457.png)
4. 查找Visual Studio Code应用。 4. 查找Visual Studio Code应用。
**图8** 查找Visual Studio Code应用图 **图8** 查找Visual Studio Code应用图
![zh-cn_image_0000001271562445](figures/zh-cn_image_0000001271562445.png) ![zh-cn_image_0000001271562445](figures/zh-cn_image_0000001271562445.png)
5. 勾选Visual Studio Code的专用和公用网络的访问权限。 5. 勾选Visual Studio Code的专用和公用网络的访问权限。
**图9** 允许Visual Studio Code应用访问网络 **图9** 允许Visual Studio Code应用访问网络
![zh-cn_image_0000001271442273](figures/zh-cn_image_0000001271442273.png) ![zh-cn_image_0000001271442273](figures/zh-cn_image_0000001271442273.png)
## 烧写失败 ## 烧写失败
- **现象描述** - **现象描述**
点击烧写并选择串口后,出现无法烧写的情况。 点击烧写并选择串口后,出现无法烧写的情况。
- **可能原因** - **可能原因**
安装IDE插件DevEco后未重启。 安装IDE插件DevEco后未重启。
- **解决方法** - **解决方法**
重启IDE。 重启IDE。
...@@ -4,12 +4,15 @@ ...@@ -4,12 +4,15 @@
## Linux编译服务器终端输入不识别的命令时提示“ImportError: No module named apt_pkg” ## Linux编译服务器终端输入不识别的命令时提示“ImportError: No module named apt_pkg”
- **现象描述** - **现象描述**
Linux编译服务器终端输入不识别的命令时,提示"ImportError: No module named apt_pkg" Linux编译服务器终端输入不识别的命令时,提示"ImportError: No module named apt_pkg"
- **可能原因** - **可能原因**
python3 apt安装兼容性问题。 python3 apt安装兼容性问题。
- **解决办法** - **解决办法**
执行如下命令重新安装python3-apt。 执行如下命令重新安装python3-apt。
...@@ -22,6 +25,7 @@ ...@@ -22,6 +25,7 @@
## 编译构建过程中,提示找不到“python” ## 编译构建过程中,提示找不到“python”
- **现象描述** - **现象描述**
编译构建过程中出现以下错误: 编译构建过程中出现以下错误:
...@@ -30,9 +34,11 @@ ...@@ -30,9 +34,11 @@
``` ```
- **可能原因**1 - **可能原因**1
没有装python。 没有装python。
- **解决办法** - **解决办法**
请使用如下命令安装Python,下方以Python3.8为例。 请使用如下命令安装Python,下方以Python3.8为例。
...@@ -41,11 +47,13 @@ ...@@ -41,11 +47,13 @@
``` ```
- **可能原因2** - **可能原因2**
usr/bin目录下没有python软链接 usr/bin目录下没有python软链接
![zh-cn_image_0000001226922322](figures/zh-cn_image_0000001226922322.png) ![zh-cn_image_0000001226922322](figures/zh-cn_image_0000001226922322.png)
- **解决办法** - **解决办法**
请运行以下命令添加软链接: 请运行以下命令添加软链接:
...@@ -64,12 +72,15 @@ ...@@ -64,12 +72,15 @@
## 编译构建过程中,提示找不到“python3” ## 编译构建过程中,提示找不到“python3”
- **现象描述** - **现象描述**
![zh-cn_image_0000001226602414](figures/zh-cn_image_0000001226602414.png) ![zh-cn_image_0000001226602414](figures/zh-cn_image_0000001226602414.png)
- **可能原因** - **可能原因**
没有装python3。 没有装python3。
- **解决办法** - **解决办法**
请使用如下命令安装Python3。 请使用如下命令安装Python3。
...@@ -81,6 +92,7 @@ ...@@ -81,6 +92,7 @@
## 安装python3过程中,提示“configure: error: no acceptable C compiler found in $PATH” ## 安装python3过程中,提示“configure: error: no acceptable C compiler found in $PATH”
- **现象描述** - **现象描述**
安装python3过程中出现以下错误: 安装python3过程中出现以下错误:
...@@ -89,9 +101,11 @@ ...@@ -89,9 +101,11 @@
``` ```
- **可能原因** - **可能原因**
环境中未安装“gcc”。 环境中未安装“gcc”。
- **解决办法** - **解决办法**
1. 通过命令“apt-get install gcc”在线安装。 1. 通过命令“apt-get install gcc”在线安装。
2. 完成后,重新安装python3。 2. 完成后,重新安装python3。
...@@ -99,6 +113,7 @@ ...@@ -99,6 +113,7 @@
## 安装python3过程中,提示“-bash: make: command not found” ## 安装python3过程中,提示“-bash: make: command not found”
- **现象描述** - **现象描述**
安装python3过程中出现以下错误: 安装python3过程中出现以下错误:
...@@ -107,9 +122,11 @@ ...@@ -107,9 +122,11 @@
``` ```
- **可能原因** - **可能原因**
环境中未安装“make”。 环境中未安装“make”。
- **解决办法** - **解决办法**
1. 通过命令“apt-get install make”在线安装。 1. 通过命令“apt-get install make”在线安装。
2. 完成后,重新安装python3。 2. 完成后,重新安装python3。
...@@ -117,6 +134,7 @@ ...@@ -117,6 +134,7 @@
## 安装python3过程中,提示“No module named '_ctypes'” ## 安装python3过程中,提示“No module named '_ctypes'”
- **现象描述** - **现象描述**
安装python3过程中出现以下错误: 安装python3过程中出现以下错误:
...@@ -125,9 +143,11 @@ ...@@ -125,9 +143,11 @@
``` ```
- **可能原因** - **可能原因**
环境中未安装“libffi”和“libffi-devel”。 环境中未安装“libffi”和“libffi-devel”。
- **解决办法** - **解决办法**
1. 通过命令“apt-get install libffi\* -y”,在线安装。 1. 通过命令“apt-get install libffi\* -y”,在线安装。
2. 完成后,重新安装python3。 2. 完成后,重新安装python3。
...@@ -135,6 +155,7 @@ ...@@ -135,6 +155,7 @@
## 编译构建过程中,提示“No module named 'Crypto'” ## 编译构建过程中,提示“No module named 'Crypto'”
- **现象描述** - **现象描述**
编译构建过程中出现以下错误: 编译构建过程中出现以下错误:
...@@ -143,9 +164,11 @@ ...@@ -143,9 +164,11 @@
``` ```
- **可能原因** - **可能原因**
环境中未安装“Crypto”。 环境中未安装“Crypto”。
- **解决办法** - **解决办法**
方法1:通过命令“pip3 install Crypto”,在线安装。 方法1:通过命令“pip3 install Crypto”,在线安装。
方法2:离线安装。 方法2:离线安装。
......
...@@ -7,12 +7,12 @@ OpenHarmony标准系统适用于参考内存≥128MiB的设备。通过本文, ...@@ -7,12 +7,12 @@ OpenHarmony标准系统适用于参考内存≥128MiB的设备。通过本文,
考虑到开发者的开发习惯,OpenHarmony为开发者提供了以下两种入门指导: 考虑到开发者的开发习惯,OpenHarmony为开发者提供了以下两种入门指导:
- IDE方式:完全采用IDE(Deveco Device Tool)进行一站式开发,编译依赖工具的安装及编译、烧录、运行都通过IDE进行操作。 - IDE方式:完全采用IDE(DevEco Device Tool)进行一站式开发,编译依赖工具的安装及编译、烧录、运行都通过IDE进行操作。
- 安装包方式:通过命令行进行编译依赖工具的下载安装,编译操作也通过命令实现。烧录、运行等操作使用IDE。 - 安装包方式:通过命令行进行编译依赖工具的下载安装,编译操作也通过命令实现。烧录、运行等操作使用IDE。
OpenHarmony还为开发者提供了[Docker环境](../get-code/gettools-acquire.md),在很大程度上简化了编译前的环境配置,习惯使用安装包方式的开发者也可以选择Docker环境进行编译 。 OpenHarmony还为开发者提供了[Docker环境](../get-code/gettools-acquire.md),在很大程度上简化了编译前的环境配置,习惯使用安装包方式的开发者也可以选择Docker环境进行编译 。
本文采用安装包方式进行介绍,习惯使用Deveco Device Tool的开发者可参考[标准系统快速入门(IDE方式)](../quick-start/quickstart-standard-ide.md) 本文采用安装包方式进行介绍,习惯使用DevEco Device Tool的开发者可参考[标准系统快速入门(IDE方式)](../quick-start/quickstart-standard-ide.md)
## 开发环境 ## 开发环境
......
## 标准系统快速入门
- [标准系统入门概述](quickstart-standard-overview.md)
- [搭建标准系统环境](quickstart-standard-env-setup.md)
- 运行“Hello World”
- Hi3516开发板
- [编写“Hello World”程序](quickstart-standard-running-hi3516-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)
...@@ -38,6 +38,7 @@ OpenHarmony支持hb和build.sh两种编译方式。此处介绍hb方式,build. ...@@ -38,6 +38,7 @@ OpenHarmony支持hb和build.sh两种编译方式。此处介绍hb方式,build.
**图1** Hi3516编译设置图例 **图1** Hi3516编译设置图例
![zh-cn_image_0000001271562433](figures/zh-cn_image_0000001271562433.png) ![zh-cn_image_0000001271562433](figures/zh-cn_image_0000001271562433.png)
5. 编译结束后,出现“build success”字样,则证明构建成功。 5. 编译结束后,出现“build success”字样,则证明构建成功。
......
...@@ -31,6 +31,7 @@ productdefine/common ...@@ -31,6 +31,7 @@ productdefine/common
1. 创建目录,编写业务代码。 1. 创建目录,编写业务代码。
新建applications/sample/hello/src/helloworld.c目录及文件,代码如下所示,用户可以自定义修改打印内容(例如:修改World为OH)。其中helloworld.h包含字符串打印函数HelloPrint的声明。当前应用程序可支持标准C及C++的代码开发。 新建applications/sample/hello/src/helloworld.c目录及文件,代码如下所示,用户可以自定义修改打印内容(例如:修改World为OH)。其中helloworld.h包含字符串打印函数HelloPrint的声明。当前应用程序可支持标准C及C++的代码开发。
...@@ -75,6 +76,7 @@ productdefine/common ...@@ -75,6 +76,7 @@ productdefine/common
``` ```
2. 新建编译组织文件。 2. 新建编译组织文件。
1. 新建applications/sample/hello/BUILD.gn文件,内容如下所示: 1. 新建applications/sample/hello/BUILD.gn文件,内容如下所示:
``` ```
...@@ -136,6 +138,7 @@ productdefine/common ...@@ -136,6 +138,7 @@ productdefine/common
bundle.json文件包含两个部分,第一部分描述该部件所属子系统的信息,第二部分component则定义该部件构建相关配置。添加的时候需要指明该部件包含的模块sub_component,假如有提供给其它部件的接口,需要在inner_kits中说明,假如有测试用例,需要在test中说明,inner_kits与test没有也可以不添加。 bundle.json文件包含两个部分,第一部分描述该部件所属子系统的信息,第二部分component则定义该部件构建相关配置。添加的时候需要指明该部件包含的模块sub_component,假如有提供给其它部件的接口,需要在inner_kits中说明,假如有测试用例,需要在test中说明,inner_kits与test没有也可以不添加。
3. 修改子系统配置文件。 3. 修改子系统配置文件。
在build/subsystem_config.json中添加新建的子系统的配置。 在build/subsystem_config.json中添加新建的子系统的配置。
...@@ -147,6 +150,7 @@ productdefine/common ...@@ -147,6 +150,7 @@ productdefine/common
``` ```
4. 修改产品配置文件。 4. 修改产品配置文件。
在productdefine/common/products/Hi3516DV300.json中添加对应的hello部件,直接添加到原有部件后即可。 在productdefine/common/products/Hi3516DV300.json中添加对应的hello部件,直接添加到原有部件后即可。
......
...@@ -38,6 +38,7 @@ OpenHarmony支持hb和build.sh两种编译方式。此处介绍hb方式,build. ...@@ -38,6 +38,7 @@ OpenHarmony支持hb和build.sh两种编译方式。此处介绍hb方式,build.
**图1** RK3568编译设置图例 **图1** RK3568编译设置图例
![zh-cn_image_0000001226922302](figures/zh-cn_image_0000001226922302.png) ![zh-cn_image_0000001226922302](figures/zh-cn_image_0000001226922302.png)
5. 编译结束后,出现“rk3568 build success”字样,则证明构建成功。 5. 编译结束后,出现“rk3568 build success”字样,则证明构建成功。
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
在编译完成后,[保证Windows系统可以远程访问Ubuntu环境](../quick-start/quickstart-standard-env-setup.md#安装deveco-device-tool)的情况下,您还需要通过以下步骤导入源码后,方可进行烧录。 在编译完成后,[保证Windows系统可以远程访问Ubuntu环境](../quick-start/quickstart-standard-env-setup.md#安装deveco-device-tool)的情况下,您还需要通过以下步骤导入源码后,方可进行烧录。
1. 打开DevEco Device Tool,进入Home页,点击**Import Project**打开工程。 1. 打开DevEco Device Tool,进入Home页,点击**Import Project**打开工程。
![zh-cn_image_0000001171426014](figures/zh-cn_image_0000001171426014.png) ![zh-cn_image_0000001171426014](figures/zh-cn_image_0000001171426014.png)
2. 选择要导入的源码目录(需要访问Ubuntu下的源码目录),点击**Import**打开。 2. 选择要导入的源码目录(需要访问Ubuntu下的源码目录),点击**Import**打开。
...@@ -18,12 +19,15 @@ ...@@ -18,12 +19,15 @@
![zh-cn_image_0000001272032361](figures/zh-cn_image_0000001272032361.png) ![zh-cn_image_0000001272032361](figures/zh-cn_image_0000001272032361.png)
3. 如果您打开的目录不是DevEco Device Tool工程,则会出现如下提示框,点击**Import** 3. 如果您打开的目录不是DevEco Device Tool工程,则会出现如下提示框,点击**Import**
![zh-cn_image_0000001135394334](figures/zh-cn_image_0000001135394334.png) ![zh-cn_image_0000001135394334](figures/zh-cn_image_0000001135394334.png)
4. 在Select Project type界面,选择**Import from OpenHarmony Source** 4. 在Select Project type界面,选择**Import from OpenHarmony Source**
![zh-cn_image_0000001215743910](figures/zh-cn_image_0000001215743910.png) ![zh-cn_image_0000001215743910](figures/zh-cn_image_0000001215743910.png)
5. 在Import Project界面,选择**Product**后,会自动填充对应的MCU、Board、company和kernel信息,然后**ohosVersion**选择对应的OpenHarmony源码版本。此处选择rk3568。 5. 在Import Project界面,选择**Product**后,会自动填充对应的MCU、Board、company和kernel信息,然后**ohosVersion**选择对应的OpenHarmony源码版本。此处选择rk3568。
![zh-cn_image_0000001227712350](figures/zh-cn_image_0000001227712350.png) ![zh-cn_image_0000001227712350](figures/zh-cn_image_0000001227712350.png)
6. 点击**Open**打开工程或源码。 6. 点击**Open**打开工程或源码。
...@@ -49,6 +53,7 @@ ...@@ -49,6 +53,7 @@
> 该操作仅在远程模式(Windows+Ubuntu混合开发环境)中需要设置,如果采用本地模式(Windows开发环境或Ubuntu开发环境),则请跳过该步骤。 > 该操作仅在远程模式(Windows+Ubuntu混合开发环境)中需要设置,如果采用本地模式(Windows开发环境或Ubuntu开发环境),则请跳过该步骤。
4. 打开DevEco Device Tool,在QUICK ACCESS > DevEco Home > Projects中,点击**Settings**打开工程配置界面。 4. 打开DevEco Device Tool,在QUICK ACCESS > DevEco Home > Projects中,点击**Settings**打开工程配置界面。
![zh-cn_image_0000001239661509](figures/zh-cn_image_0000001239661509.png) ![zh-cn_image_0000001239661509](figures/zh-cn_image_0000001239661509.png)
5. 在“hh_scdy200”页签,设置烧录选项,包括upload_partitions和upload_protocol。 5. 在“hh_scdy200”页签,设置烧录选项,包括upload_partitions和upload_protocol。
...@@ -59,6 +64,7 @@ ...@@ -59,6 +64,7 @@
6. 分别检查待烧录文件的烧录信息,DevEco Device Tool已预置默认的烧录文件信息,可根据实际情况进行调整。待烧录文件包括:loader、parameter、uboot、boot_linux、system、vendor和userdata。 6. 分别检查待烧录文件的烧录信息,DevEco Device Tool已预置默认的烧录文件信息,可根据实际情况进行调整。待烧录文件包括:loader、parameter、uboot、boot_linux、system、vendor和userdata。
1. 在“hh_scdy200_loader”页签,在New Option选项中选择需要修改的项,例如partition_bin(烧录文件路径)、partition_addr(烧录文件起始地址)、partition_length(烧录文件分区长度)等。 1. 在“hh_scdy200_loader”页签,在New Option选项中选择需要修改的项,例如partition_bin(烧录文件路径)、partition_addr(烧录文件起始地址)、partition_length(烧录文件分区长度)等。
![zh-cn_image_0000001224173270](figures/zh-cn_image_0000001224173270.png) ![zh-cn_image_0000001224173270](figures/zh-cn_image_0000001224173270.png)
2. 然后在Partition Options中,分别修改上述步骤中选择的修改项。 2. 然后在Partition Options中,分别修改上述步骤中选择的修改项。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** > ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
...@@ -70,7 +76,9 @@ ...@@ -70,7 +76,9 @@
7. 所有的配置都修改完成后,在工程配置页签的顶部,点击**Save**进行保存。 7. 所有的配置都修改完成后,在工程配置页签的顶部,点击**Save**进行保存。
8. 点击工程的Open按钮,打开工程文件,点击![zh-cn_image_0000001239221905](figures/zh-cn_image_0000001239221905.png)图标,打开DevEco Device Tool界面,在“PROJECT TASKS”中,点击hh_scdy200下的**Upload**按钮,启动烧录。 8. 点击工程的Open按钮,打开工程文件,点击![zh-cn_image_0000001239221905](figures/zh-cn_image_0000001239221905.png)图标,打开DevEco Device Tool界面,在“PROJECT TASKS”中,点击hh_scdy200下的**Upload**按钮,启动烧录。
![zh-cn_image_0000001194821710](figures/zh-cn_image_0000001194821710.png) ![zh-cn_image_0000001194821710](figures/zh-cn_image_0000001194821710.png)
9. 等待开发板烧录完成,当屏幕提示如下信息时,表示烧录成功。 9. 等待开发板烧录完成,当屏幕提示如下信息时,表示烧录成功。
![zh-cn_image_0000001194984912](figures/zh-cn_image_0000001194984912.png) ![zh-cn_image_0000001194984912](figures/zh-cn_image_0000001194984912.png)
...@@ -29,6 +29,7 @@ productdefine/common ...@@ -29,6 +29,7 @@ productdefine/common
请在源码目录中通过以下步骤创建“Hello World”应用程序: 请在源码目录中通过以下步骤创建“Hello World”应用程序:
1. 创建目录,编写业务代码。 1. 创建目录,编写业务代码。
新建applications/sample/hello/src/helloworld.c目录及文件,代码如下所示,用户可以自定义修改打印内容(例如:修改World为OH)。其中helloworld.h包含字符串打印函数HelloPrint的声明。当前应用程序可支持标准C及C++的代码开发。 新建applications/sample/hello/src/helloworld.c目录及文件,代码如下所示,用户可以自定义修改打印内容(例如:修改World为OH)。其中helloworld.h包含字符串打印函数HelloPrint的声明。当前应用程序可支持标准C及C++的代码开发。
...@@ -73,6 +74,7 @@ productdefine/common ...@@ -73,6 +74,7 @@ productdefine/common
``` ```
2. 新建编译组织文件。 2. 新建编译组织文件。
1. 新建applications/sample/hello/BUILD.gn文件,内容如下所示: 1. 新建applications/sample/hello/BUILD.gn文件,内容如下所示:
``` ```
...@@ -134,6 +136,7 @@ productdefine/common ...@@ -134,6 +136,7 @@ productdefine/common
bundle.json文件包含两个部分,第一部分描述该部件所属子系统的信息,第二部分component则定义该部件构建相关配置。添加的时候需要指明该部件包含的模块sub_component,假如有提供给其它部件的接口,需要在inner_kits中说明,假如有测试用例,需要在test中说明,inner_kits与test没有也可以不添加。 bundle.json文件包含两个部分,第一部分描述该部件所属子系统的信息,第二部分component则定义该部件构建相关配置。添加的时候需要指明该部件包含的模块sub_component,假如有提供给其它部件的接口,需要在inner_kits中说明,假如有测试用例,需要在test中说明,inner_kits与test没有也可以不添加。
3. 修改子系统配置文件。 3. 修改子系统配置文件。
在build/subsystem_config.json中添加新建的子系统的配置。 在build/subsystem_config.json中添加新建的子系统的配置。
...@@ -145,6 +148,7 @@ productdefine/common ...@@ -145,6 +148,7 @@ productdefine/common
``` ```
4. 修改产品配置文件。 4. 修改产品配置文件。
在productdefine/common/products/rk3568.json中添加对应的hello部件,直接添加到原有部件后即可。 在productdefine/common/products/rk3568.json中添加对应的hello部件,直接添加到原有部件后即可。
``` ```
......
...@@ -93,6 +93,9 @@ ...@@ -93,6 +93,9 @@
- [HiSysEvent订阅指导](subsys-dfx-hisysevent-listening.md) - [HiSysEvent订阅指导](subsys-dfx-hisysevent-listening.md)
- [HiSysEvent查询指导](subsys-dfx-hisysevent-query.md) - [HiSysEvent查询指导](subsys-dfx-hisysevent-query.md)
- [HiSysEvent工具使用指导](subsys-dfx-hisysevent-tool.md) - [HiSysEvent工具使用指导](subsys-dfx-hisysevent-tool.md)
- [HiDumper开发指导](subsys-dfx-hidumper.md)
- [HiChecker开发指导](subsys-dfx-hichecker.md)
- [Faultlogger开发指导](subsys-dfx-faultlogger.md)
- [研发工具链](subsys-toolchain.md) - [研发工具链](subsys-toolchain.md)
- [bytrace使用指导](subsys-toolchain-bytrace-guide.md) - [bytrace使用指导](subsys-toolchain-bytrace-guide.md)
- [hdc\_std 使用指导](subsys-toolchain-hdc-guide.md) - [hdc\_std 使用指导](subsys-toolchain-hdc-guide.md)
......
# Faultlogger开发指导
## 概述
### 功能简介
Faultlogger是OpenHarmony为开发者提供的一个维测日志框架,能够为应用、元能力、系统服务进程崩溃故障提供统一检测、日志采集、日志存储、日志上报功能,为应用崩溃故障提供详细的维测日志用以辅助故障定位。
FaultLogger承载OpenHarmony系统上的故障记录功能,按照服务对象不同分别运行在两个部件中:
- Hiview部件中的服务:服务于应用层和native层的功能模块,功能是分类管理系统中发生的各类故障信息,并为模块提供查询故障的API。
- Faultloggerd部件中的服务:服务于崩溃进程,功能是收集C/C++运行时异常的守护进程和获取进程调用栈。
基于Faultlogger服务,进程崩溃的处理流程如下图所示:
**图1** 进程崩溃处理流程图
![zh-cn_image_0000001261812333](figure/zh-cn_image_0000001261812333.png)
1. 进程安装信号处理器后,通过DFX_SignalHandler函数检测并响应进程崩溃异常信号;
2. SignalHandler检测到异常信号后Fork出子进程,并运行ProcessDump程序开始dump崩溃进程和线程的堆栈信息;
3. ProcessDump程序在读取异常堆栈信息后将日志写入到Faultloggerd中的临时存储目录,进而生成完整的崩溃日志;
4. Faultloggerd根据需要将故障通过Hiview提供的AddFaultLog()接口进行上报,hiview将处理生成简化的崩溃日志,并上报Hisysevent事件。
基于这样的设计,在资源有限的小型系统上可只部署Faultloggerd,也依然可以获取用于定位崩溃问题的日志。
### 使用场景
Faultloggerd意在为开发者在开发测试过程中遇到的崩溃或卡死问题提供一种简单轻量的定位手段。
主要包含以下应用场景:
**表1** Faultloggerd模块应用场景
| 场景描述 | 使用工具 | 使用方式 |
| -------- | -------- | -------- |
| 了解函数的调用顺序 | DumpCatcher API | 参见:[使用DumpCatcher获取调用栈](#使用dumpcatcher获取调用栈) |
| 应用卡死/CPU占用高 | ProcessDump | 参见:[使用ProcessDump获取调用栈](#使用processdump获取调用栈) |
| 进程未处理信号崩溃 | 崩溃日志和addr2line工具 | 参见:[基于崩溃日志对问题进行定位](#基于崩溃日志对问题进行定位) |
## 使用DumpCatcher获取调用栈
### 接口说明
DumpCatcher可以抓取OpenHarmony指定进程(线程)的调用栈。
**表2** DumpCatcher接口说明
| 类 | 方法 | 描述 |
| -------- | -------- | -------- |
| DfxDumpCatcher | bool&nbsp;DumpCatch(const&nbsp;int&nbsp;pid,&nbsp;const&nbsp;int&nbsp;tid,&nbsp;std::string&amp;&nbsp;msg) | &nbsp;&nbsp;接口返回值:<br/>-&nbsp;true:回栈成功,回栈信息存储在msg字符串对象中;<br/>-&nbsp;false:回栈失败。<br/>&nbsp;&nbsp;输入参数:<br/>-&nbsp;pid:目标进程号;<br/>-&nbsp;tid:目标线程号,如果需要回栈进程中的所有线程,则tid设定为0;<br/>&nbsp;&nbsp;输出参数:<br/>-&nbsp;msg:如果回栈成功,则通过msg返回调用栈信息。 |
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 当调用此接口的进程id与目标pid不一致时需要调用者是管理员(system,root)用户。当抓取非本用户组进程调用栈时还需具备读取对方/proc/pid/maps及ptrace到对方进程的权限。
### 开发实例
系统应用开发者可以用DumpCatcher在自己的应用中获取指定进程(线程)的调用栈。下文以dumpcatcherdemo模块使用DumpCatcher接口获取调用栈作为实例进行讲解。
1. 编译构建文件添加dumpcatcher依赖:以/base/hiviewdfx/faultloggerd/example/BUILD.gn为例,在include_dirs中添加DfxDumpCatcher头文件路径,并在deps中添加“//base/hiviewdfx/faultloggerd/interfaces/innerkits/dump_catcher:lib_dfx_dump_catcher”模块依赖。
```
import("//base/hiviewdfx/faultloggerd/faultloggerd.gni")
import("//build/ohos.gni")
config("dumpcatcherdemo_config") {
visibility = [ ":*" ]
include_dirs = [
".",
"//utils/native/base/include",
"//base/hiviewdfx/faultloggerd/interfaces/innerkits/dump_catcher/include/", # 添加dumpcatcher头文件路径
]
}
ohos_executable("dumpcatcherdemo") { sources = [ "dump_catcher_demo.cpp" ] configs = [ ":dumpcatcherdemo_config" ] deps = [ "//base/hiviewdfx/faultloggerd/interfaces/innerkits/dump_catcher:lib_dfx_dump_catcher", # 添加dumpcathcer模块依赖 "//utils/native/base:utils", ] external_deps = [ "hilog_native:libhilog" ] install_enable = true part_name = "faultloggerd" subsystem_name = "hiviewdfx"
}
```
2. 头文件定义用到的函数:以/base/hiviewdfx/faultloggerd/example/dump_catcher_demo.h为例,本样例代码中,通过调用栈深度测试的测试函数来构造一个指定深度的调用栈。
```
#ifndef DUMP_CATCHER_DEMO_H
#define DUMP_CATCHER_DEMO_H
#include <inttypes.h>
#define NOINLINE __attribute__((noinline))
// 定义该宏函数用于自动生成函数调用链
#define GEN_TEST_FUNCTION(FuncNumA, FuncNumB) \
__attribute__((noinline)) int TestFunc##FuncNumA() \
{ \
return TestFunc##FuncNumB(); \
}
// 调用栈深度测试的测试函数
int TestFunc0(void);
int TestFunc1(void);
int TestFunc2(void);
int TestFunc3(void);
int TestFunc4(void);
int TestFunc5(void);
int TestFunc6(void);
int TestFunc7(void);
int TestFunc8(void);
int TestFunc9(void);
int TestFunc10(void);
#endif // DUMP_CATCHER_DEMO_H
```
3. 在源文件中调用DumpCatch接口:以/base/hiviewdfx/faultloggerd/example/dump_catcher_demo.cpp为例,引用dfx_dump_catcher.h头文件,声明DfxDumpCatcher对象,通过宏函数构造函数调用链,并最后调用DumpCatch接口方法,传入需要抓取调用栈的进程号、线程号。
```
#include "dump_catcher_demo.h"
#include <iostream>
#include <string>
#include <unistd.h>
// dfx_dump_catcher.h头文件引入
#include "dfx_dump_catcher.h"
using namespace std;
NOINLINE int TestFunc10(void)
{
OHOS::HiviewDFX::DfxDumpCatcher dumplog;
string msg = "";
bool ret = dumplog.DumpCatch(getpid(), gettid(), msg); // 调用DumpCatch接口获取调用栈
if (ret) {
cout << msg << endl;
}
return 0;
}
// 通过宏函数自动生成函数调用链
GEN_TEST_FUNCTION(0, 1)
GEN_TEST_FUNCTION(1, 2)
GEN_TEST_FUNCTION(2, 3)
GEN_TEST_FUNCTION(3, 4)
GEN_TEST_FUNCTION(4, 5)
GEN_TEST_FUNCTION(5, 6)
GEN_TEST_FUNCTION(6, 7)
GEN_TEST_FUNCTION(7, 8)
GEN_TEST_FUNCTION(8, 9)
GEN_TEST_FUNCTION(9, 10)
int main(int argc, char *argv[])
{
TestFunc0();
return 0;
}
```
## 使用ProcessDump获取调用栈
### 工具说明
ProcessDump是一个抓取调用栈的命令行工具,在OpenHarmony系统中可直接使用,该工具通过-p、-t参数指定进程和线程,命令执行后在命令行窗口打印指定进程的线程栈信息。
**表3** ProcessDump命令行工具使用说明
| 工具名称 | 命令行工具路径 | 执行命令 | 描述 |
| -------- | -------- | -------- | -------- |
| processdump | /system/bin | -&nbsp;processdump&nbsp;-p&nbsp;[pid]<br/>-&nbsp;processdump&nbsp;-p&nbsp;[pid]&nbsp;-t&nbsp;[tid] | **参数说明:**<br/>-&nbsp;-p&nbsp;[pid]:打印指定进程下面的所有线程栈信息。<br/>-&nbsp;-p&nbsp;[pid]&nbsp;-t&nbsp;[tid]:打印指定进程下面的指定线程信息。<br/>**返回值说明:**<br/>如果栈信息解析成功,则将信息显示到标准输出;失败则打印错误信息。 |
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 此工具需要在root下使用,或调用者有权限ptrace到目标进程,并读取目标进程的smaps。
### 使用实例
通过processdump命令行工具打印hiview进程的调用栈。
```
# ps -A | grep hiview
114 ? 00:00:00 hiview
# processdump -p 114 -t 114
Tid:114, Name:hiview
#00 pc 0000000000089824(00000000b6f44824) /system/lib/ld-musl-arm.so.1(ioctl+68)
#01 pc 000000000002a709(00000000b6c56709) /system/lib/libipc_core.z.so(_ZN4OHOS15BinderConnector11WriteBinderEmPv+16)
#02 pc 000000000002ba75(00000000b6c57a75) /system/lib/libipc_core.z.so(_ZN4OHOS13BinderInvoker18TransactWithDriverEb+224)
#03 pc 000000000002bb37(00000000b6c57b37) /system/lib/libipc_core.z.so(_ZN4OHOS13BinderInvoker13StartWorkLoopEv+22)
#04 pc 000000000002c211(00000000b6c58211) /system/lib/libipc_core.z.so(_ZN4OHOS13BinderInvoker10JoinThreadEb+36)
#05 pc 0000000000038d07(00000000004bcd07) /system/bin/hiview(_ZNSt3__h6vectorINS_9sub_matchINS_11__wrap_iterIPKcEEEENS_9allocatorIS6_EEE8__appendEj+596)
#06 pc 0000000000028655(00000000004ac655) /system/bin/hiview
#07 pc 00000000000c2b08(00000000b6f7db08) /system/lib/ld-musl-arm.so.1(__libc_start_main+116)
#08 pc 00000000000285f4(00000000004ac5f4) /system/bin/hiview
#09 pc 0000000000028580(00000000004ac580) /system/bin/hiview
```
## 基于崩溃日志对问题进行定位
开发者可以通过faultloggerd生成的崩溃堆栈日志进行问题定位。本章节将主要介绍如何利用addr2line工具进行崩溃问题定位。
1. 程序自崩溃或构造崩溃。
例如将如下代码植入自己的代码中,调用触发一个无效内存访问故障(SIGSEGV)。
```
NOINLINE int TriggerSegmentFaultException()
{
printf("test TriggerSegmentFaultException \n");
// 为构造崩溃,强制进行类型转换
int *a = (int *)(&RaiseAbort);
*a = SIGSEGV;
return 0;
}
```
2. 获取崩溃函数调用栈日志。
因为存在未处理的异常,进程会在 /data/log/faultlog/temp路径下生成临时的日志文件,其命名规则为:
```
cppcrash-pid-time
```
获取其生成的调用栈如下:
```
Pid:816
Uid:0
Process name:./crasher
Reason:Signal:SIGSEGV(SEGV_ACCERR)@0x0042d33d
Fault thread Info:
Tid:816, Name:crasher
r0:0042d33d r1:0000000b r2:1725d4c4 r3:b6f9fa84
r4:bec97e69 r5:b6fc0268 r6:0042d661 r7:bec97d60
r8:00000000 r9:00000000 r10:00000000
fp:bec97d20 ip:00000020 sp:bec97cd0 lr:b6f9fae4 pc:0042d32c
#00 pc 000000000000332c(000000000042d32c) /data/crasher(TriggerSegmentFaultException+15)
#01 pc 00000000000035c7(000000000042d5c7) /data/crasher(ParseAndDoCrash+277)
#02 pc 0000000000003689(000000000042d689) /data/crasher(main+39)
#03 pc 00000000000c3b08(00000000b6fbbb08) /system/lib/ld-musl-arm.so.1(__libc_start_main+116)
#04 pc 00000000000032f8(000000000042d2f8) /data/crasher(_start_c+112)
#05 pc 0000000000003284(000000000042d284) /data/crasher(_start+32)
```
3. 利用addr2line工具进行调用栈分析。
使用addr2line工具根据偏移地址解析行号:
```
root:~/OpenHarmony/out/hi3516dv300/exe.unstripped/hiviewdfx/faultloggerd$ addr2line -e crasher 000332c
base/hiviewdfx/faultloggerd/tools/crasher/dfx_crasher.c:57
```
这个崩溃是由赋值给一块不可写的区域导致的,代码行为dfx_crasher.c文件的57行,修改后可以避免发生此崩溃。
# HiChecker开发指导
## 概述
HiChecker是OpenHarmony提供的用于检测代码错误使用方式和运行结果的一种检测框架,可在应用和系统开发阶段用于运行时的缺陷扫描。
本章节内容对大型系统类设备(参考内存≥1GiB)、标准系统类设备(参考内存≥128MiB)适用。
## 开发指导
### 场景介绍
HiChecker的主要作用是给基于OpenHarmony的应用(包含系统和三方应用)开发者提供一套检测工具,用来检测应用程序开发过程中容易被人忽略的部分问题,包括应用关键线程调用耗时函数、应用进程中事件出现分发、执行超时以及应用进程中元能力资源泄露等,检测到的问题以日志记录或进程崩溃等形式展现出来以便开发者发现并修改相关问题。
### 接口说明
HiChecker提供的主要接口及功能如下:
**表1** HiChecker函数接口
| **类** | **方法(包括返回值、方法名、参数列表)** | **描述** |
| -------- | -------- | -------- |
| HiChecker | uint_64_t&nbsp;RULE_CAUTION_PRINT_LOG<br/>=&nbsp;1&lt;&lt;63; | 告警规则,当有告警时记录日志。 |
| uint_64_t&nbsp;RULE_CAUTION_TRIGGER_CRASH&nbsp;=&nbsp;1&lt;&lt;62; | 告警规则,当有告警时让应用退出。 |
| uint_64_t&nbsp;RULE_THREAD_CHECK_SLOW_PROCESS&nbsp;=&nbsp;1; | 检测规则,检测是否有耗时函数被调用。 |
| uint_64_t&nbsp;RULE_CHECK_SLOW_EVENT&nbsp;=&nbsp;1&lt;&lt;32; | 检测规则,检测有事件分发或处理超过规定的时间阈值。 |
| uint_64_t&nbsp;RULE_CHECK_ABILITY_CONNECTION_LEAK&nbsp;=&nbsp;1&lt;&lt;33; | 检测规则,检测ability泄露。 |
| AddRule(uint_64_t&nbsp;rule)&nbsp;:&nbsp;void | 添加一条或者多条规则到系统,系统根据添加的规则进行检测或反馈。 |
| RemoveRule(uint_64_t&nbsp;rule)&nbsp;:&nbsp;void | 删除一组规则,删除的规则后续将不再生效。 |
| GetRule()&nbsp;:&nbsp;uint_64_t | 获取当前线程规则、进程规则、告警规则的合集。 |
| Contains(uint_64_t&nbsp;rule)&nbsp;:&nbsp;bool | 当前已添加的规则集中是否包含了某一个特定的规则,&nbsp;如果传入的rule是线程级别的rule,仅查询当前线程中是否包含。 |
| NotifySlowProcess(std::string&nbsp;tag)&nbsp;:&nbsp;void | 通知有慢处理,通知系统当前代码调用了耗时较长的慢处理流程,以告知应用重要线程中尽量避开直接调用。 |
| NotifySlowEvent(std::string&nbsp;tag)&nbsp;:&nbsp;void | 通知发生事件分发超时或执行超时。 |
| NotifyAbilityConnectionLeak(Caution&nbsp;caution)&nbsp;:&nbsp;void | 通知发生AbilityConnection泄露。 |
| Caution | GetTriggerRule()&nbsp;:&nbsp;uint_64_t | 获取触发当前告警的检测规则。 |
| GetCautionMsg()&nbsp;:&nbsp;std::string | 获取更多辅助信息。 |
| GetStackTrace()&nbsp;:&nbsp;std::string | 获取告警触发时的堆栈信息。 |
### 开发实例
C++使用示例
1. 在使用hichecker功能相关的代码文件中,包含hichecker头文件:
```
#include "hichecker.h"
```
如果非DFX子系统,需要加上HiviewDFX域。
```
using namespace OHOS::HiviewDFX;
```
通过静态调用使用相关接口。
```
HiChecker::AddRule(Rule::RULE_THREAD_CHECK_SLOW_PROCESS); //添加一条规则
HiChecker::AddRule(Rule::RULE_CHECK_SLOW_EVENT | Rule::RULE_CAUTION_PRINT_LOG); //添加多条规则
HiChecker::Contains(Rule::RULE_CAUTION_PRINT_LOG); // true
HiChecker::GetRule(); //RULE_THREAD_CHECK_SLOW_PROCESS | RULE_CHECK_SLOW_EVENT | RULE_CAUTION_PRINT_LOG
```
当规则被触发时,根据添加的告警规则执行告警(默认为写日志)。
- RULE_CAUTION_PRINT_LOG
日志输出触发告警的规则、线程ID、线程名、堆栈等信息。
- RULE_CAUTION_TRIGGER_CRASH
进程直接退出,日志输出退出提示以及辅助信息。
通知接口的使用:
- NotifySlowProcess(std::string tag)
通知系统当前代码调用了耗时较长的慢处理流程,入参示例:
```
“threadId:xx,threadName:xx,actualTime:xx,delayTime:xx“
```
- NotifySlowEvent(std::string tag)
通知发生事件分发超时或执行超时,入参示例:
```
“threadId:xx,threadName:xx,eventName:xx,actualTime:xx,delayTime:xx“
```
- NotifyAbilityConnectionLeak(Caution caution)
通知发生AbilityConnection泄露,入参示例:传入一个Caution实例。
```
Caution caution(Rule::RULE_CHECK_ABILITY_CONNECTION_LEAK , cautionMessage, stackTrace)
// cautionMessage与其它通知接口类似
// stackTrace为发生泄露时的堆栈信息
```
2. 编译设置,在引入hichecker相关模块的BUILD.gn里增加子系统依赖:
```
include_dirs = [ "//base/hiviewdfx/interfaces/innerkits/libhichecker/include" ]
external_deps = [ "hichecker_native:libhichecker" ]
```
# HiDumper开发指导
## 概述
### 功能简介
HiDumper是OpenHarmony为开发、测试人员、IDE工具提供的系统信息获取工具,帮助开发者分析、定位问题。
本章节内容对大型系统类设备(参考内存≥1GiB)、标准系统类设备(参考内存≥128MiB)适用。
### 源码目录说明
```
/base/hiviewdfx/hidumper
├── frameworks # 框架代码
│ ├── native # 导出功能核心代码
│ │ │── inlude # 头文件目录
│ │ │── src # 源文件目录
│ │ │── common # 通用功能代码
│ │ │── executor # 导出过程执行器代码
│ │ │── factory # 跟进导出项生成导出执行器
│ │ │── manager # 导出管理核心代码
│ │ │── util # 工具类源代码
│── sa_profile # Hidumper sa属性文件
│── services # Hidumper服务源码
│ │── native # 服务C++源码
│ │── zidl # 通讯功能源码目录
│ │ │── include # 通讯功能头文件
│ │ │── src # 通讯功能源代码
├── test # 测试用例目录
│ ├── unittest # 单元测试代码
│ ├── moduletest # 模块级别测试代码
```
## 使用指导
### 命令参数说明
**表1** HiDumper命令参数说明
| 选项 | **描述** |
| -------- | -------- |
| -h | 帮助信息 |
| -t&nbsp;[timeout] | 超时时间,单位:秒。默认值是30s。如果设置为0表示无超时限定。 |
| -lc | 系统信息簇列表 |
| -ls | 系统元能力列表 |
| -c | 导出系统簇信息 |
| -c&nbsp;[base&nbsp;system] | 以base或system标签区分的系统簇信息导出 |
| -s | 导出全部系统元能力信息 |
| -s&nbsp;[SA0&nbsp;SA1] | 导出SA0、SA1等元能力id对应的元能力信息 |
| -s&nbsp;[SA]&nbsp;-a&nbsp;['-h'] | 以-h为参数导出SA指定的系统元能力信息 |
| -e | 导出Faultlog模块生成的崩溃日志 |
| --net | 导出网络信息 |
| --storage | 导出存储信息 |
| -p | 导出进程列表及全部进程信息 |
| -p&nbsp;[pid] | 导出指定进程号的进程全部信息 |
| --cpuusage&nbsp;[pid] | 导出CPU使用信息;如果指定pid则导出该进程的CPU使用信息 |
| --cpufreq | 导出实际的CPU频率 |
| --mem&nbsp;[pid] | 导出内存使用信息;如果指定pid则导出该进程的内存使用信息 |
| --zip | 将导出信息压缩到固定文件夹下 |
### 使用实例
HiDumper可以为开发者导出系统当前基本信息,通过这些基本信息可以定位分析问题。给子服务和元能力传递复杂参数时,参数需要在双引号中。
具体步骤如下:
1. 进入设备命令行,输入hidumper -h获取基本信息介绍,功能语法介绍。
```
hidumper -h
```
2. 输入hidumper -lc获取系统信息分类列表。
```
hidumper -lc
```
3. 输入hidumper -c获取系统base、system等所有分类信息。
```
hidumper -c
```
4. 输入 hidumper -c [base | system] 按 base 或 system 分类获取系统簇信息
```
hidumper -c base
hidumper -c system
```
5. 输入 hidumper -ls 命令获取系统中元能力列表
```
hidumper -ls
```
6. 输入 hidumper -s 命令获取系统全部元能力信息
```
hidumper -s
```
7. 运行 hidumper -s 3301 -a "-h" 命令获取id为3301的元能力的帮助
```
hidumper -s 3301 -a "-h"
```
8. 运行 hidumper -s 3008命令获取id为3008的元能力的全部信息
```
hidumper -s 3008
```
9. 运行 hidumper -e 命令获取Faultlog模块生成的崩溃历史信息
```
hidumper -e
```
10. 运行 hidumper --net 命令获取网络信息
```
hidumper --net
```
11. 运行 hidumper --storage 命令获取存储相关信息
```
hidumper --storage
```
12. 运行 hidumper -p 命令获取进程信息,包括进程、线程的列表和信息
```
hidumper -p
```
13. 运行 hidumper -p 1024 命令获取pid为1024的进程信息
```
hidumper -p 1024
```
14. 运行 hidumper --cpuusage [pid] 命令获取CPU的使用信息;如果指定了进程的pid,则只获取该进程的CPU使用信息
```
hidumper --cpuusage
hidumper --cpuusage 1024
```
15. 运行 hidumper --cpufreq 命令获取每一个CPU核实际运行的频率
```
hidumper --cpufreq
```
16. 运行 hidumper --mem [pid] 命令获取全部的内存使用信息;如果指定进程的pid,只获取该进程的内存使用情况
```
hidumper --mem [pid]
```
17. 运行 hidumper --zip 命令压缩信息数据到/data/dumper目录下
```
hidumper --zip
```
18. 运行 hidumper -t timeout 命令设置超时时间,单位:秒。默认值是30s。如果设置为0表示无超时限定。
```
hidumper -t [timeout]
```
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册