diff --git a/zh-cn/device-dev/quick-start/Readme-CN.md b/zh-cn/device-dev/quick-start/Readme-CN.md index 5ef52e476d38bc31e7e80ae4b7c4409d81083016..623dbf6c1335167f117d457d2dedf2bbbdaeb728 100644 --- a/zh-cn/device-dev/quick-start/Readme-CN.md +++ b/zh-cn/device-dev/quick-start/Readme-CN.md @@ -40,9 +40,6 @@ - [烧录](quickstart-ide-standard-running-rk3568-burning.md) - [运行](quickstart-ide-standard-running-rk3568-running.md) - 附录 - - 快速入门(安装包方式) - - [轻量和小型系统快速入门(安装包方式)](quickstart-docker-lite.md) - - [标准系统快速入门(安装包方式)](quickstart-standard-docker.md) - 开发板介绍 - [Hi3516开发板介绍](quickstart-ide-standard-board-introduction-hi3516.md) - [RK3568开发板介绍](quickstart-ide-standard-board-introduction-rk3568.md) diff --git a/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001271442129.png b/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001271442129.png deleted file mode 100644 index fbd3cb48f2cb35c02595be0293733644e16020bd..0000000000000000000000000000000000000000 Binary files a/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001271442129.png and /dev/null differ diff --git a/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001271442261.png b/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001271442261.png index fbd3cb48f2cb35c02595be0293733644e16020bd..c728580c57510fa2fe67a7e337492adae328d7ea 100644 Binary files a/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001271442261.png and b/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001271442261.png differ diff --git a/zh-cn/device-dev/quick-start/quickstart-docker-lite.md b/zh-cn/device-dev/quick-start/quickstart-docker-lite.md index 6e091cdbb85386c862f3e2e10bd0226be71b3dc1..aafc6e81655de9c5e21aebfd2d9a73aa6b788f25 100644 --- a/zh-cn/device-dev/quick-start/quickstart-docker-lite.md +++ b/zh-cn/device-dev/quick-start/quickstart-docker-lite.md @@ -1,4 +1,4 @@ -# 轻量和小型系统快速入门-安装包 +# 轻量和小型系统快速入门(安装包方式) diff --git a/zh-cn/device-dev/quick-start/quickstart-ide-lite-create-project.md b/zh-cn/device-dev/quick-start/quickstart-ide-lite-create-project.md index 9820c21f04f5ce23ed36a30f3dc7d80b299d01e6..6133d1ae6cd5de59b24126c076166cd618531c7b 100644 --- a/zh-cn/device-dev/quick-start/quickstart-ide-lite-create-project.md +++ b/zh-cn/device-dev/quick-start/quickstart-ide-lite-create-project.md @@ -21,9 +21,9 @@ 5. 在Import Project界面,选择**Product**后,会自动填充对应的MCU、Board、company和kernel信息,然后**ohosVersion**选择对应的OpenHarmony源码版本。下图以导入wifiiot_hispark_pegasus为例进行说明。 > ![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) diff --git a/zh-cn/device-dev/quick-start/quickstart-ide-lite-env-setup-win-ubuntu.md b/zh-cn/device-dev/quick-start/quickstart-ide-lite-env-setup-win-ubuntu.md index 2bf28b4adb6e0e984586b6056f95cf1a28b6fbc1..d08f1aa776dee42211a1ef886d24511355426e36 100644 --- a/zh-cn/device-dev/quick-start/quickstart-ide-lite-env-setup-win-ubuntu.md +++ b/zh-cn/device-dev/quick-start/quickstart-ide-lite-env-setup-win-ubuntu.md @@ -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安装成功。 diff --git a/zh-cn/device-dev/quick-start/quickstart-ide-lite-overview.md b/zh-cn/device-dev/quick-start/quickstart-ide-lite-overview.md index aeeed1e4c43745f82601582268643ff7fc193aa9..3f1b6b56cb815e006e5f4ce5ccf7b9f3a108ebc4 100644 --- a/zh-cn/device-dev/quick-start/quickstart-ide-lite-overview.md +++ b/zh-cn/device-dev/quick-start/quickstart-ide-lite-overview.md @@ -12,7 +12,7 @@ OpenHarmony轻量和小型系统适用于内存较小的IOT设备(参考内存 - 安装包方式:通过命令行进行编译依赖工具的下载安装,编译操作也通过命令实现。烧录、运行等操作使用IDE。 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)。 ## 开发环境 diff --git a/zh-cn/device-dev/quick-start/quickstart-ide-lite-sourcecode-acquire.md b/zh-cn/device-dev/quick-start/quickstart-ide-lite-sourcecode-acquire.md index 992c99c9d3729cfdf248b204a8a1234f34cedaf0..4558077deaccbf400db66d5d8c3a3da352df9b2c 100644 --- a/zh-cn/device-dev/quick-start/quickstart-ide-lite-sourcecode-acquire.md +++ b/zh-cn/device-dev/quick-start/quickstart-ide-lite-sourcecode-acquire.md @@ -10,7 +10,7 @@ 2. 注册码云SSH公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191)。 -3. 安装git客户端和git-lfs。(上述工具已在搭建环境章节安装。如已安装,请忽略) +3. 安装git客户端和git-lfs。 更新软件源: @@ -47,6 +47,7 @@ > Master主干为开发分支,开发者可通过Master主干获取最新特性。发布分支代码相对比较稳定,开发者可基于发布分支代码进行商用功能开发。 - **OpenHarmony主干代码获取** + 方式一(推荐):通过repo + ssh下载(需注册公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191))。 ``` @@ -65,10 +66,11 @@ ``` - **OpenHarmony发布分支代码获取** + OpenHarmony各个版本发布分支的源码获取方式请参考[Release-Notes](../../release-notes/Readme.md)。 -### 执行prebuilts +## 执行prebuilts 在源码根目录下执行prebuilts脚本,安装编译器及二进制工具。 diff --git a/zh-cn/device-dev/quick-start/quickstart-ide-lite-steps-hi3516-application-framework.md b/zh-cn/device-dev/quick-start/quickstart-ide-lite-steps-hi3516-application-framework.md index ef824fc8fb8e6f7c8d7bf8cd619d1a7a34d107da..928049b41efe3db8ca86b6b36dd276421ec285d6 100644 --- a/zh-cn/device-dev/quick-start/quickstart-ide-lite-steps-hi3516-application-framework.md +++ b/zh-cn/device-dev/quick-start/quickstart-ide-lite-steps-hi3516-application-framework.md @@ -23,6 +23,7 @@ applications/sample/hello 请在源码目录中通过以下步骤创建“Hello World”应用程序: 1. 新建目录及源码。 + 新建**applications/sample/hello/src/helloworld.c**目录及文件,代码如下所示,用户可以自定义修改打印内容(例如:修改OHOS为World)。当前应用程序可支持标准C及C++的代码开发。 @@ -40,6 +41,7 @@ applications/sample/hello ``` 2. 新建编译组织文件。 + 新建**applications/sample/hello/BUILD.gn**文件,内容如下所示: @@ -55,6 +57,7 @@ applications/sample/hello ``` 3. 添加新组件。 + 修改文件**build/lite/components/applications.json**,添加组件hello_world_app的配置,如下所示为applications.json文件片段,"\#\#start\#\#"和"\#\#end\#\#"之间为新增配置("\#\#start\#\#"和"\#\#end\#\#"仅用来标识位置,添加完配置后删除这两行): @@ -117,6 +120,7 @@ applications/sample/hello ``` 4. 修改单板配置文件。 + 修改文件**vendor/hisilicon/hispark_taurus/config.json**,新增hello_world_app组件的条目,如下所示代码片段为applications子系统配置,"\#\#start\#\#"和"\#\#end\#\#"之间为新增条目("\#\#start\#\#"和"\#\#end\#\#"仅用来标识位置,添加完配置后删除这两行): diff --git a/zh-cn/device-dev/quick-start/quickstart-ide-lite-steps-hi3516-running.md b/zh-cn/device-dev/quick-start/quickstart-ide-lite-steps-hi3516-running.md index 353bf9f1581f24175927eeca7947b3ad44296396..75a7b6809c19bbaf3ca27251b38985911cd7de91 100644 --- a/zh-cn/device-dev/quick-start/quickstart-ide-lite-steps-hi3516-running.md +++ b/zh-cn/device-dev/quick-start/quickstart-ide-lite-steps-hi3516-running.md @@ -12,12 +12,15 @@ ![zh-cn_image_0000001226794644](figures/zh-cn_image_0000001226794644.png) 2. 提示如下图中的重启开发板的提示信息时,重启开发板,然后在控制台输出“SUCCESS”表示设置成功。 + ![zh-cn_image_0000001227114584](figures/zh-cn_image_0000001227114584.png) 3. 在任务栏点击**Monitor**按钮,启动串口工具。 + ![zh-cn_image_0000001271234705](figures/zh-cn_image_0000001271234705.png) 4. 当界面打印回显信息,点击Enter按钮,直到界面显示OHOS \#信息,表示系统启动成功。 + ![zh-cn_image_0000001271594709](figures/zh-cn_image_0000001271594709.png) diff --git a/zh-cn/device-dev/quick-start/quickstart-ide-lite-steps-hi3861-application-framework.md b/zh-cn/device-dev/quick-start/quickstart-ide-lite-steps-hi3861-application-framework.md index 023fca41a0925099ea0a94f119e45545f17cfd27..f9adf40d8b20a2fd6ff4610a3b1416805bf7e581 100644 --- a/zh-cn/device-dev/quick-start/quickstart-ide-lite-steps-hi3861-application-framework.md +++ b/zh-cn/device-dev/quick-start/quickstart-ide-lite-steps-hi3861-application-framework.md @@ -5,6 +5,7 @@ 1. 确定目录结构。 + 开发者编写业务时,务必先在./applications/sample/wifi-iot/app路径下新建一个目录(或一套目录结构),用于存放业务源码文件。 例如:在app下新增业务my_first_app,其中hello_world.c为业务代码,BUILD.gn为编译脚本,具体规划目录结构如下: @@ -22,6 +23,7 @@ ``` 2. 编写业务代码。 + 新建./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 @@ ``` 3. 编写用于将业务构建成静态库的BUILD.gn文件。 + 新建./applications/sample/wifi-iot/app/my_first_app下的BUILD.gn文件,并完成如下配置。 如步骤1所述,BUILD.gn文件由三部分内容(目标、源文件、头文件路径)构成,需由开发者完成填写。 @@ -58,6 +61,7 @@ - include_dirs中指定source所需要依赖的.h文件路径。 4. 添加新组件。 + 修改文件**build/lite/components/applications.json**,添加组件hello_world_app的配置,如下所示为applications.json文件片段,"\#\#start\#\#"和"\#\#end\#\#"之间为新增配置("\#\#start\#\#"和"\#\#end\#\#"仅用来标识位置,添加完配置后删除这两行): @@ -120,6 +124,7 @@ ``` 5. 修改单板配置文件。 + 修改文件**vendor/hisilicon/hispark_pegasus/config.json**,新增hello_world_app组件的条目,如下所示代码片段为applications子系统配置,"\#\#start\#\#"和"\#\#end\#\#"之间为新增条目("\#\#start\#\#"和"\#\#end\#\#"仅用来标识位置,添加完配置后删除这两行): diff --git a/zh-cn/device-dev/quick-start/quickstart-ide-lite-steps-hi3861-netconfig.md b/zh-cn/device-dev/quick-start/quickstart-ide-lite-steps-hi3861-netconfig.md index b9262ff4b85b92f07cb1137c8c95e3fe2db10baf..24949702fdf8e661836459439037f2ee07520829 100644 --- a/zh-cn/device-dev/quick-start/quickstart-ide-lite-steps-hi3861-netconfig.md +++ b/zh-cn/device-dev/quick-start/quickstart-ide-lite-steps-hi3861-netconfig.md @@ -5,11 +5,15 @@ 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功能。 @@ -31,4 +35,5 @@ ``` **图3** Hi3861 WLAN模组联网成功示意图 + ![zh-cn_image_0000001227114612](figures/zh-cn_image_0000001227114612.png) diff --git a/zh-cn/device-dev/quick-start/quickstart-ide-standard-board-introduction-hi3516.md b/zh-cn/device-dev/quick-start/quickstart-ide-standard-board-introduction-hi3516.md index 697ac159e15e3d19107ca8cb5677916e5c9d0100..fe7e28246dea89f0f07384d7ce5d1401a1229972 100644 --- a/zh-cn/device-dev/quick-start/quickstart-ide-standard-board-introduction-hi3516.md +++ b/zh-cn/device-dev/quick-start/quickstart-ide-standard-board-introduction-hi3516.md @@ -6,6 +6,7 @@ Hi3516DV300是新一代行业专用Smart HD IP摄像机SOC,集成新一代ISP(Image Signal Processor)、H.265视频压缩编码器、高性能NNIE引擎,在低码率、高画质、智能处理和分析、低功耗等方面引领行业水平。 **图1** Hi3516单板正面外观图 + ![zh-cn_image_0000001227082182](figures/zh-cn_image_0000001227082182.png) diff --git a/zh-cn/device-dev/quick-start/quickstart-ide-standard-board-introduction-rk3568.md b/zh-cn/device-dev/quick-start/quickstart-ide-standard-board-introduction-rk3568.md index f67dd25dd4cb79fcecfccfb21ba2bc26c1f76c8f..538e87de8e98b52b799cdfd6f7671220ccf8d7f2 100644 --- a/zh-cn/device-dev/quick-start/quickstart-ide-standard-board-introduction-rk3568.md +++ b/zh-cn/device-dev/quick-start/quickstart-ide-standard-board-introduction-rk3568.md @@ -6,7 +6,7 @@ RK3568开发板基于Rockchip RK3568芯片,集成双核心架构GPU以及高效能NPU;搭载四核64位Cortex-A55处理器,采用22nm先进工艺,主频高达2.0GHz;支持蓝牙、Wi-Fi、音频、视频和摄像头等功能,拥有丰富的扩展接口,支持多种视频输入输出接口;配置双千兆自适应RJ45以太网口,可满足NVR、工业网关等多网口产品需求。 **图1** RK3568开发板正面 - ![zh-cn_image_0000001271442129](figures/zh-cn_image_0000001271442129.png) + ![zh-cn_image_0000001271442129](figures/zh-cn_image_0000001271442261.png) **图2** RK3568开发板背面 ![zh-cn_image_0000001271322293](figures/zh-cn_image_0000001271322293.png) diff --git a/zh-cn/device-dev/quick-start/quickstart-ide-standard-create-project.md b/zh-cn/device-dev/quick-start/quickstart-ide-standard-create-project.md index 684c3c56dd23050d74fcf90d1e6be6e41eebb6e3..a2a960e99b95916a2293c63c47372cc8c992e596 100644 --- a/zh-cn/device-dev/quick-start/quickstart-ide-standard-create-project.md +++ b/zh-cn/device-dev/quick-start/quickstart-ide-standard-create-project.md @@ -21,9 +21,9 @@ 5. 在Import Project界面,选择**Product**后,会自动填充对应的MCU、Board、company和kernel信息,然后**ohosVersion**选择对应的OpenHarmony源码版本。下图以导入Hi3516DV300为例进行展示 。 > ![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) diff --git a/zh-cn/device-dev/quick-start/quickstart-ide-standard-env-setup-win-ubuntu.md b/zh-cn/device-dev/quick-start/quickstart-ide-standard-env-setup-win-ubuntu.md index 116c938b327cc6c762d1e882c875b276601a6642..ea31b2dfe324de6b5ab3ebdff6bc8afbab034d31 100644 --- a/zh-cn/device-dev/quick-start/quickstart-ide-standard-env-setup-win-ubuntu.md +++ b/zh-cn/device-dev/quick-start/quickstart-ide-standard-env-setup-win-ubuntu.md @@ -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安装成功。 diff --git a/zh-cn/device-dev/quick-start/quickstart-ide-standard-overview.md b/zh-cn/device-dev/quick-start/quickstart-ide-standard-overview.md index 2f3537d4a3081a50af2b789937c33ebaa478a036..a63a062889da8bdf6e09308e52abb0a511060977 100644 --- a/zh-cn/device-dev/quick-start/quickstart-ide-standard-overview.md +++ b/zh-cn/device-dev/quick-start/quickstart-ide-standard-overview.md @@ -12,7 +12,7 @@ OpenHarmony标准系统适用于参考内存≥128MiB的设备。通过本文, - 安装包方式:通过命令行进行编译依赖工具的下载安装,编译操作也通过命令实现。烧录、运行等操作使用IDE。 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)。 ## 开发环境 diff --git a/zh-cn/device-dev/quick-start/quickstart-ide-standard-running-hi3516-create.md b/zh-cn/device-dev/quick-start/quickstart-ide-standard-running-hi3516-create.md index 2a72e8ff9a9fd2f5166214021270237f53fa32bc..c7048712ad9dab9171b7069981843f62d564f21f 100644 --- a/zh-cn/device-dev/quick-start/quickstart-ide-standard-running-hi3516-create.md +++ b/zh-cn/device-dev/quick-start/quickstart-ide-standard-running-hi3516-create.md @@ -31,6 +31,7 @@ productdefine/common 1. 创建目录,编写业务代码。 + 新建applications/sample/hello/src/helloworld.c目录及文件,代码如下所示,用户可以自定义修改打印内容(例如:修改World为OHOS)。其中helloworld.h包含字符串打印函数HelloPrint的声明。当前应用程序可支持标准C及C++的代码开发。 @@ -75,6 +76,7 @@ productdefine/common ``` 2. 新建编译组织文件。 + 1. 新建applications/sample/hello/BUILD.gn文件,内容如下所示: ``` @@ -136,6 +138,7 @@ productdefine/common bundle.json文件包含两个部分,第一部分描述该部件所属子系统的信息,第二部分component则定义该部件构建相关配置。添加的时候需要指明该部件包含的模块sub_component,假如有提供给其它部件的接口,需要在inner_kits中说明,假如有测试用例,需要在test中说明,inner_kits与test没有也可以不添加。 3. 修改子系统配置文件。 + 在build/subsystem_config.json中添加新建的子系统的配置。 @@ -147,6 +150,7 @@ productdefine/common ``` 4. 修改产品配置文件。 + 在productdefine\common\products\Hi3516DV300.json中添加对应的hello部件,直接添加到原有部件后即可。 diff --git a/zh-cn/device-dev/quick-start/quickstart-ide-standard-running-rk3568-build.md b/zh-cn/device-dev/quick-start/quickstart-ide-standard-running-rk3568-build.md index a12939ff92479c07d507a55b1d400d59211b5766..321f4955fe0fd376c13b9484e7b2808c109d9c99 100644 --- a/zh-cn/device-dev/quick-start/quickstart-ide-standard-running-rk3568-build.md +++ b/zh-cn/device-dev/quick-start/quickstart-ide-standard-running-rk3568-build.md @@ -2,6 +2,7 @@ 1. 在Projects中,点击**Settings**按钮,进入HH-SCDY200配置界面。 + ![zh-cn_image_0000001221036768](figures/zh-cn_image_0000001221036768.png) 2. 在toolchain页签中,DevEco Device Tool会自动检测依赖的编译工具链是否完备,如果提示部分工具缺失,可点击**SetUp**按钮,自动安装所需工具链。 @@ -15,12 +16,15 @@ ![zh-cn_image_0000001265676877](figures/zh-cn_image_0000001265676877.png) 3. 在“hh_scdy200”配置页签中,设置源码的编译类型**build_type**,默认为"debug类型,请根据需要进行修改。然后点击**Save**按钮进行保存。 + ![zh-cn_image_0000001265956897](figures/zh-cn_image_0000001265956897.png) 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) 编译完成后,可以在工程的**out**目录下,查看编译生成的文件,用于后续的[RK3568开发板烧录](https://device.harmonyos.com/cn/docs/documentation/guide/ide-rk3568-upload-0000001239220669)。 diff --git a/zh-cn/device-dev/quick-start/quickstart-ide-standard-running-rk3568-burning.md b/zh-cn/device-dev/quick-start/quickstart-ide-standard-running-rk3568-burning.md index c7a8a120ec1311e509e5d42b9c2c01c8d7b1305a..7ba3557cb8ee93b639efda18dd18e7f7180e5fbc 100644 --- a/zh-cn/device-dev/quick-start/quickstart-ide-standard-running-rk3568-burning.md +++ b/zh-cn/device-dev/quick-start/quickstart-ide-standard-running-rk3568-burning.md @@ -17,6 +17,7 @@ > 该操作仅在远程模式(Windows+Ubuntu混合开发环境)中需要设置,如果采用本地模式(Windows开发环境或Ubuntu开发环境),则请跳过该步骤。 4. 打开DevEco Device Tool,在QUICK ACCESS > DevEco Home > Projects中,点击**Settings**打开工程配置界面。 + ![zh-cn_image_0000001239661509](figures/zh-cn_image_0000001239661509.png) 5. 在“hh_scdy200”页签,设置烧录选项,包括upload_partitions和upload_protocol。 @@ -27,6 +28,7 @@ 6. 分别检查待烧录文件的烧录信息,DevEco Device Tool已预置默认的烧录文件信息,可根据实际情况进行调整。待烧录文件包括:loader、parameter、uboot、boot_linux、system、vendor和userdata。 1. 在“hh_scdy200_loader”页签,在New Option选项中选择需要修改的项,例如partition_bin(烧录文件路径)、partition_addr(烧录文件起始地址)、partition_length(烧录文件分区长度)等。 + ![zh-cn_image_0000001224173270](figures/zh-cn_image_0000001224173270.png) 2. 然后在Partition Options中,分别修改上述步骤中选择的修改项。 > ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** @@ -38,7 +40,9 @@ 7. 所有的配置都修改完成后,在工程配置页签的顶部,点击**Save**进行保存。 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) 9. 等待开发板烧录完成,当屏幕提示如下信息时,表示烧录成功。 + ![zh-cn_image_0000001194984912](figures/zh-cn_image_0000001194984912.png) diff --git a/zh-cn/device-dev/quick-start/quickstart-ide-standard-running-rk3568-create.md b/zh-cn/device-dev/quick-start/quickstart-ide-standard-running-rk3568-create.md index 24504ab8403272d1bf5ac9c695e98579240df8f8..40beafc0ed8a27762ef6afbcdfb83ef93deb1fd0 100644 --- a/zh-cn/device-dev/quick-start/quickstart-ide-standard-running-rk3568-create.md +++ b/zh-cn/device-dev/quick-start/quickstart-ide-standard-running-rk3568-create.md @@ -30,6 +30,7 @@ productdefine/common 请在源码目录中通过以下步骤创建“Hello World”应用程序: 1. 创建目录,编写业务代码。 + 新建applications/sample/hello/src/helloworld.c目录及文件,代码如下所示,用户可以自定义修改打印内容(例如:修改World为OHOS)。其中helloworld.h包含字符串打印函数HelloPrint的声明。当前应用程序可支持标准C及C++的代码开发。 @@ -74,6 +75,7 @@ productdefine/common ``` 2. 新建编译组织文件。 + 1. 新建applications/sample/hello/BUILD.gn文件,内容如下所示: ``` @@ -135,6 +137,7 @@ productdefine/common bundle.json文件包含两个部分,第一部分描述该部件所属子系统的信息,第二部分component则定义该部件构建相关配置。添加的时候需要指明该部件包含的模块sub_component,假如有提供给其它部件的接口,需要在inner_kits中说明,假如有测试用例,需要在test中说明,inner_kits与test没有也可以不添加。 3. 修改子系统配置文件。 + 在build/subsystem_config.json中添加新建的子系统的配置。 @@ -146,6 +149,7 @@ productdefine/common ``` 4. 修改产品配置文件。 + 在productdefine\common\products\rk3568.json中添加对应的hello部件,直接添加到原有部件后即可。 ``` diff --git a/zh-cn/device-dev/quick-start/quickstart-ide-standard-sourcecode-acquire.md b/zh-cn/device-dev/quick-start/quickstart-ide-standard-sourcecode-acquire.md index 59843fe019d59a205bf116a1708b12471c1c7d3f..aba0a3439fffb157d2b72498621bfb2d6576eeff 100644 --- a/zh-cn/device-dev/quick-start/quickstart-ide-standard-sourcecode-acquire.md +++ b/zh-cn/device-dev/quick-start/quickstart-ide-standard-sourcecode-acquire.md @@ -10,7 +10,7 @@ 2. 注册码云SSH公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191)。 -3. 安装git客户端和git-lfs。(上述工具已在搭建环境章节安装。如已安装,请忽略) +3. 安装git客户端和git-lfs。 更新软件源: @@ -41,12 +41,13 @@ ``` -## 获取方式 +## 获取源码 > ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** > Master主干为开发分支,开发者可通过Master主干获取最新特性。发布分支代码相对比较稳定,开发者可基于发布分支代码进行商用功能开发。 - **OpenHarmony主干代码获取** + 方式一(推荐):通过repo + ssh下载(需注册公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191))。 ``` @@ -65,10 +66,11 @@ ``` - **OpenHarmony发布分支代码获取** + OpenHarmony各个版本发布分支的源码获取方式请参考[Release-Notes](../../release-notes/Readme.md)。 -### 执行prebuilts +## 执行prebuilts 在源码根目录下执行prebuilts脚本,安装编译器及二进制工具。 diff --git a/zh-cn/device-dev/quick-start/quickstart-lite-env-setup.md b/zh-cn/device-dev/quick-start/quickstart-lite-env-setup.md index f8a8d1d3a146e7012eecc5b565b3c79329cadf9b..fe9191801bf985819cda71f947ecf89bb43482f0 100644 --- a/zh-cn/device-dev/quick-start/quickstart-lite-env-setup.md +++ b/zh-cn/device-dev/quick-start/quickstart-lite-env-setup.md @@ -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安装成功。 @@ -273,6 +273,7 @@ > Master主干为开发分支,开发者可通过Master主干获取最新特性。发布分支代码相对比较稳定,开发者可基于发布分支代码进行商用功能开发。 - **OpenHarmony主干代码获取** + 方式一(推荐):通过repo + ssh下载(需注册公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191))。 ``` @@ -291,6 +292,7 @@ ``` - **OpenHarmony发布分支代码获取** + OpenHarmony各个版本发布分支的源码获取方式请参考[Release-Notes](../../release-notes/Readme.md)。 diff --git a/zh-cn/device-dev/quick-start/quickstart-lite-faq-burning.md b/zh-cn/device-dev/quick-start/quickstart-lite-faq-burning.md index e453b94f6f6cf01146057df9d819da873cf29349..7a74fe4715ea6790de95cf542c7180f6f9d78a86 100644 --- a/zh-cn/device-dev/quick-start/quickstart-lite-faq-burning.md +++ b/zh-cn/device-dev/quick-start/quickstart-lite-faq-burning.md @@ -4,38 +4,49 @@ ## 烧写选择串口后提示“Error: Opening COMxx: Access denied” - **现象描述** + 点击烧写并选择串口后,出现Error: Opening COMxx: Access denied。 **图1** 打开串口失败图 ![zh-cn_image_0000001226634728](figures/zh-cn_image_0000001226634728.png) - **可能原因** + 串口已经被占用。 - **解决办法** 1. 按图依次选择下拉框,查找带有serial-xx的终端。 + **图2** 查找是否存在占用串口的终端 + ![zh-cn_image_0000001226954644](figures/zh-cn_image_0000001226954644.png) 2. 点击标号中的垃圾桶图标,关闭串口。 + **图3** 关闭串口终端 + ![zh-cn_image_0000001271234761](figures/zh-cn_image_0000001271234761.png) 3. 重新点击烧写,选择串口并开始烧写程序。 + **图4** 重新启动烧写任务 + ![zh-cn_image_0000001271594765](figures/zh-cn_image_0000001271594765.png) ## Windows电脑与单板网络连接失败 - **现象描述** + 点击烧写并选择串口后,无法获取文件。 **图5** 网络不通,单板无法获取文件图 + ![zh-cn_image_0000001271234757](figures/zh-cn_image_0000001271234757.png) - **可能原因** + 单板网络与Windows电脑不联通。 Windows电脑防火墙未允许Visual Studio Code联网。 @@ -45,51 +56,67 @@ 1. 检查网线是否连接。 2. 点击Windows防火墙。 + **图6** 网络防火墙设置图 + ![zh-cn_image_0000001226634732](figures/zh-cn_image_0000001226634732.png) 3. 点击“允许应用通过防火墙”。 + **图7** 防火墙和网络保护界面图 + ![zh-cn_image_0000001271354749](figures/zh-cn_image_0000001271354749.png) 4. 查找Visual Studio Code应用。 + **图8** 查找Visual Studio Code应用图 + ![zh-cn_image_0000001271234765](figures/zh-cn_image_0000001271234765.png) 5. 勾选Visual Studio Code的专用和公用网络的访问权限。 + **图9** 允许Visual Studio Code应用访问网络 + ![zh-cn_image_0000001271474585](figures/zh-cn_image_0000001271474585.png) ## 烧写失败 - **现象描述** + 点击烧写并选择串口后,出现无法烧写的情况。 - **可能原因** + 安装IDE插件DevEco后未重启。 - **解决方法** + 重启IDE。 ## (Hi3516)串口无回显 - **现象描述** + 串口显示已连接,重启单板后,回车无任何回显。 - **可能原因1** + 串口连接错误。 - **解决办法** + 修改串口号。 请查看设备管理器,确认连接单板的串口与终端中连接串口是否一致,若不一致,请按[串口访问失败的步骤](#烧写选择串口后提示error-opening-comxx-access-denied)修改串口号。 - **可能原因2** + 单板U-boot被损坏。 - **解决办法** + 烧写U-boot。 若上述步骤依旧无法连接串口,可能由于单板U-boot损坏,按下述步骤烧写U-boot。 @@ -103,8 +130,11 @@ > Hi3518EV300:device\hisilicon\hispark_aries\sdk_liteos\uboot\out\boot\u-boot-hi3518ev300.bin 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文件进行烧写。 3. 烧写完成后,登录串口如下图所示。 + **图10** U-boot烧写完成串口显示图 + ![zh-cn_image_0000001271234753](figures/zh-cn_image_0000001271234753.png) diff --git a/zh-cn/device-dev/quick-start/quickstart-lite-faq-compose.md b/zh-cn/device-dev/quick-start/quickstart-lite-faq-compose.md index 6ac98c5c566fd6bfcc0f5a8c676aa0e02c84ebdc..af9022ffa62633c6987cb7ca0fb7f170486b3619 100644 --- a/zh-cn/device-dev/quick-start/quickstart-lite-faq-compose.md +++ b/zh-cn/device-dev/quick-start/quickstart-lite-faq-compose.md @@ -4,12 +4,15 @@ ## Linux编译服务器终端输入不识别的命令时提示“ImportError: No module named apt_pkg” - **现象描述** + Linux编译服务器终端输入不识别的命令时,提示"ImportError: No module named apt_pkg" - **可能原因** + python3 apt安装兼容性问题。 - **解决办法** + 执行如下命令重新安装python3-apt。 @@ -22,6 +25,7 @@ ## 编译构建过程中,提示找不到“python” - **现象描述** + 编译构建过程中出现以下错误: @@ -30,9 +34,11 @@ ``` - **可能原因**1 + 没有装python。 - **解决办法** + 请使用如下命令安装Python,下方以Python3.8为例。 @@ -41,11 +47,13 @@ ``` - **可能原因2** + usr/bin目录下没有python软链接 ![zh-cn_image_0000001271354745](figures/zh-cn_image_0000001271354745.png) - **解决办法** + 请运行以下命令添加软链接: @@ -64,12 +72,15 @@ ## 编译构建过程中,提示找不到“python3” - **现象描述** + ![zh-cn_image_0000001227114640](figures/zh-cn_image_0000001227114640.png) - **可能原因** + 没有装python3。 - **解决办法** + 请使用如下命令安装Python3。 @@ -81,6 +92,7 @@ ## 安装python3过程中,提示“configure: error: no acceptable C compiler found in $PATH” - **现象描述** + 安装python3过程中出现以下错误: @@ -89,9 +101,11 @@ ``` - **可能原因** + 环境中未安装“gcc”。 - **解决办法** + 1. 通过命令“apt-get install gcc”在线安装。 2. 完成后,重新安装python3。 @@ -99,6 +113,7 @@ ## 安装python3过程中,提示“-bash: make: command not found” - **现象描述** + 安装python3过程中出现以下错误: @@ -107,9 +122,11 @@ ``` - **可能原因** + 环境中未安装“make”。 - **解决办法** + 1. 通过命令“apt-get install make”在线安装。 2. 完成后,重新安装python3。 @@ -117,6 +134,7 @@ ## 安装python3过程中,提示“No module named '_ctypes'” - **现象描述** + 安装python3过程中出现以下错误: @@ -125,9 +143,11 @@ ``` - **可能原因** + 环境中未安装“libffi”和“libffi-devel”。 - **解决办法** + 1. 通过命令“apt-get install libffi\* -y”,在线安装。 2. 完成后,重新安装python3。 @@ -135,6 +155,7 @@ ## 编译构建过程中,提示“No module named 'Crypto'” - **现象描述** + 编译构建过程中出现以下错误: @@ -143,9 +164,11 @@ ``` - **可能原因** + 环境中未安装“Crypto”。 - **解决办法** + 方法1:通过命令“pip3 install Crypto”,在线安装。 方法2:离线安装。 @@ -162,6 +185,7 @@ ## (Hi3861)编译构建过程中,提示“No module named 'ecdsa'” - **现象描述** + 编译构建过程中出现以下错误: @@ -170,9 +194,11 @@ ``` - **可能原因** + 环境中未安装“ecdsa”。 - **解决办法** + 方法1:通过命令“pip3 install ecdsa”,在线安装。 方法2:离线安装 @@ -189,6 +215,7 @@ ## (Hi3861)编译构建过程中,提示“Could not find a version that satisfies the requirement six>=1.9.0” - **现象描述** + 编译构建过程中出现以下错误: @@ -197,9 +224,11 @@ ``` - **可能原因** + 环境中未安装合适的“six”。 - **解决办法** + 方法1:通过命令“pip3 install six”,在线安装。 方法2:离线安装。 @@ -216,6 +245,7 @@ ## (Hi3861)编译构建过程中,提示找不到“-lgcc” - **现象描述** + 编译构建过程中出现以下错误: @@ -224,6 +254,7 @@ ``` - **可能原因** + 交叉编译器gcc_riscv32的PATH添加错误,如下,在"bin"后多添加了一个“/”,应该删除。 @@ -232,6 +263,7 @@ ``` - **解决办法** + 重新修改gcc_riscv32的PATH,将多余的“/”删除。 @@ -243,6 +275,7 @@ ## (Hi3861)安装kconfiglib时,遇到lsb_release错误 - **现象描述** + 安装kconfiglib过程中遇到如下错误打印: @@ -251,7 +284,9 @@ ``` - **可能原因** + lsb_release模块基于的python版本与现有python版本不一致。 - **解决办法** + 执行"find / -name lsb_release",找到lsb_release位置并删除,如:"sudo rm -rf /usr/bin/lsb_release"。 diff --git a/zh-cn/device-dev/quick-start/quickstart-lite-overview.md b/zh-cn/device-dev/quick-start/quickstart-lite-overview.md index 4051bf51f8aed3f6cba3f80915295824f3f4c771..291ad0accad339b86416c7656c503b7021110e6a 100644 --- a/zh-cn/device-dev/quick-start/quickstart-lite-overview.md +++ b/zh-cn/device-dev/quick-start/quickstart-lite-overview.md @@ -10,12 +10,12 @@ OpenHarmony轻量和小型系统适用于内存较小的IOT设备(参考内存 考虑到开发者的开发习惯,OpenHarmony为开发者提供了以下两种入门指导: -- IDE方式:完全采用IDE(Deveco Device Tool)进行一站式开发,编译依赖工具的安装及编译、烧录、运行都通过IDE进行操作。 +- IDE方式:完全采用IDE(DevEco Device Tool)进行一站式开发,编译依赖工具的安装及编译、烧录、运行都通过IDE进行操作。 - 安装包方式:通过命令行进行编译依赖工具的下载安装,编译操作也通过命令实现。烧录、运行等操作使用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)。 ## 开发环境 diff --git a/zh-cn/device-dev/quick-start/quickstart-lite-package-directory.md b/zh-cn/device-dev/quick-start/quickstart-lite-package-directory.md new file mode 100644 index 0000000000000000000000000000000000000000..900fdcccf9837674e9c9cd72d63395884bebfd97 --- /dev/null +++ b/zh-cn/device-dev/quick-start/quickstart-lite-package-directory.md @@ -0,0 +1,27 @@ +## 轻量和小型系统快速入门(安装包方式) +- [轻量与小型系统入门概述](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) diff --git a/zh-cn/device-dev/quick-start/quickstart-lite-steps-hi3516-application-framework.md b/zh-cn/device-dev/quick-start/quickstart-lite-steps-hi3516-application-framework.md index ef824fc8fb8e6f7c8d7bf8cd619d1a7a34d107da..928049b41efe3db8ca86b6b36dd276421ec285d6 100644 --- a/zh-cn/device-dev/quick-start/quickstart-lite-steps-hi3516-application-framework.md +++ b/zh-cn/device-dev/quick-start/quickstart-lite-steps-hi3516-application-framework.md @@ -23,6 +23,7 @@ applications/sample/hello 请在源码目录中通过以下步骤创建“Hello World”应用程序: 1. 新建目录及源码。 + 新建**applications/sample/hello/src/helloworld.c**目录及文件,代码如下所示,用户可以自定义修改打印内容(例如:修改OHOS为World)。当前应用程序可支持标准C及C++的代码开发。 @@ -40,6 +41,7 @@ applications/sample/hello ``` 2. 新建编译组织文件。 + 新建**applications/sample/hello/BUILD.gn**文件,内容如下所示: @@ -55,6 +57,7 @@ applications/sample/hello ``` 3. 添加新组件。 + 修改文件**build/lite/components/applications.json**,添加组件hello_world_app的配置,如下所示为applications.json文件片段,"\#\#start\#\#"和"\#\#end\#\#"之间为新增配置("\#\#start\#\#"和"\#\#end\#\#"仅用来标识位置,添加完配置后删除这两行): @@ -117,6 +120,7 @@ applications/sample/hello ``` 4. 修改单板配置文件。 + 修改文件**vendor/hisilicon/hispark_taurus/config.json**,新增hello_world_app组件的条目,如下所示代码片段为applications子系统配置,"\#\#start\#\#"和"\#\#end\#\#"之间为新增条目("\#\#start\#\#"和"\#\#end\#\#"仅用来标识位置,添加完配置后删除这两行): diff --git a/zh-cn/device-dev/quick-start/quickstart-lite-steps-hi3516-building.md b/zh-cn/device-dev/quick-start/quickstart-lite-steps-hi3516-building.md index eb1637b718847ace23df761ee99bec9f58595c5d..2dbfb17f1ab2f4a6d3c4efd8961cf85ee4bafa4c 100644 --- a/zh-cn/device-dev/quick-start/quickstart-lite-steps-hi3516-building.md +++ b/zh-cn/device-dev/quick-start/quickstart-lite-steps-hi3516-building.md @@ -38,6 +38,7 @@ OpenHarmony支持hb和build.sh两种编译方式。此处介绍hb方式,build. **图1** Hi3516编译设置图例 + ![zh-cn_image_0000001271594749](figures/zh-cn_image_0000001271594749.png) 5. 编译结束后,出现“build success”字样,则证明构建成功。 diff --git a/zh-cn/device-dev/quick-start/quickstart-lite-steps-hi3516-running.md b/zh-cn/device-dev/quick-start/quickstart-lite-steps-hi3516-running.md index a830410fbf41a00b57ce137110acf5df6164ccec..aa37823b274564ff411d185529152dc07bb8aa49 100644 --- a/zh-cn/device-dev/quick-start/quickstart-lite-steps-hi3516-running.md +++ b/zh-cn/device-dev/quick-start/quickstart-lite-steps-hi3516-running.md @@ -5,19 +5,22 @@ 在完成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_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) diff --git a/zh-cn/device-dev/quick-start/quickstart-lite-steps-hi3516-setting.md b/zh-cn/device-dev/quick-start/quickstart-lite-steps-hi3516-setting.md index 6bea6069bf0347346ef1e90eda7e8c314d42c656..7ca83ab6a0b16495f32fefcf01f8590a72e8ab74 100644 --- a/zh-cn/device-dev/quick-start/quickstart-lite-steps-hi3516-setting.md +++ b/zh-cn/device-dev/quick-start/quickstart-lite-steps-hi3516-setting.md @@ -27,4 +27,4 @@ Hi3516DV300开发板对Linux服务器通用环境配置需要的工具及其用 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#安装必要的库和工具)环节完成安装,此处无需再进行安装。 diff --git a/zh-cn/device-dev/quick-start/quickstart-lite-steps-hi3861-application-framework.md b/zh-cn/device-dev/quick-start/quickstart-lite-steps-hi3861-application-framework.md index 268d097afdd10780fac6ea821645f3d932d47b71..f9adf40d8b20a2fd6ff4610a3b1416805bf7e581 100644 --- a/zh-cn/device-dev/quick-start/quickstart-lite-steps-hi3861-application-framework.md +++ b/zh-cn/device-dev/quick-start/quickstart-lite-steps-hi3861-application-framework.md @@ -5,6 +5,7 @@ 1. 确定目录结构。 + 开发者编写业务时,务必先在./applications/sample/wifi-iot/app路径下新建一个目录(或一套目录结构),用于存放业务源码文件。 例如:在app下新增业务my_first_app,其中hello_world.c为业务代码,BUILD.gn为编译脚本,具体规划目录结构如下: @@ -22,6 +23,7 @@ ``` 2. 编写业务代码。 + 新建./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 @@ ``` 3. 编写用于将业务构建成静态库的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 @@ - include_dirs中指定source所需要依赖的.h文件路径。 4. 添加新组件。 + 修改文件**build/lite/components/applications.json**,添加组件hello_world_app的配置,如下所示为applications.json文件片段,"\#\#start\#\#"和"\#\#end\#\#"之间为新增配置("\#\#start\#\#"和"\#\#end\#\#"仅用来标识位置,添加完配置后删除这两行): @@ -120,6 +124,7 @@ ``` 5. 修改单板配置文件。 + 修改文件**vendor/hisilicon/hispark_pegasus/config.json**,新增hello_world_app组件的条目,如下所示代码片段为applications子系统配置,"\#\#start\#\#"和"\#\#end\#\#"之间为新增条目("\#\#start\#\#"和"\#\#end\#\#"仅用来标识位置,添加完配置后删除这两行): diff --git a/zh-cn/device-dev/quick-start/quickstart-lite-steps-hi3861-building.md b/zh-cn/device-dev/quick-start/quickstart-lite-steps-hi3861-building.md index 3e44436ad88d4d3ba20c29d7fa873f781d32de4d..121531a82c30007fb99aa538a54186890960281f 100644 --- a/zh-cn/device-dev/quick-start/quickstart-lite-steps-hi3861-building.md +++ b/zh-cn/device-dev/quick-start/quickstart-lite-steps-hi3861-building.md @@ -37,6 +37,7 @@ OpenHarmony支持hb和build.sh两种编译方式。此处介绍hb方式,build. ``` **图1** Hi3861编译设置图例 + ![zh-cn_image_0000001226634716](figures/zh-cn_image_0000001226634716.png) 5. 编译结束后,出现“build success”字样,则证明构建成功。 diff --git a/zh-cn/device-dev/quick-start/quickstart-lite-steps-hi3861-netconfig.md b/zh-cn/device-dev/quick-start/quickstart-lite-steps-hi3861-netconfig.md index 4074626b3f5ce72fcd486b43bebefbd807a52526..df0476f026ea94e874217c578d28eb9ec2224d7f 100644 --- a/zh-cn/device-dev/quick-start/quickstart-lite-steps-hi3861-netconfig.md +++ b/zh-cn/device-dev/quick-start/quickstart-lite-steps-hi3861-netconfig.md @@ -5,11 +5,15 @@ 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功能。 @@ -35,4 +39,5 @@ ``` **图3** Hi3861 WLAN模组联网成功示意图 + ![zh-cn_image_0000001226954648](figures/zh-cn_image_0000001226954648.png) diff --git a/zh-cn/device-dev/quick-start/quickstart-lite-steps-hi3861-setting.md b/zh-cn/device-dev/quick-start/quickstart-lite-steps-hi3861-setting.md index 662521525dc8ca426f6d1b1e95e1750e26e6d41f..f059ef1160e496cb83f43d5b4b124b9b91521126 100644 --- a/zh-cn/device-dev/quick-start/quickstart-lite-steps-hi3861-setting.md +++ b/zh-cn/device-dev/quick-start/quickstart-lite-steps-hi3861-setting.md @@ -178,63 +178,63 @@ Hi3861 WLAN模组需要的工具如下表所示。 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 - ``` + ``` + 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 - ``` + ``` + 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 .. - ``` + ``` + 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 .. - ``` + ``` + 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 - ``` + ``` + 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 + ``` 15. 设置环境变量。 - > ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** - > 如果直接采用编译好的riscv32 gcc包,请先执行以下命令将压缩包解压到根目录: - > - > ``` - > tar -xvf gcc_riscv32-linux-7.3.0.tar.gz -C ~ - > ``` + > ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** + > 如果直接采用编译好的riscv32 gcc包,请先执行以下命令将压缩包解压到根目录: + > + > ``` + > tar -xvf gcc_riscv32-linux-7.3.0.tar.gz -C ~ + > ``` - ``` - vim ~/.bashrc - ``` + ``` + vim ~/.bashrc + ``` - 将以下命令拷贝到.bashrc文件的最后一行,保存并退出。 + 将以下命令拷贝到.bashrc文件的最后一行,保存并退出。 - ``` - export PATH=~/gcc_riscv32/bin:$PATH - ``` + ``` + export PATH=~/gcc_riscv32/bin:$PATH + ``` 16. 生效环境变量。 - - ``` - source ~/.bashrc - ``` + + ``` + source ~/.bashrc + ``` 17. Shell命令行中输入如下命令,如果能正确显示编译器版本号,表明编译器安装成功。 - ``` - riscv32-unknown-elf-gcc -v - ``` + ``` + riscv32-unknown-elf-gcc -v + ``` diff --git a/zh-cn/device-dev/quick-start/quickstart-standard-board-introduction-hi3516.md b/zh-cn/device-dev/quick-start/quickstart-standard-board-introduction-hi3516.md index fec43eee72f057d81f67ca087521509b32fb8135..15aec7eb2652f98587fd2756d50f3bf87a1dbe8c 100644 --- a/zh-cn/device-dev/quick-start/quickstart-standard-board-introduction-hi3516.md +++ b/zh-cn/device-dev/quick-start/quickstart-standard-board-introduction-hi3516.md @@ -6,6 +6,7 @@ Hi3516DV300是新一代行业专用Smart HD IP摄像机SOC,集成新一代ISP(Image Signal Processor)、H.265视频压缩编码器、高性能NNIE引擎,在低码率、高画质、智能处理和分析、低功耗等方面引领行业水平。 **图1** Hi3516单板正面外观图 + ![zh-cn_image_0000001226922318](figures/zh-cn_image_0000001226922318.png) diff --git a/zh-cn/device-dev/quick-start/quickstart-standard-docker.md b/zh-cn/device-dev/quick-start/quickstart-standard-docker.md index 51a2f089be17798cbfc3ffde2c83555cf3bd016a..f1e5c764a287fcde725b1f6dcc6819f86aff1d7f 100644 --- a/zh-cn/device-dev/quick-start/quickstart-standard-docker.md +++ b/zh-cn/device-dev/quick-start/quickstart-standard-docker.md @@ -1,4 +1,4 @@ -# 标准系统快速入门-安装包 +# 标准系统快速入门(安装包方式) diff --git a/zh-cn/device-dev/quick-start/quickstart-standard-env-setup.md b/zh-cn/device-dev/quick-start/quickstart-standard-env-setup.md index e5ec2cc578573c768d394ca397c21fb95b732648..af990f632eb7627e24d7a1a960f56b1bdea36b68 100644 --- a/zh-cn/device-dev/quick-start/quickstart-standard-env-setup.md +++ b/zh-cn/device-dev/quick-start/quickstart-standard-env-setup.md @@ -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安装成功。 @@ -273,6 +273,7 @@ > Master主干为开发分支,开发者可通过Master主干获取最新特性。发布分支代码相对比较稳定,开发者可基于发布分支代码进行商用功能开发。 - **OpenHarmony主干代码获取** + 方式一(推荐):通过repo + ssh下载(需注册公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191))。 ``` @@ -291,6 +292,7 @@ ``` - **OpenHarmony发布分支代码获取** + OpenHarmony各个版本发布分支的源码获取方式请参考[Release-Notes](../../release-notes/Readme.md)。 diff --git a/zh-cn/device-dev/quick-start/quickstart-standard-faq-burning.md b/zh-cn/device-dev/quick-start/quickstart-standard-faq-burning.md index cc00c563c8c1264440e1ddd90ebe49ea82e37781..8cf38f261f4d8e637a7d91dcf3c1e2c635817260 100644 --- a/zh-cn/device-dev/quick-start/quickstart-standard-faq-burning.md +++ b/zh-cn/device-dev/quick-start/quickstart-standard-faq-burning.md @@ -4,38 +4,50 @@ ## 烧写选择串口后提示“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联网。 @@ -45,29 +57,40 @@ 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。 diff --git a/zh-cn/device-dev/quick-start/quickstart-standard-faq-compose.md b/zh-cn/device-dev/quick-start/quickstart-standard-faq-compose.md index 0ecd50095265f1bfa514b2282973f4be71b89184..b131626e75438b292390fa0315a83ec6d4cc3225 100644 --- a/zh-cn/device-dev/quick-start/quickstart-standard-faq-compose.md +++ b/zh-cn/device-dev/quick-start/quickstart-standard-faq-compose.md @@ -4,12 +4,15 @@ ## Linux编译服务器终端输入不识别的命令时提示“ImportError: No module named apt_pkg” - **现象描述** + Linux编译服务器终端输入不识别的命令时,提示"ImportError: No module named apt_pkg" - **可能原因** + python3 apt安装兼容性问题。 - **解决办法** + 执行如下命令重新安装python3-apt。 @@ -22,6 +25,7 @@ ## 编译构建过程中,提示找不到“python” - **现象描述** + 编译构建过程中出现以下错误: @@ -30,9 +34,11 @@ ``` - **可能原因**1 + 没有装python。 - **解决办法** + 请使用如下命令安装Python,下方以Python3.8为例。 @@ -41,11 +47,13 @@ ``` - **可能原因2** + usr/bin目录下没有python软链接 ![zh-cn_image_0000001226922322](figures/zh-cn_image_0000001226922322.png) - **解决办法** + 请运行以下命令添加软链接: @@ -64,12 +72,15 @@ ## 编译构建过程中,提示找不到“python3” - **现象描述** + ![zh-cn_image_0000001226602414](figures/zh-cn_image_0000001226602414.png) - **可能原因** + 没有装python3。 - **解决办法** + 请使用如下命令安装Python3。 @@ -81,6 +92,7 @@ ## 安装python3过程中,提示“configure: error: no acceptable C compiler found in $PATH” - **现象描述** + 安装python3过程中出现以下错误: @@ -89,9 +101,11 @@ ``` - **可能原因** + 环境中未安装“gcc”。 - **解决办法** + 1. 通过命令“apt-get install gcc”在线安装。 2. 完成后,重新安装python3。 @@ -99,6 +113,7 @@ ## 安装python3过程中,提示“-bash: make: command not found” - **现象描述** + 安装python3过程中出现以下错误: @@ -107,9 +122,11 @@ ``` - **可能原因** + 环境中未安装“make”。 - **解决办法** + 1. 通过命令“apt-get install make”在线安装。 2. 完成后,重新安装python3。 @@ -117,6 +134,7 @@ ## 安装python3过程中,提示“No module named '_ctypes'” - **现象描述** + 安装python3过程中出现以下错误: @@ -125,9 +143,11 @@ ``` - **可能原因** + 环境中未安装“libffi”和“libffi-devel”。 - **解决办法** + 1. 通过命令“apt-get install libffi\* -y”,在线安装。 2. 完成后,重新安装python3。 @@ -135,6 +155,7 @@ ## 编译构建过程中,提示“No module named 'Crypto'” - **现象描述** + 编译构建过程中出现以下错误: @@ -143,9 +164,11 @@ ``` - **可能原因** + 环境中未安装“Crypto”。 - **解决办法** + 方法1:通过命令“pip3 install Crypto”,在线安装。 方法2:离线安装。 diff --git a/zh-cn/device-dev/quick-start/quickstart-standard-overview.md b/zh-cn/device-dev/quick-start/quickstart-standard-overview.md index e81b2e5784a59dd4b9da1c20f405c4145b6f394a..c3e39d1ca784e4c584d62008c10b7efb9622f1a3 100644 --- a/zh-cn/device-dev/quick-start/quickstart-standard-overview.md +++ b/zh-cn/device-dev/quick-start/quickstart-standard-overview.md @@ -7,12 +7,12 @@ OpenHarmony标准系统适用于参考内存≥128MiB的设备。通过本文, 考虑到开发者的开发习惯,OpenHarmony为开发者提供了以下两种入门指导: -- IDE方式:完全采用IDE(Deveco Device Tool)进行一站式开发,编译依赖工具的安装及编译、烧录、运行都通过IDE进行操作。 +- IDE方式:完全采用IDE(DevEco Device Tool)进行一站式开发,编译依赖工具的安装及编译、烧录、运行都通过IDE进行操作。 - 安装包方式:通过命令行进行编译依赖工具的下载安装,编译操作也通过命令实现。烧录、运行等操作使用IDE。 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)。 ## 开发环境 diff --git a/zh-cn/device-dev/quick-start/quickstart-standard-package-directory.md b/zh-cn/device-dev/quick-start/quickstart-standard-package-directory.md new file mode 100644 index 0000000000000000000000000000000000000000..6b236d50280d1afc8fbed004103dfc7c61272713 --- /dev/null +++ b/zh-cn/device-dev/quick-start/quickstart-standard-package-directory.md @@ -0,0 +1,23 @@ +## 标准系统快速入门 +- [标准系统入门概述](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) diff --git a/zh-cn/device-dev/quick-start/quickstart-standard-running-hi3516-build.md b/zh-cn/device-dev/quick-start/quickstart-standard-running-hi3516-build.md index 53eba98be6f17ecacd4e52c3ab08488f15c28bc2..b337e2559b85e8c920bb0f08d99428af9fa6eeff 100644 --- a/zh-cn/device-dev/quick-start/quickstart-standard-running-hi3516-build.md +++ b/zh-cn/device-dev/quick-start/quickstart-standard-running-hi3516-build.md @@ -38,6 +38,7 @@ OpenHarmony支持hb和build.sh两种编译方式。此处介绍hb方式,build. **图1** Hi3516编译设置图例 + ![zh-cn_image_0000001271562433](figures/zh-cn_image_0000001271562433.png) 5. 编译结束后,出现“build success”字样,则证明构建成功。 diff --git a/zh-cn/device-dev/quick-start/quickstart-standard-running-hi3516-create.md b/zh-cn/device-dev/quick-start/quickstart-standard-running-hi3516-create.md index d9632828c8155aaae5fd6be0f6400108d2a30db8..b0cef24b4d2dba209ff14b954380a9e5061f91fc 100644 --- a/zh-cn/device-dev/quick-start/quickstart-standard-running-hi3516-create.md +++ b/zh-cn/device-dev/quick-start/quickstart-standard-running-hi3516-create.md @@ -31,6 +31,7 @@ productdefine/common 1. 创建目录,编写业务代码。 + 新建applications/sample/hello/src/helloworld.c目录及文件,代码如下所示,用户可以自定义修改打印内容(例如:修改World为OH)。其中helloworld.h包含字符串打印函数HelloPrint的声明。当前应用程序可支持标准C及C++的代码开发。 @@ -75,6 +76,7 @@ productdefine/common ``` 2. 新建编译组织文件。 + 1. 新建applications/sample/hello/BUILD.gn文件,内容如下所示: ``` @@ -136,6 +138,7 @@ productdefine/common bundle.json文件包含两个部分,第一部分描述该部件所属子系统的信息,第二部分component则定义该部件构建相关配置。添加的时候需要指明该部件包含的模块sub_component,假如有提供给其它部件的接口,需要在inner_kits中说明,假如有测试用例,需要在test中说明,inner_kits与test没有也可以不添加。 3. 修改子系统配置文件。 + 在build/subsystem_config.json中添加新建的子系统的配置。 @@ -147,6 +150,7 @@ productdefine/common ``` 4. 修改产品配置文件。 + 在productdefine/common/products/Hi3516DV300.json中添加对应的hello部件,直接添加到原有部件后即可。 diff --git a/zh-cn/device-dev/quick-start/quickstart-standard-running-rk3568-build.md b/zh-cn/device-dev/quick-start/quickstart-standard-running-rk3568-build.md index e3c5016f842ee4a8ded521a858fd7bfe3c1203fa..8313b3e3eee7676118dfe6ad0e7f50fd71b7479e 100644 --- a/zh-cn/device-dev/quick-start/quickstart-standard-running-rk3568-build.md +++ b/zh-cn/device-dev/quick-start/quickstart-standard-running-rk3568-build.md @@ -38,6 +38,7 @@ OpenHarmony支持hb和build.sh两种编译方式。此处介绍hb方式,build. **图1** RK3568编译设置图例 + ![zh-cn_image_0000001226922302](figures/zh-cn_image_0000001226922302.png) 5. 编译结束后,出现“rk3568 build success”字样,则证明构建成功。 diff --git a/zh-cn/device-dev/quick-start/quickstart-standard-running-rk3568-burning.md b/zh-cn/device-dev/quick-start/quickstart-standard-running-rk3568-burning.md index b0d02f482270e43a56f1417638f9bc4ffd188c3b..28776f2f15107747533688f68a5ac2d7f292e3a9 100644 --- a/zh-cn/device-dev/quick-start/quickstart-standard-running-rk3568-burning.md +++ b/zh-cn/device-dev/quick-start/quickstart-standard-running-rk3568-burning.md @@ -9,6 +9,7 @@ 在编译完成后,[保证Windows系统可以远程访问Ubuntu环境](../quick-start/quickstart-standard-env-setup.md#安装deveco-device-tool)的情况下,您还需要通过以下步骤导入源码后,方可进行烧录。 1. 打开DevEco Device Tool,进入Home页,点击**Import Project**打开工程。 + ![zh-cn_image_0000001171426014](figures/zh-cn_image_0000001171426014.png) 2. 选择要导入的源码目录(需要访问Ubuntu下的源码目录),点击**Import**打开。 @@ -18,12 +19,15 @@ ![zh-cn_image_0000001272032361](figures/zh-cn_image_0000001272032361.png) 3. 如果您打开的目录不是DevEco Device Tool工程,则会出现如下提示框,点击**Import**。 + ![zh-cn_image_0000001135394334](figures/zh-cn_image_0000001135394334.png) 4. 在Select Project type界面,选择**Import from OpenHarmony Source**。 + ![zh-cn_image_0000001215743910](figures/zh-cn_image_0000001215743910.png) 5. 在Import Project界面,选择**Product**后,会自动填充对应的MCU、Board、company和kernel信息,然后**ohosVersion**选择对应的OpenHarmony源码版本。此处选择rk3568。 + ![zh-cn_image_0000001227712350](figures/zh-cn_image_0000001227712350.png) 6. 点击**Open**打开工程或源码。 @@ -49,6 +53,7 @@ > 该操作仅在远程模式(Windows+Ubuntu混合开发环境)中需要设置,如果采用本地模式(Windows开发环境或Ubuntu开发环境),则请跳过该步骤。 4. 打开DevEco Device Tool,在QUICK ACCESS > DevEco Home > Projects中,点击**Settings**打开工程配置界面。 + ![zh-cn_image_0000001239661509](figures/zh-cn_image_0000001239661509.png) 5. 在“hh_scdy200”页签,设置烧录选项,包括upload_partitions和upload_protocol。 @@ -59,6 +64,7 @@ 6. 分别检查待烧录文件的烧录信息,DevEco Device Tool已预置默认的烧录文件信息,可根据实际情况进行调整。待烧录文件包括:loader、parameter、uboot、boot_linux、system、vendor和userdata。 1. 在“hh_scdy200_loader”页签,在New Option选项中选择需要修改的项,例如partition_bin(烧录文件路径)、partition_addr(烧录文件起始地址)、partition_length(烧录文件分区长度)等。 + ![zh-cn_image_0000001224173270](figures/zh-cn_image_0000001224173270.png) 2. 然后在Partition Options中,分别修改上述步骤中选择的修改项。 > ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** @@ -70,7 +76,9 @@ 7. 所有的配置都修改完成后,在工程配置页签的顶部,点击**Save**进行保存。 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) 9. 等待开发板烧录完成,当屏幕提示如下信息时,表示烧录成功。 + ![zh-cn_image_0000001194984912](figures/zh-cn_image_0000001194984912.png) diff --git a/zh-cn/device-dev/quick-start/quickstart-standard-running-rk3568-create.md b/zh-cn/device-dev/quick-start/quickstart-standard-running-rk3568-create.md index 46f1afe408c25106591b6ad1508bf4bdcc46a417..0ad654203fc5a0fa892de27cf2d3173a2a7bbc9a 100644 --- a/zh-cn/device-dev/quick-start/quickstart-standard-running-rk3568-create.md +++ b/zh-cn/device-dev/quick-start/quickstart-standard-running-rk3568-create.md @@ -29,6 +29,7 @@ productdefine/common 请在源码目录中通过以下步骤创建“Hello World”应用程序: 1. 创建目录,编写业务代码。 + 新建applications/sample/hello/src/helloworld.c目录及文件,代码如下所示,用户可以自定义修改打印内容(例如:修改World为OH)。其中helloworld.h包含字符串打印函数HelloPrint的声明。当前应用程序可支持标准C及C++的代码开发。 @@ -73,6 +74,7 @@ productdefine/common ``` 2. 新建编译组织文件。 + 1. 新建applications/sample/hello/BUILD.gn文件,内容如下所示: ``` @@ -134,6 +136,7 @@ productdefine/common bundle.json文件包含两个部分,第一部分描述该部件所属子系统的信息,第二部分component则定义该部件构建相关配置。添加的时候需要指明该部件包含的模块sub_component,假如有提供给其它部件的接口,需要在inner_kits中说明,假如有测试用例,需要在test中说明,inner_kits与test没有也可以不添加。 3. 修改子系统配置文件。 + 在build/subsystem_config.json中添加新建的子系统的配置。 @@ -145,6 +148,7 @@ productdefine/common ``` 4. 修改产品配置文件。 + 在productdefine/common/products/rk3568.json中添加对应的hello部件,直接添加到原有部件后即可。 ``` diff --git a/zh-cn/device-dev/subsystems/Readme-CN.md b/zh-cn/device-dev/subsystems/Readme-CN.md index 2b2082482827996a282ca733eadaccebc5605fbb..99e4a005a5fb3aa6c2f54cba978f9433c5868dbb 100755 --- a/zh-cn/device-dev/subsystems/Readme-CN.md +++ b/zh-cn/device-dev/subsystems/Readme-CN.md @@ -93,6 +93,9 @@ - [HiSysEvent订阅指导](subsys-dfx-hisysevent-listening.md) - [HiSysEvent查询指导](subsys-dfx-hisysevent-query.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) - [bytrace使用指导](subsys-toolchain-bytrace-guide.md) - [hdc\_std 使用指导](subsys-toolchain-hdc-guide.md) diff --git a/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001261812333.png b/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001261812333.png new file mode 100644 index 0000000000000000000000000000000000000000..76fd15e43b8ccf8566ed55cc0592d3f3e6580319 Binary files /dev/null and b/zh-cn/device-dev/subsystems/figure/zh-cn_image_0000001261812333.png differ diff --git a/zh-cn/device-dev/subsystems/subsys-dfx-faultlogger.md b/zh-cn/device-dev/subsystems/subsys-dfx-faultlogger.md new file mode 100644 index 0000000000000000000000000000000000000000..cd6ef1c3831c09109bc4e6ef4c883b5f99fd0b5d --- /dev/null +++ b/zh-cn/device-dev/subsystems/subsys-dfx-faultlogger.md @@ -0,0 +1,268 @@ +# 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 DumpCatch(const int pid, const int tid, std::string& msg) |   接口返回值:
- true:回栈成功,回栈信息存储在msg字符串对象中;
- false:回栈失败。
  输入参数:
