交叉编译AWS IOT C++ SDK及环境测试

原创 2018年01月30日 19:47:33

开始前 先强烈建议 登录控制台走一遍亚马逊的引导流程,并用nodejs版 在你ubuntu上跑一边,把策略文件生成了。并了解如何创建事物(设备)

文档:https://docs.aws.amazon.com/iot/latest/developerguide/iot-gs.html

当前版本:
aws-iot-device-sdk-cpp: Release version 1.3.0
Openssl 版本: 1.0.2d
gcc:4.8.3(需支持c++11)

项目AWS IOT C++SDK git:
https://github.com/aws/aws-iot-device-sdk-cpp/tree/release

1 下载源码

https://github.com/aws/aws-iot-device-sdk-cpp/tree/release

2 修改交叉编译配置文件

vi ToolchainFile.cmake
2.1修改TOOLCHAIN_DIR(交叉工具链目录)
2.2修改TARGET_CROSS(交叉工具链前缀)

3 交叉编译openssl 1.0.2d

3.1 指定安装目录

./config no-asmshared–prefix= dir 

说明:
no-asm 在交叉编译过程中不使用汇编代码代码加速编译过程。
shared 生成动态链接库。
./config no-asmshared –prefix=/home/xx.xx/code/openssl
目录参数是–

3.2 修改openssl源码目录下的makefile文件。
(1)在Makefile中删除-m64(两处)
(2)在makefile中修改编译器

CC=/home/xx.xx/work/toolchain-arm_cortex-a7+vfp_gcc-4.8-linaro_uClibc-0.9.33.2_eabi/bin/arm-openwrt-linux-gcc
AR= /home/xx.xx/work/toolchain-arm_cortex-a7+vfp_gcc-4.8-linaro_uClibc-0.9.33.2_eabi/bin/arm-openwrt-linux-ar $(ARFLAGS) r
RANLIB= /home/jw.li/work/toolchain-arm_cortex-a7+vfp_gcc-4.8-linaro_uClibc-0.9.33.2_eabi/bin/arm-openwrt-linux-ranlib 
/home/xx.xx/code/pcre/bin/pcretest
/home/xx.xx/work/toolchain-arm_cortex-a7+vfp_gcc-4.8-linaro_uClibc-0.9.33.2_eabi/bin/arm-openwrt-linux-g++

3.3 Make & make install

4 修改c++ sdk 网路层实现

vi network/CMakeLists.txt.in 修改OpenSSL库位置并将其更改为交叉编译的OpenSSL

前面屏蔽掉find_package(OpenSSL REQUIRED)
然后打开屏蔽

#set(OPENSSL_INCLUDE_DIR "YOUR_OPENSSL_PATH/include")
#set(OPENSSL_LIBRARIES "YOUR_OPENSSL_PATH/lib/libssl.a;YOUR_OPENSSL_PATH/lib/libcrypto.a")

并修改openssl位置和lib

set(OPENSSL_INCLUDE_DIR "/home/xx.xx/code/save/v50openwrt/openssl/include")
set(OPENSSL_LIBRARIES "/home/xx.xx/code/save/v50openwrt/openssl/lib/libssl.a;/home/xx.xx/code/save/v50openwrt/openssl/lib/libcrypto.a")

5 激活事物证书并放到sdk根目录cert文件夹下。

5.1 在IOT控制台点击管理 事物 选择你刚才创建的设备
这里写图片描述
5.2 在后台选择安全性,点击创建证书
这里写图片描述
5.3得到3个证书和根证书
这里写图片描述
PS: 重点一定要点激活 点激活 点激活

5.4 将证书拷贝到sdk 根目录下的certs/下(即aws-iot-device-sdk-cpp/certs)

6 Cmake

Mkdir build   
Cd build
cmake ../. -DCMAKE_TOOLCHAIN_FILE=../ToolchainFile.cmakemake

6.1 在gcc 4.8.3中出现这个错误

to_string' was not declared in this scope
string f_str = to_string(f);

交叉编译链 Gcc 4.8.3 加上-D_GLIBCXX_USE_C99=1才能使用to_string
修改vi ToolchainFile.cmake 在g++ 设置后加上-D_GLIBCXX_USE_C99=1
SET(CMAKE_CXX_COMPILER TOOLCHAINDIR/{TARGET_CROSS}g++ -D_GLIBCXX_USE_C99=1)

6.2报错
error: ‘SIGPIPE’ was not declared in this scope
signal(SIGPIPE, SIG_IGN);
解决修改头文件
vi ../network/OpenSSL/OpenSSLConnection.cpp
在 #ifdef WIN32 #else分支内加入

#include <signal.h>

7 得到bin文件及相关配置文件

在archive下可以找到生成的lib ,在bin下可以找到生成bin, 在bin下可以找到cert 和config文件。

8 测试

aws-iot-cplus-sdk提供了测试程序

8.1 在bulid/bin/config/SampleConfig.json
内容如下:

