栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

设备端移植CSDK接入华为mqtt IoTDA

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

设备端移植CSDK接入华为mqtt IoTDA

文章目录
    • 一、开发环境
    • 二、下载IoTDA CSDK
    • 三、编译openssl库
    • 四、编译paho库
    • 五、编译zlib库
    • 六、编译华为IoTDA CSDK
    • 七、下载验证

一、开发环境

虚拟机:Ubuntu16.04
gcc版本:5.4.0
arm-linux-gnueabihf-gcc版本:8.2.1

二、下载IoTDA CSDK

1、新建文件夹huawei_iotda,用来存放相关文件:

mkdir huawei_iotda 

2、进入huawei_iotda:

cd huawei_iotda

3、克隆华为云物联网设备侧CSDK代码:

git clone https://github.com/huaweicloud/huaweicloud-iot-device-sdk-c.git

SDK依赖openssl、paho、zlib库,因此接下来先编译相关动态链接库。

三、编译openssl库

1、从openssl官网 https://www.openssl.org/source 下载最新版本的openssl(如openssl-1.1.1l.tar.gz),上传到linux编译机上(笔者的目录为/home/lyy/work/huawei_iotda),并解压文件:

tar -vxzf openssl-1.1.1l.tar.gz

2、新建openssl,用于存放openssl生成的相关文件:

mkdir openssl

3、进入openssl源码目录:

cd openssl-1.1.1l

4、运行 setarch i386 ./config no-asm shared --prefix=/home/lyy/work/huawei_iotda/openssl --cross-compile-prefix=arm-linux-gnueabihf-命令配置openssl并生成Makefile;
5、修改Makefile。Makefile中使用" -m32",如果不去掉的话在后面的编译过程中将产生错误,所以需要找到" -m32"将其删除。搜索所有 “-m32”,然后删除掉,保存并退出:

vi Makefile
:/-m32

6、编译出库。 在openssl源码目录下,运行make depend命令添加依赖:

make depend

运行make命令开始编译:

make

再运行如下命令进行安装:

make install

在配置的openssl安装目录下/home/lyy/work/huawei_iotda/openssl找到lib目录,有生成的库文件:
libcrypto.so.1.1、libssl.so.1.1和软链接libcrypto.so、libssl.so,请将这些文件拷贝到SDK的lib文件夹下(同时将/home/lyy/work/huawei_iotda/openssl/include底下的openssl文件夹拷贝到SDK的include目录下)。

四、编译paho库

1、访问github下载地址https://github.com/eclipse/paho.mqtt.c, 下载paho.mqtt.c源码:

git clone  https://github.com/eclipse/paho.mqtt.c

2、进入paho源码目录;

cd paho.mqtt.c

3、修改编译工具链、添加头文件目录和动态链接库

CC = arm-linux-gnueabihf-gcc

CFLAGS += -I/home/lyy/work/huawei_iotda/openssl/include
LDFLAGS += -L/home/lyy/work/huawei_iotda/openssl/lib/ -lrt -lssl -lcrypto

4、编译,执行清空命令:

make clean

执行编译命令:

make

5、编译完成后,可以在build/output目录下看到编译成功的库。
6、拷贝paho库文件 当前SDK仅用到了libpaho-mqtt3as,请将文件libpaho-mqtt3as.so和libpaho-mqtt3as.so.1拷贝到SDK的lib文件夹下(同时将paho源码目录下src文件夹里的头文件(MQTTAsync.h/MQTTClient.h/MQTTClientPersistence.h/MQTTProperties.h/MQTTReasonCodes.h/MQTTSubscribeOpts.h/MQTTExportDeclarations.h)拷贝到SDK的include/base目录下)。

五、编译zlib库

1、下载zlib源码https://github.com/madler/zlib/archive/v1.2.11.zip 通过如下命令解压缩:

unzip zlib-1.2.11.zip

2、进入源码目录下:

cd zlib-1.2.11

3、配置生成makefile文件

./configure

4、修改Makefile文件

vi Makefile

将CC = gcc改为 CC = arm-linux-gnueabihf-gcc
其他地方的gcc 改为 $(CC),改完后保存并退出。
5、执行makefile文件

make

拷贝so库文件 将源码目录下生成的libz.so、libz.so.1、libz.so.1.2.11拷贝到sdk的lib文件夹下。

六、编译华为IoTDA CSDK

1、进入到解压的文件夹下:

cd huaweicloud-iot-device-sdk-c

2、修改配置信息: 需要修改src/device_demo/device_demo.c文件中的如下参数:
servierIp_:平台南向IP,可在控制台的应用管理中查看。
username_:MQTT协议需要填写username,iot平台默认设备ID为username,设备ID是设备注册时返回的值。
password_:设备密钥,设备注册时返回的值。
3、修改Makefile,将CC = gcc改为 CC = arm-linux-gnueabihf-gcc
执行make命令进行编译(如果是32位的操作系统,请删除掉Makefile中的"-m64"):

make

4、编译完成后,查看MQTT_Demo.o文件格式
file MQTT_Demo.o

可以看出MQTT_Demo.o是32位小端ARM架构的可执行文件;

七、下载验证

1、将MQTT_Demo.o和lib拷贝到嵌入式设备端,将lib重命名为iotda_lib,并导出库路径
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/customer/iotda_lib
2、运行测试程序MQTT_Demo.o

./ MQTT_Demo.o


提示缺少 libanl.so.1文件!
3、在linux编译机arm-linux-gnueabi-gcc工具链安装目录下找到该动态连接库,将整个动态链接库拷贝到嵌入式设备端,导出lib库目录:

cp -a /mnt/gcc_lib/ ./
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/customer/gcc_lib

重新运行MQTT_Demo.o

可以看到,arm linux设备端已经可以连接到华为云服务器了。至此,移植CSDK接入华为mqtt IoTDA已经完成并测试通过了。

如果是要移植到linux PC 上可以参考官方ReadMe文档https://github.com/huaweicloud/huaweicloud-iot-device-sdk-c/blob/master/README_CN.md。移植方式大体是相同的,只是编译工具使用gcc而已。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/300160.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号