- pid:目标进程号;
- tid:目标线程号,如果需要回栈进程中的所有线程,则tid设定为0;
  输出参数:
- 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 + + #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 + #include + #include + // 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 | - processdump -p [pid]
- processdump -p [pid] -t [tid] | **参数说明:**
- -p [pid]:打印指定进程下面的所有线程栈信息。
- -p [pid] -t [tid]:打印指定进程下面的指定线程信息。
**返回值说明:**
如果栈信息解析成功,则将信息显示到标准输出;失败则打印错误信息。 | + + +> ![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行,修改后可以避免发生此崩溃。 diff --git a/zh-cn/device-dev/subsystems/subsys-dfx-hichecker.md b/zh-cn/device-dev/subsystems/subsys-dfx-hichecker.md new file mode 100644 index 0000000000000000000000000000000000000000..6c76bc9a0644905ddabe6635665062e4c978e868 --- /dev/null +++ b/zh-cn/device-dev/subsystems/subsys-dfx-hichecker.md @@ -0,0 +1,112 @@ +# HiChecker开发指导 + + +## 概述 + +HiChecker是OpenHarmony提供的用于检测代码错误使用方式和运行结果的一种检测框架,可在应用和系统开发阶段用于运行时的缺陷扫描。 + +本章节内容对大型系统类设备(参考内存≥1GiB)、标准系统类设备(参考内存≥128MiB)适用。 + + +## 开发指导 + + +### 场景介绍 + +HiChecker的主要作用是给基于OpenHarmony的应用(包含系统和三方应用)开发者提供一套检测工具,用来检测应用程序开发过程中容易被人忽略的部分问题,包括应用关键线程调用耗时函数、应用进程中事件出现分发、执行超时以及应用进程中元能力资源泄露等,检测到的问题以日志记录或进程崩溃等形式展现出来以便开发者发现并修改相关问题。 + + +### 接口说明 + +HiChecker提供的主要接口及功能如下: + + **表1** HiChecker函数接口 + +| **类** | **方法(包括返回值、方法名、参数列表)** | **描述** | +| -------- | -------- | -------- | +| HiChecker | uint_64_t RULE_CAUTION_PRINT_LOG
= 1<<63; | 告警规则,当有告警时记录日志。 | +| uint_64_t RULE_CAUTION_TRIGGER_CRASH = 1<<62; | 告警规则,当有告警时让应用退出。 | +| uint_64_t RULE_THREAD_CHECK_SLOW_PROCESS = 1; | 检测规则,检测是否有耗时函数被调用。 | +| uint_64_t RULE_CHECK_SLOW_EVENT = 1<<32; | 检测规则,检测有事件分发或处理超过规定的时间阈值。 | +| uint_64_t RULE_CHECK_ABILITY_CONNECTION_LEAK = 1<<33; | 检测规则,检测ability泄露。 | +| AddRule(uint_64_t rule) : void | 添加一条或者多条规则到系统,系统根据添加的规则进行检测或反馈。 | +| RemoveRule(uint_64_t rule) : void | 删除一组规则,删除的规则后续将不再生效。 | +| GetRule() : uint_64_t | 获取当前线程规则、进程规则、告警规则的合集。 | +| Contains(uint_64_t rule) : bool | 当前已添加的规则集中是否包含了某一个特定的规则, 如果传入的rule是线程级别的rule,仅查询当前线程中是否包含。 | +| NotifySlowProcess(std::string tag) : void | 通知有慢处理,通知系统当前代码调用了耗时较长的慢处理流程,以告知应用重要线程中尽量避开直接调用。 | +| NotifySlowEvent(std::string tag) : void | 通知发生事件分发超时或执行超时。 | +| NotifyAbilityConnectionLeak(Caution caution) : void | 通知发生AbilityConnection泄露。 | +| Caution | GetTriggerRule() : uint_64_t | 获取触发当前告警的检测规则。 | +| GetCautionMsg() : std::string | 获取更多辅助信息。 | +| GetStackTrace() : 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" ] + ``` diff --git a/zh-cn/device-dev/subsystems/subsys-dfx-hidumper.md b/zh-cn/device-dev/subsystems/subsys-dfx-hidumper.md new file mode 100644 index 0000000000000000000000000000000000000000..9e4a91ff9294a4dfd58117a1e976a0c7c39074ea --- /dev/null +++ b/zh-cn/device-dev/subsystems/subsys-dfx-hidumper.md @@ -0,0 +1,183 @@ +# 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 [timeout] | 超时时间,单位:秒。默认值是30s。如果设置为0表示无超时限定。 | +| -lc | 系统信息簇列表 | +| -ls | 系统元能力列表 | +| -c | 导出系统簇信息 | +| -c [base system] | 以base或system标签区分的系统簇信息导出 | +| -s | 导出全部系统元能力信息 | +| -s [SA0 SA1] | 导出SA0、SA1等元能力id对应的元能力信息 | +| -s [SA] -a ['-h'] | 以-h为参数导出SA指定的系统元能力信息 | +| -e | 导出Faultlog模块生成的崩溃日志 | +| --net | 导出网络信息 | +| --storage | 导出存储信息 | +| -p | 导出进程列表及全部进程信息 | +| -p [pid] | 导出指定进程号的进程全部信息 | +| --cpuusage [pid] | 导出CPU使用信息;如果指定pid则导出该进程的CPU使用信息 | +| --cpufreq | 导出实际的CPU频率 | +| --mem [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] + ```