{
  "endpoint": "",
  "mqtt_port": 8883,
  "https_port": 443,
  "greengrass_discovery_port": 8443,
  "root_ca_relative_path": "certs/rootCA.crt",
  "device_certificate_relative_path": "",
  "device_private_key_relative_path": "",
  "tls_handshake_timeout_msecs": 60000,
  "tls_read_timeout_msecs": 2000,
  "tls_write_timeout_msecs": 2000,
  "aws_region": "",
  "aws_access_key_id": "",
  "aws_secret_access_key": "",
  "aws_session_token": "",
  "client_id": "",
  "thing_name": "",
  "is_clean_session": true,
  "mqtt_command_timeout_msecs": 20000,
  "keepalive_interval_secs": 600,
  "minimum_reconnect_interval_secs": 1,
  "maximum_reconnect_interval_secs": 128,
  "maximum_acks_to_wait_for": 32,
  "action_processing_rate_hz": 5,
  "maximum_outgoing_action_queue_length": 32,
  "discover_action_timeout_msecs": 300000
}

有5个参数需要自己填

  • Endpoint :亚马逊控制台 - 设置 中找到终端节点地址
  • root_ca_relative_path:make过程被拷贝到bulid/bin/certs/的根证书 但可能名字并不对我的certs/rootCA.crt
  • device_certificate_relative_path:同上 注意名字(你的应该前面有一串ID 而生成的config没有)
  • device_private_key_relative_path:同上 注意名字
  • client_id:控制台-管理-事物-详细信息事物ARN 把唯一标识复制过来
  • thing_name:你的事物名

8.2 这样直接连接mqtt 会报错如下:
MQTT Connect failed. The MQTT request timed out : SDK Code -703.
控制台-安全-证书 选择你刚刚生成的设备证书
这里写图片描述
这里写图片描述
把引导教程里面生成事物的策略加进去,应该就可以连上了。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "iot:Publish",
        "iot:Subscribe",
        "iot:Connect",
        "iot:Receive"
      ],
      "Effect": "Allow",
      "Resource": [
        "*"
      ]
    }
  ]
}

8.3 把你交叉编译生成的bin下的pub-sub-sample config和certs 复制到嵌入式平台同一目录下执行。
我们开始测试./pub-sub-sample
这里写图片描述

版权声明:本文为博主原创文章,未经博主允许不得转载。

AWS IoT 限制

http://docs.aws.amazon.com/zh_cn/general/latest/gr/aws_service_limits.html AWS IoT 限制 ...
  • whatnamecaniuse
  • whatnamecaniuse
  • 2017年09月22日 18:39
  • 357

AWS IoT 常见问题

介绍 问:什么是 AWS IoT? AWS IoT 是一款托管的云平台,使互联设备可以轻松安全地与云应用程序及其他设备交互。AWS IoT 可支持数十亿台设备和数万亿条消息,并且可以对这些消息进行处理...
  • m0_37204491
  • m0_37204491
  • 2017年06月02日 11:44
  • 2174

物联网 云平台 云计算 编程语言 博文集锦

物联网操作系统 编程语言 云平台选择 云计算编程 博文集锦
  • liang890319
  • liang890319
  • 2017年06月03日 09:06
  • 752

七牛c/c++的sdk在linux环境下编译使用

1,首先需要下载需要的依赖apt-get install make apt-get install cURL apt-get install OpenSSL apt-get install gcc a...
  • guoer9973
  • guoer9973
  • 2016年05月24日 18:20
  • 1096

亚马逊云物联网AWS IoT初体验

AWS IoT 是一款托管的云平台,使互联设备可以轻松安全地与云应用程序及其他设备交互。AWS IoT 可支持数十亿台设备和数万亿条消息,并且可以对这些消息进行处理并将其安全可靠地路由至 AWS 终端...
  • jo_joe
  • jo_joe
  • 2017年09月14日 09:16
  • 953

ESP32 连接 AWS IOT

ESP32 连接 AWS IOT 首先提供源码吧,别说了:GitHub源码地址
  • qq_27114397
  • qq_27114397
  • 2018年01月12日 12:28
  • 126

AWS IOT C++ SDK 使用

测试在Linux环境下使用makefile。 使用的是openssl 作为mqtt的网络实现。 C++ SDK samples 中PubSub.cpp写的很清楚该怎么用。 本文主要讲怎么把我们想...
  • m0_37263637
  • m0_37263637
  • 2018年01月30日 20:13
  • 168

国外物联网平台初探(一) ——亚马逊AWS IoT

平台定位 AWS IoT是一款托管的云平台,使互联设备可以轻松安全地与云应用程序及其他设备交互。AWS IoT可支持数十亿台设备和数万亿条消息,并且可以对这些消息进行处理并将其安全可靠地路由至 ...
  • u011596455
  • u011596455
  • 2017年09月10日 20:51
  • 424

言语之间智能交互,物联智慧如“影”随形 — 机智云带你探秘Amazon Alexa与AWS IoT | 4月11日 深圳

亚马逊Alexa作为登上今年CES霸主地位的智能语音服务,将人工智能与人类生活更进一步的紧密相连,颠覆了大众认为人工智能领域如阳春白雪,久久难以落地的刻板印象。它几乎无所不在,出现在汽车、家电、手机、...
  • gizwits_csdn
  • gizwits_csdn
  • 2017年03月31日 11:06
  • 838

IoT

背景对IoT(Internet of Things, 物联网)平台进行调研,调研对象有:亚马逊的AWS IoT 和 阿里智能AWS IoT 主页: https://aws.amazon.com/c...
  • chj90220
  • chj90220
  • 2016年06月21日 16:36
  • 1342
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:交叉编译AWS IOT C++ SDK及环境测试
举报原因:
原因补充:

(最多只允许输入30个字)