From 230a748b4ef6c2b92fee6d260046ae053c3a7c85 Mon Sep 17 00:00:00 2001 From: weiliuq Date: Tue, 7 Mar 2023 11:04:51 +0000 Subject: [PATCH 1/6] add mqtt to sig Signed-off-by: weiliuq --- mqtt/BUILD.gn | 155 ++++++++++++++++++++++++++++++ mqtt/README.OpenSource | 11 +++ mqtt/README_zh.md | 16 +++ mqtt/adapted/src/VersionInfo.h | 7 ++ mqtt/adapted/src/samples/BUILD.gn | 118 +++++++++++++++++++++++ mqtt/bundle.json | 33 +++++++ mqtt/docs/pic/running_result.png | Bin 0 -> 42236 bytes mqtt/docs/rom_integrate.md | 152 +++++++++++++++++++++++++++++ 8 files changed, 492 insertions(+) create mode 100755 mqtt/BUILD.gn create mode 100755 mqtt/README.OpenSource create mode 100755 mqtt/README_zh.md create mode 100755 mqtt/adapted/src/VersionInfo.h create mode 100755 mqtt/adapted/src/samples/BUILD.gn create mode 100755 mqtt/bundle.json create mode 100755 mqtt/docs/pic/running_result.png create mode 100755 mqtt/docs/rom_integrate.md diff --git a/mqtt/BUILD.gn b/mqtt/BUILD.gn new file mode 100755 index 00000000..83607420 --- /dev/null +++ b/mqtt/BUILD.gn @@ -0,0 +1,155 @@ +# Copyright (c) 2023 iSoftStone Information Technology (Group) Co.,Ltd. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v2.0 +# and Eclipse Distribution License v1.0 which accompany this distribution. +# +# The Eclipse Public License is available at +# https://www.eclipse.org/legal/epl-2.0/ +# and the Eclipse Distribution License is available at +# http://www.eclipse.org/org/documents/edl-v10.php. + +import ("//build/ohos.gni") + +mqtt_path = "//third_party/mqtt" +mqtt_part_name = "mqtt" +mqtt_subsystem_name = "thirdparty" + +config("mqtt_config") { + cflags = [ + "-Wno-sign-compare", + "-Wno-unused-variable", + "-Wno-deprecated-declarations", + "-Wno-format", + "-fvisibility=hidden", + "-Wno-error", + "-Wall", + "-fPIC", + "-Os", + "-g", + ] + + defines = [ + "_GNU_SOURCE", + "PAHO_MQTT_EXPORTS", + ] + + if (use_musl) { + cflags += [ "-Wno-bool-operation" ] + } +} + + +ohos_source_set("mqtt_commom_dynamic") { + sources = [ + "${mqtt_path}/src/MQTTTime.c", + "${mqtt_path}/src/MQTTProtocolClient.c", + "${mqtt_path}/src/Clients.c", + "${mqtt_path}/src/utf-8.c", + "${mqtt_path}/src/MQTTPacket.c", + "${mqtt_path}/src/MQTTPacketOut.c", + "${mqtt_path}/src/Messages.c", + "${mqtt_path}/src/Tree.c", + "${mqtt_path}/src/Socket.c", + "${mqtt_path}/src/Log.c", + "${mqtt_path}/src/MQTTPersistence.c", + "${mqtt_path}/src/Thread.c", + "${mqtt_path}/src/MQTTProtocolOut.c", + "${mqtt_path}/src/MQTTPersistenceDefault.c", + "${mqtt_path}/src/SocketBuffer.c", + "${mqtt_path}/src/LinkedList.c", + "${mqtt_path}/src/MQTTProperties.c", + "${mqtt_path}/src/MQTTReasonCodes.c", + "${mqtt_path}/src/Base64.c", + "${mqtt_path}/src/SHA1.c", + "${mqtt_path}/src/WebSocket.c", + "${mqtt_path}/src/Proxy.c", + ] + + if (!defined(PAHO_HIGH_PERFORMANCE)) { + sources += [ + "${mqtt_path}/src/StackTrace.c", + "${mqtt_path}/src/Heap.c", + ] + + } + include_dirs = [ "${mqtt_path}/src" ] + configs = [ ":mqtt_config" ] +} + +ohos_shared_library("paho-mqtt3a") { + include_dirs = [ "${mqtt_path}/src" ] + configs = [ ":mqtt_config" ] + sources = [ + "${mqtt_path}/src/MQTTAsync.c", + "${mqtt_path}/src/MQTTAsyncUtils.c", + ] + deps = [ ":mqtt_commom_dynamic" ] + install_images = [ "system" ] + install_enable = true + part_name = "${mqtt_part_name}" + subsystem_name = "${mqtt_subsystem_name}" +} + +ohos_shared_library("paho-mqtt3c") { + include_dirs = [ "${mqtt_path}/src" ] + configs = [ ":mqtt_config" ] + sources = [ "${mqtt_path}/src/MQTTClient.c" ] + deps = [ ":mqtt_commom_dynamic" ] + install_images = [ "system" ] + install_enable = true + part_name = "${mqtt_part_name}" + subsystem_name = "${mqtt_subsystem_name}" +} + +ohos_shared_library("paho-mqtt3as") { + include_dirs = [ "${mqtt_path}/src" ] + configs = [ ":mqtt_config" ] + sources = [ + "${mqtt_path}/src/MQTTAsync.c", + "${mqtt_path}/src/MQTTAsyncUtils.c", + "${mqtt_path}/src/SSLSocket.c", + ] + deps = [ + ":mqtt_commom_dynamic", + "//third_party/openssl:libssl_shared", + ] + install_images = [ "system" ] + install_enable = true + part_name = "${mqtt_part_name}" + subsystem_name = "${mqtt_subsystem_name}" +} + +ohos_shared_library("paho-mqtt3cs") { + include_dirs = [ "${mqtt_path}/src" ] + configs = [ ":mqtt_config" ] + sources = [ + "${mqtt_path}/src/MQTTClient.c", + "${mqtt_path}/src/SSLSocket.c", + ] + deps = [ + ":mqtt_commom_dynamic", + "//third_party/openssl:libssl_shared", + ] + install_images = [ "system" ] + install_enable = true + part_name = "${mqtt_part_name}" + subsystem_name = "${mqtt_subsystem_name}" +} + +group("mqtt") +{ + deps = [ + "${mqtt_path}:paho-mqtt3a", + "${mqtt_path}:paho-mqtt3c", + "${mqtt_path}:paho-mqtt3as", + "${mqtt_path}:paho-mqtt3cs", + ] +} + +group("mqtt_tests") { + deps = [ + "${mqtt_path}/src/samples:mqtt_samples", + "${mqtt_path}/test:mqtt_test", + ] +} diff --git a/mqtt/README.OpenSource b/mqtt/README.OpenSource new file mode 100755 index 00000000..fac051b9 --- /dev/null +++ b/mqtt/README.OpenSource @@ -0,0 +1,11 @@ +[ + { + "Name": "mqtt", + "License": "Eclipse Public License v2.0 and Eclipse Distribution License v1.0", + "License File": "LICENSE", + "Version Number": "1.3.12", + "Owner": "swanlink", + "Upstream URL": "https://github.com/eclipse/paho.mqtt.c", + "Description": "This repository contains the source code for the Eclipse Paho MQTT C client library. For further information related MQTT, see http://mqtt.org." + } +] diff --git a/mqtt/README_zh.md b/mqtt/README_zh.md new file mode 100755 index 00000000..4d3ca876 --- /dev/null +++ b/mqtt/README_zh.md @@ -0,0 +1,16 @@ +# mqtt 三方库说明 + +## 功能简介 + +MQTT 是用 C 语言编写的用于MQTT协议的Eclipse Paho C客户端库。 + +## 使用约束 + +- ROM版本:OpenHarmony3.2 beta1 +- 三方库版本:v1.3.12 +- 当前适配的功能:完成Eclipse Paho C客户端库编译的适配 +- License:[Eclipse Public License v2.0](https://github.com/eclipse/paho.mqtt.c/blob/v1.3.12/LICENSE) + +## 集成方式 + +- [系统Rom包集成](./docs/rom_integrate.md)。 diff --git a/mqtt/adapted/src/VersionInfo.h b/mqtt/adapted/src/VersionInfo.h new file mode 100755 index 00000000..ae34598a --- /dev/null +++ b/mqtt/adapted/src/VersionInfo.h @@ -0,0 +1,7 @@ +#ifndef VERSIONINFO_H +#define VERSIONINFO_H + +#define BUILD_TIMESTAMP "Tue 31 Jan 2023 10:34:16 AM UTC" +#define CLIENT_VERSION "1.3.12" + +#endif /* VERSIONINFO_H */ diff --git a/mqtt/adapted/src/samples/BUILD.gn b/mqtt/adapted/src/samples/BUILD.gn new file mode 100755 index 00000000..3c3631f0 --- /dev/null +++ b/mqtt/adapted/src/samples/BUILD.gn @@ -0,0 +1,118 @@ +# Copyright (c) 2023 iSoftStone Information Technology (Group) Co.,Ltd. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v2.0 +# and Eclipse Distribution License v1.0 which accompany this distribution. +# +# The Eclipse Public License is available at +# https://www.eclipse.org/legal/epl-2.0/ +# and the Eclipse Distribution License is available at +# http://www.eclipse.org/org/documents/edl-v10.php. + +import ("//build/ohos.gni") + +mqtt_path = "//third_party/mqtt" +mqtt_part_name = "mqtt" +mqtt_subsystem_name = "thirdparty" + +config("mqtt_samples_config") { + cflags = [ + "-Wno-unused-variable", + "-Wno-error", + ] + defines = [ "PAHO_MQTT_IMPORTS" ] +} + +template("swanlink_mqtt_samples") { + ohos_executable(target_name) { + include_dirs = [ "${mqtt_path}/src" ] + configs = [ ":mqtt_samples_config" ] + part_name = "${mqtt_part_name}" + subsystem_name = "${mqtt_subsystem_name}" + forward_variables_from(invoker, "*") + } +} + +swanlink_mqtt_samples("MQTTAsync_publish") { + sources = [ "${mqtt_path}/src/samples/MQTTAsync_publish.c" ] + deps = [ "${mqtt_path}:paho-mqtt3a" ] +} + +swanlink_mqtt_samples("MQTTAsync_subscribe") { + sources = [ "${mqtt_path}/src/samples/MQTTAsync_subscribe.c" ] + deps = [ "${mqtt_path}:paho-mqtt3a" ] +} + +swanlink_mqtt_samples("MQTTClient_publish") { + sources = [ "${mqtt_path}/src/samples/MQTTClient_publish.c" ] + deps = [ "${mqtt_path}:paho-mqtt3c" ] +} + +swanlink_mqtt_samples("MQTTClient_publish_async") { + sources = [ "${mqtt_path}/src/samples/MQTTClient_publish_async.c" ] + deps = [ "${mqtt_path}:paho-mqtt3c" ] +} + +swanlink_mqtt_samples("MQTTClient_subscribe") { + sources = [ "${mqtt_path}/src/samples/MQTTClient_subscribe.c" ] + deps = [ "${mqtt_path}:paho-mqtt3c" ] +} + +swanlink_mqtt_samples("paho_c_pub") { + sources = [ + "${mqtt_path}/src/samples/paho_c_pub.c", + "${mqtt_path}/src/samples/pubsub_opts.c", + ] + deps = [ + "${mqtt_path}:mqtt_commom_dynamic", + "${mqtt_path}:paho-mqtt3as", + ] +} + +swanlink_mqtt_samples("paho_c_sub") { + sources = [ + "${mqtt_path}/src/samples/paho_c_sub.c", + "${mqtt_path}/src/samples/pubsub_opts.c", + ] + deps = [ + "${mqtt_path}:mqtt_commom_dynamic", + "${mqtt_path}:paho-mqtt3as" + ] +} + +swanlink_mqtt_samples("paho_cs_pub") { + sources = [ + "${mqtt_path}/src/samples/paho_cs_pub.c", + "${mqtt_path}/src/samples/pubsub_opts.c", + ] + deps = [ + "${mqtt_path}:mqtt_commom_dynamic", + "${mqtt_path}:paho-mqtt3cs", + ] +} + +swanlink_mqtt_samples("paho_cs_sub") { + sources = [ + "${mqtt_path}/src/samples/paho_cs_sub.c", + "${mqtt_path}/src/samples/pubsub_opts.c", + ] + deps = [ + "${mqtt_path}:mqtt_commom_dynamic", + "${mqtt_path}:paho-mqtt3cs", + ] +} + +group("mqtt_samples") +{ + deps = [ + ":MQTTAsync_publish", + ":MQTTAsync_subscribe", + ":MQTTClient_publish", + ":MQTTClient_publish_async", + ":MQTTClient_subscribe", + ":paho_c_pub", + ":paho_c_sub", + ":paho_cs_pub", + ":paho_cs_sub", + ] +} \ No newline at end of file diff --git a/mqtt/bundle.json b/mqtt/bundle.json new file mode 100755 index 00000000..7a37ffba --- /dev/null +++ b/mqtt/bundle.json @@ -0,0 +1,33 @@ +{ + "name": "@ohos/mqtt", + "description": "This repository contains the source code for the [Eclipse Paho](http://mqtt.org) MQTT C/C++ client library for Embedded platorm.", + "version": "1.3.12", + "license": "Eclipse Public License v2.0 and Eclipse Distribution License v1.0", + "publishAs": "code-segment", + "segment": { + "destPath": "third_party/mqtt" + }, + "dirs": {}, + "scripts": {}, + "readmePath": { + "en": "README" + }, + "component": { + "name": "mqtt", + "subsystem": "thirdparty", + "syscap": [], + "features": [], + "adapted_system_type": [], + "rom": "", + "ram": "", + "deps": { + "components": [], + "third_party": [] + }, + "build": { + "sub_component": ["//third_party/mqtt:mqtt"], + "inner_kits": [], + "test": [] + } + } +} diff --git a/mqtt/docs/pic/running_result.png b/mqtt/docs/pic/running_result.png new file mode 100755 index 0000000000000000000000000000000000000000..edf029d37157b214ede7f04350d88624292af48b GIT binary patch literal 42236 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Ⓢ2qU)bR1~ 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 literal 0 HcmV?d00001 diff --git a/mqtt/docs/rom_integrate.md b/mqtt/docs/rom_integrate.md new file mode 100755 index 00000000..a9490610 --- /dev/null +++ b/mqtt/docs/rom_integrate.md @@ -0,0 +1,152 @@ +# mqtt如何集成到系统Rom + +## 准备源码工程 + +本库是基于OpenHarmony 3.2 beta1版本,在润和RK3568开发板上验证的。如果是从未使用过RK3568,可以先查看[润和RK3568开发板标准系统快速上手](https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/docs/rk3568_helloworld)。 + +### 准备系统Rom源码 + +系统源码获取方法请参照:[OpenHarmony3.2beta1源码下载](https://gitee.com/openharmony/docs/blob/OpenHarmony-v3.2-Beta1/zh-cn/release-notes/OpenHarmony-v3.2-beta1.md#源码获取) + +### 增加构建脚本及配置文件 + +- 下载本仓库代码 + + ```shell + cd ~/ + git clone git@gitee.com:openharmony-sig/tpc_c_cplusplus.git --depth=1 + ``` + +- 仓库代码目录结构说明 + + ```shell + cd ~/tpc_c_cplusplus/mqtt/ # 进入到仓库代码库目录 + ``` + + ```shell + mqtt + |-- adapted # 存放三方库适配需要的代码文件 + |-- docs # 存放 mqtt 相关文档的文件夹 + |-- BUILD.gn # 编译构建脚本 + |-- bundle.json # 三方库组件定义文件 + |-- README_zh.md # mqtt 主页说明文档 + |-- README.OpenSource # mqtt 源码的下载地址,版本,license等信息 + ``` + +- 将本仓库文件夹拷贝到OpenHarmony源码的third_party目录下 + + ```shell + cp -arf ~/tpc_c_cplusplus/mqtt ~/OpenHarmony/third_party + ``` + +### 准备三方库源码 + +- 三方库源码下载 + + 将mqtt-1.3.12源码下载到mqtt目录并将其解压出来。 + + ```shell + cd ~/OpenHarmony/third_party/mqtt + git clone https://github.com/eclipse/paho.mqtt.c.git -b v1.3.12 + ``` + +## 系统Rom中引入三方库 + +准备完三方库代码后,我们需要将三方库加入到编译构建体系中。标准系统编译构建可以参考文档[标准系统编译构建指导](https://gitee.com/openharmony/docs/blob/OpenHarmony-3.2-Beta1/zh-cn/device-dev/subsystems/subsys-build-standard-large.md)。
+我们默认三方库是属于OpenHarmony的thirdparty子系统,如果需要自己定义子系统参考文档[如何为三方库组件中添加一个三方库](./add_thirdparty_component.md)。
+新增需要编译的组件,在OpenHarmony源码的vendor/hihope/rk3568/config.json文件中,新增需要编译的组件,如下代码段所示,在thirdparty子系统下面新增mqtt组件 + +```json +{ + "subsystem": "thirdparty", + "components": [ + { + "component": "musl", + "features": [] + }, + { + "component": "mqtt", + "features": [] + } + ] +} +``` + +## 系统Rom中引入三方库测试程序 + +如果需要编译测试用例,在OpenHarmony源码的vendor/hihope/rk3568/config.json文件,在对应组件的features中打开编译选项,如下 + +```json +{ + "subsystem": "thirdparty", + "components": [ + { + "component": "musl", + "features": [] + }, + { + "component": "mqtt", + "features": [] + } + ] +} +``` + +## 编译工程 + +- 进入源码根目录 + + ```shell + cd ~/openharmony + ``` + +- 选择产品 + + ```shell + hb set # 运行hb set后会出现产品列表,在此我们选择 rk3568 + ``` + +- 执行编译 + + ```shell + hb build --target-cpu arm #编译32位系统 + hb build --target-cpu arm64 #编译64位系统 + ``` + +- 生成的可执行文件和库文件都在out/rk3568/thirdparty/mqtt目录下,同时也打包到了镜像中 + +## 运行效果 + +将编译生成的库和测试文件放到板子上运行,为避免每次将文件推入设备都要烧录整个镜像,我们使用hdc_std工具将文件推到开发板上 + +- 首先将hdc_std工具编译出来
+ 执行以下命令进行编译hdc_std工具(工具编译出来所在路径out/sdk/ohos-sdk/windows/toolchains/hdc_std.exe): + + ```shell + hb set #源码根目录下使用hb set 选择产品ohos-sdk + hb build #然后编译 + ``` + +- 将工具拷贝到Windows,可以为工具目录配置环境变量,也可以在工具所在目录打开windows命令行 +- 将原生库测试需要的所有文件打包成mqtt.tar,并拷贝到windows下 +- 将文件推送到开发板,在windows命令行进行如下操作 + + ```shell + hdc_std shell mount -o remount,rw / #修改系统权限为可读写 + hdc_std file send mqtt.tar / #将文件包推入开发板 + hdc_std shell #进入开发板 + tar xvf mqtt.tar #解压 + #注意需要将库拷贝到/system/lib 或者/system/lib64目录下 + ``` + +- 运行测试程序 + 在测试目录运行测试程序MQTTClient_subscribe,然后再另一个窗口运行测试程序MQTTClient_publish,则在订阅窗口会打印“Message arrived”,如下图所示:
+  ![image-20220922143536085](./pic/running_result.png) + +## 参考资料 + +- [润和RK3568开发板标准系统快速上手](https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/docs/rk3568_helloworld)。 +- [OpenHarmony3.2beta1](https://gitee.com/openharmony/docs/blob/OpenHarmony-v3.2-Beta1/zh-cn/release-notes/OpenHarmony-v3.2-beta1.md)。 +- [OpenHarmony三方库组织地址](https://gitee.com/openharmony-tpc)。 +- [如何为三方库组件中添加一个三方库](https://gitee.com/openharmony-sig/knowledge/blob/master/docs/openharmony_getstarted/port_thirdparty/README.md)。 +- [知识体系](https://gitee.com/openharmony-sig/knowledge)。 -- Gitee From c272203ec741b39261f672a660fce2a5ab2a2997 Mon Sep 17 00:00:00 2001 From: weiliuq Date: Wed, 8 Mar 2023 02:28:26 +0000 Subject: [PATCH 2/6] --amend Signed-off-by: weiliuq --- mqtt/docs/rom_integrate.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/mqtt/docs/rom_integrate.md b/mqtt/docs/rom_integrate.md index a9490610..30d9def5 100755 --- a/mqtt/docs/rom_integrate.md +++ b/mqtt/docs/rom_integrate.md @@ -2,11 +2,11 @@ ## 准备源码工程 -本库是基于OpenHarmony 3.2 beta1版本,在润和RK3568开发板上验证的。如果是从未使用过RK3568,可以先查看[润和RK3568开发板标准系统快速上手](https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/docs/rk3568_helloworld)。 +本库是基于OpenHarmony 3.2 beta4版本,在润和RK3568开发板上验证的。如果是从未使用过RK3568,可以先查看[润和RK3568开发板标准系统快速上手](https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/docs/rk3568_helloworld)。 ### 准备系统Rom源码 -系统源码获取方法请参照:[OpenHarmony3.2beta1源码下载](https://gitee.com/openharmony/docs/blob/OpenHarmony-v3.2-Beta1/zh-cn/release-notes/OpenHarmony-v3.2-beta1.md#源码获取) +系统源码获取方法请参照:[OpenHarmony3.2beta4源码下载](https://gitee.com/openharmony/docs/blob/OpenHarmony-v3.2-Beta4/zh-cn/release-notes/OpenHarmony-v3.2-beta4.md#源码获取) ### 增加构建脚本及配置文件 @@ -43,7 +43,7 @@ - 三方库源码下载 - 将mqtt-1.3.12源码下载到mqtt目录并将其解压出来。 + 将mqtt-1.3.12源码下载到mqtt目录并将代码拷贝出来。 ```shell cd ~/OpenHarmony/third_party/mqtt @@ -52,7 +52,7 @@ ## 系统Rom中引入三方库 -准备完三方库代码后,我们需要将三方库加入到编译构建体系中。标准系统编译构建可以参考文档[标准系统编译构建指导](https://gitee.com/openharmony/docs/blob/OpenHarmony-3.2-Beta1/zh-cn/device-dev/subsystems/subsys-build-standard-large.md)。
+准备完三方库代码后,我们需要将三方库加入到编译构建体系中。标准系统编译构建可以参考文档[标准系统编译构建指导](https://gitee.com/openharmony/docs/blob/OpenHarmony-3.2-Beta4/zh-cn/device-dev/subsystems/subsys-build-standard-large.md)。
我们默认三方库是属于OpenHarmony的thirdparty子系统,如果需要自己定义子系统参考文档[如何为三方库组件中添加一个三方库](./add_thirdparty_component.md)。
新增需要编译的组件,在OpenHarmony源码的vendor/hihope/rk3568/config.json文件中,新增需要编译的组件,如下代码段所示,在thirdparty子系统下面新增mqtt组件 @@ -146,7 +146,7 @@ ## 参考资料 - [润和RK3568开发板标准系统快速上手](https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/docs/rk3568_helloworld)。 -- [OpenHarmony3.2beta1](https://gitee.com/openharmony/docs/blob/OpenHarmony-v3.2-Beta1/zh-cn/release-notes/OpenHarmony-v3.2-beta1.md)。 +- [OpenHarmony3.2beta4](https://gitee.com/openharmony/docs/blob/OpenHarmony-v3.2-Beta4/zh-cn/release-notes/OpenHarmony-v3.2-beta4.md)。 - [OpenHarmony三方库组织地址](https://gitee.com/openharmony-tpc)。 - [如何为三方库组件中添加一个三方库](https://gitee.com/openharmony-sig/knowledge/blob/master/docs/openharmony_getstarted/port_thirdparty/README.md)。 - [知识体系](https://gitee.com/openharmony-sig/knowledge)。 -- Gitee From ce21f1a4d0dc3cb6f3972628cf0cfaa19cc2615b Mon Sep 17 00:00:00 2001 From: weiliuq Date: Wed, 8 Mar 2023 02:28:26 +0000 Subject: [PATCH 3/6] --amend Signed-off-by: weiliuq --- mqtt/README_zh.md | 2 +- mqtt/docs/rom_integrate.md | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/mqtt/README_zh.md b/mqtt/README_zh.md index 4d3ca876..cadda24c 100755 --- a/mqtt/README_zh.md +++ b/mqtt/README_zh.md @@ -6,7 +6,7 @@ MQTT 是用 C 语言编写的用于MQTT协议的Eclipse Paho C客户端库。 ## 使用约束 -- ROM版本:OpenHarmony3.2 beta1 +- ROM版本:OpenHarmony3.2 beta4 - 三方库版本:v1.3.12 - 当前适配的功能:完成Eclipse Paho C客户端库编译的适配 - License:[Eclipse Public License v2.0](https://github.com/eclipse/paho.mqtt.c/blob/v1.3.12/LICENSE) diff --git a/mqtt/docs/rom_integrate.md b/mqtt/docs/rom_integrate.md index a9490610..30d9def5 100755 --- a/mqtt/docs/rom_integrate.md +++ b/mqtt/docs/rom_integrate.md @@ -2,11 +2,11 @@ ## 准备源码工程 -本库是基于OpenHarmony 3.2 beta1版本,在润和RK3568开发板上验证的。如果是从未使用过RK3568,可以先查看[润和RK3568开发板标准系统快速上手](https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/docs/rk3568_helloworld)。 +本库是基于OpenHarmony 3.2 beta4版本,在润和RK3568开发板上验证的。如果是从未使用过RK3568,可以先查看[润和RK3568开发板标准系统快速上手](https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/docs/rk3568_helloworld)。 ### 准备系统Rom源码 -系统源码获取方法请参照:[OpenHarmony3.2beta1源码下载](https://gitee.com/openharmony/docs/blob/OpenHarmony-v3.2-Beta1/zh-cn/release-notes/OpenHarmony-v3.2-beta1.md#源码获取) +系统源码获取方法请参照:[OpenHarmony3.2beta4源码下载](https://gitee.com/openharmony/docs/blob/OpenHarmony-v3.2-Beta4/zh-cn/release-notes/OpenHarmony-v3.2-beta4.md#源码获取) ### 增加构建脚本及配置文件 @@ -43,7 +43,7 @@ - 三方库源码下载 - 将mqtt-1.3.12源码下载到mqtt目录并将其解压出来。 + 将mqtt-1.3.12源码下载到mqtt目录并将代码拷贝出来。 ```shell cd ~/OpenHarmony/third_party/mqtt @@ -52,7 +52,7 @@ ## 系统Rom中引入三方库 -准备完三方库代码后,我们需要将三方库加入到编译构建体系中。标准系统编译构建可以参考文档[标准系统编译构建指导](https://gitee.com/openharmony/docs/blob/OpenHarmony-3.2-Beta1/zh-cn/device-dev/subsystems/subsys-build-standard-large.md)。
+准备完三方库代码后,我们需要将三方库加入到编译构建体系中。标准系统编译构建可以参考文档[标准系统编译构建指导](https://gitee.com/openharmony/docs/blob/OpenHarmony-3.2-Beta4/zh-cn/device-dev/subsystems/subsys-build-standard-large.md)。
我们默认三方库是属于OpenHarmony的thirdparty子系统,如果需要自己定义子系统参考文档[如何为三方库组件中添加一个三方库](./add_thirdparty_component.md)。
新增需要编译的组件,在OpenHarmony源码的vendor/hihope/rk3568/config.json文件中,新增需要编译的组件,如下代码段所示,在thirdparty子系统下面新增mqtt组件 @@ -146,7 +146,7 @@ ## 参考资料 - [润和RK3568开发板标准系统快速上手](https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/docs/rk3568_helloworld)。 -- [OpenHarmony3.2beta1](https://gitee.com/openharmony/docs/blob/OpenHarmony-v3.2-Beta1/zh-cn/release-notes/OpenHarmony-v3.2-beta1.md)。 +- [OpenHarmony3.2beta4](https://gitee.com/openharmony/docs/blob/OpenHarmony-v3.2-Beta4/zh-cn/release-notes/OpenHarmony-v3.2-beta4.md)。 - [OpenHarmony三方库组织地址](https://gitee.com/openharmony-tpc)。 - [如何为三方库组件中添加一个三方库](https://gitee.com/openharmony-sig/knowledge/blob/master/docs/openharmony_getstarted/port_thirdparty/README.md)。 - [知识体系](https://gitee.com/openharmony-sig/knowledge)。 -- Gitee From 4404551b8f5fce0a1a74568a862360d98873cc89 Mon Sep 17 00:00:00 2001 From: weiliuq Date: Tue, 21 Mar 2023 07:21:26 +0000 Subject: [PATCH 4/6] modify link Signed-off-by: weiliuq --- mqtt/docs/rom_integrate.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mqtt/docs/rom_integrate.md b/mqtt/docs/rom_integrate.md index 30d9def5..b04ea670 100755 --- a/mqtt/docs/rom_integrate.md +++ b/mqtt/docs/rom_integrate.md @@ -6,7 +6,7 @@ ### 准备系统Rom源码 -系统源码获取方法请参照:[OpenHarmony3.2beta4源码下载](https://gitee.com/openharmony/docs/blob/OpenHarmony-v3.2-Beta4/zh-cn/release-notes/OpenHarmony-v3.2-beta4.md#源码获取) +系统源码获取方法请参照:[OpenHarmony3.2beta4源码下载](https://gitee.com/openharmony/docs/blob/OpenHarmony-v3.2-Beta5/zh-cn/release-notes/OpenHarmony-v3.2-beta4.md#源码获取) ### 增加构建脚本及配置文件 -- Gitee From cc0f52ddb0ca3d8e51a18dd4e24796f0dda842c5 Mon Sep 17 00:00:00 2001 From: weiliuq Date: Tue, 21 Mar 2023 07:28:17 +0000 Subject: [PATCH 5/6] modify link Signed-off-by: weiliuq --- mqtt/docs/rom_integrate.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mqtt/docs/rom_integrate.md b/mqtt/docs/rom_integrate.md index b04ea670..bd870856 100755 --- a/mqtt/docs/rom_integrate.md +++ b/mqtt/docs/rom_integrate.md @@ -146,7 +146,7 @@ ## 参考资料 - [润和RK3568开发板标准系统快速上手](https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/docs/rk3568_helloworld)。 -- [OpenHarmony3.2beta4](https://gitee.com/openharmony/docs/blob/OpenHarmony-v3.2-Beta4/zh-cn/release-notes/OpenHarmony-v3.2-beta4.md)。 +- [OpenHarmony3.2beta4](https://gitee.com/openharmony/docs/blob/OpenHarmony-v3.2-Beta5/zh-cn/release-notes/OpenHarmony-v3.2-beta4.md)。 - [OpenHarmony三方库组织地址](https://gitee.com/openharmony-tpc)。 - [如何为三方库组件中添加一个三方库](https://gitee.com/openharmony-sig/knowledge/blob/master/docs/openharmony_getstarted/port_thirdparty/README.md)。 - [知识体系](https://gitee.com/openharmony-sig/knowledge)。 -- Gitee From dd9b027e7fb7b13673d2878ad6ebaf07280c1b96 Mon Sep 17 00:00:00 2001 From: weiliuq Date: Tue, 21 Mar 2023 07:40:38 +0000 Subject: [PATCH 6/6] modify link Signed-off-by: weiliuq --- mqtt/docs/rom_integrate.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mqtt/docs/rom_integrate.md b/mqtt/docs/rom_integrate.md index bd870856..206a4bb6 100755 --- a/mqtt/docs/rom_integrate.md +++ b/mqtt/docs/rom_integrate.md @@ -52,8 +52,8 @@ ## 系统Rom中引入三方库 -准备完三方库代码后,我们需要将三方库加入到编译构建体系中。标准系统编译构建可以参考文档[标准系统编译构建指导](https://gitee.com/openharmony/docs/blob/OpenHarmony-3.2-Beta4/zh-cn/device-dev/subsystems/subsys-build-standard-large.md)。
-我们默认三方库是属于OpenHarmony的thirdparty子系统,如果需要自己定义子系统参考文档[如何为三方库组件中添加一个三方库](./add_thirdparty_component.md)。
+准备完三方库代码后,我们需要将三方库加入到编译构建体系中。标准系统编译构建可以参考文档[编译构建指导](https://gitee.com/openharmony/docs/blob/OpenHarmony-3.2-Beta4/zh-cn/device-dev/subsystems/subsys-build-all.md)。
+我们默认三方库是属于OpenHarmony的thirdparty子系统,如果需要自己定义子系统参考文档[如何为三方库组件中添加一个三方库](https://gitee.com/openharmony-sig/knowledge/blob/master/docs/openharmony_getstarted/port_thirdparty/README.md)。
新增需要编译的组件,在OpenHarmony源码的vendor/hihope/rk3568/config.json文件中,新增需要编译的组件,如下代码段所示,在thirdparty子系统下面新增mqtt组件 ```json -- Gitee