设备端移植CSDK接入华为mqtt IoTDA
文章目录一、开发环境二、下载IoTDA CSDK三、编译openssl库四、编译paho库五、编译zlib库六、编译华为IoTDA CSDK七、下载验证一、开发环境虚拟机:Ubuntu16.04gcc版本:5.4.0arm-linux-gnueabihf-gcc版本:8.2.1二、下载IoTDA CSDK1、新建文件夹huawei_iotda,用来存放相关文件:mkdir huawei_iotda
一、开发环境
虚拟机: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而已。
更多推荐
所有评论(0)