AWS IOT Device C SDK交叉编译(嵌入式linux)

本文前提:为iot 环境已测试完成且事物(设备已创建)的情况下。
注意这篇文章是将C SDK交叉编译到嵌入式linux,并不是其他操作系统或没有操作系统的单片机中。

环境测试及设备创建请参考:
https://blog.csdn.net/m0_37263637/article/details/80989986
本文仅用于验证aws-iot-device-sdk-embedded-C,如何控制设备可参见后文:

1 Ubuntu上测试

这部分官方文档可参考:
https://docs.aws.amazon.com/zh_cn/iot/latest/developerguide/iot-embedded-c-sdk.html

1.1 下载 device C SDK

git clone https://github.com/aws/aws-iot-device-sdk-embedded-C.git -b release

1.2 安装配置三方库

1.2.1 jsmn

源码自带

1.2.2 mbedTLS

https://tls.mbed.org/download/start/mbedtls-2.11.0-apache.tgz
下载 mbedTLS lib,解压并将mbedTLS中内容放到aws-iot-device-sdk-embedded-C/external_libs/mbedTLS目录下

1.2.3 CppUTest

https://github.com/cpputest/cpputest/releases/tag/v3.6
下载 tar包,解压并mbedTLS 中内容放到aws-iot-device-sdk-embedded-C/external_libs/CppUTest目录下

1.3 拷贝证书

将aws iot后台创建的设备时下载的证书复制到aws-iot-device-sdk-embedded-C/certs目录下

1.4 修改sample config内容

到aws-iot-device-sdk-embedded-C/samples/linux/subscribe_publish_sample目录下修改配置aws_iot_config.h
修改下列参数

#define AWS_IOT_MQTT_HOST              "" ///< Customer specific MQTT HOST. The same will be used for Thing Shadow
#define AWS_IOT_MQTT_PORT              443 ///< default port for MQTT/S
#define AWS_IOT_MQTT_CLIENT_ID         "c-sdk-client-id" ///< MQTT client ID should be unique for every device
#define AWS_IOT_MY_THING_NAME          "AWS-IoT-C-SDK" ///< Thing Name of the Shadow this device is associated with
#define AWS_IOT_ROOT_CA_FILENAME       "rootCA.crt" ///< Root CA file name
#define AWS_IOT_CERTIFICATE_FILENAME   "cert.pem" ///< device signed certificate file name
#define AWS_IOT_PRIVATE_KEY_FILENAME   "privkey.pem" ///< Device private key filename
//说明
AWS_IOT_MQTT_HOST:终端节点,AWS后台-具体某个事物-交互-Rest API 终端节点 里找到终端节点,复制进来
AWS_IOT_MQTT_CLIENT_ID:clientID ,AWS后台-具体某个事物-事物 ARN
AWS_IOT_MY_THING_NAME:事物名,AWS后台-具体某个事物-事物
AWS_IOT_ROOT_CA_FILENAME : CA证书名,即1.3中拷贝进去的CA证书文件名
AWS_IOT_CERTIFICATE_FILENAME: IOT 设备证书,即1.3 中拷贝进去的设备证书文件名
AWS_IOT_PRIVATE_KEY_FILENAME:IOT设备私匙,即1.3 中拷贝进去的设备私匙文件名
//配置完成后可能是这样
// Get from console
// =================================================
#define AWS_IOT_MQTT_HOST              "a22j5sm6o3yzc5.iot.us-east-1.amazonaws.com"
#define AWS_IOT_MQTT_PORT              8883
#define AWS_IOT_MQTT_CLIENT_ID         "MyRaspberryPi"
#define AWS_IOT_MY_THING_NAME          "MyRaspberryPi"
#define AWS_IOT_ROOT_CA_FILENAME       "root-CA.crt"
#define AWS_IOT_CERTIFICATE_FILENAME   "4bbdc778b9-certificate.pem.crt"
#define AWS_IOT_PRIVATE_KEY_FILENAME   "4bbdc778b9-private.pem.key"
// ================================================= 

1.5 编译

在aws-iot-device-sdk-embedded-C/samples/linux/subscribe_publish_sample目录下执行make -f Makefile
即会生成subscribe_publish_sample 运行./subscribe_publish_sample
出现下列打印即说明源码准备完毕测试成功。
这里写图片描述

2 sample code提取代码

我们可以从sdk源码中提取出我们需要的部分组成我们实际使用的代码
(1)新建文件夹aws_iot_test
(2)将aws-iot-device-sdk-embedded-C 中 certs external_libs include platform src 这5个文件夹复制到该文件夹下
(3)将aws-iot-device-sdk-embedded-C/samples/linux/subscribe_publish_sample 中文件复制到该文件夹下
(4)修改Makefile
修改APP_NAME 为自己应用名,如aws_iot_test
修改IOT_CLIENT_DIR 为 .
(5)修改主程序文件名
将subscribe_publish_sample.c文件名改为 自己应用名.c
mv subscribe_publish_sample.c aws_iot_test.c
(6)修改主程序中certs 文件路径
aws_iot_test.c中44行 char certDirectory[PATH_MAX + 1] = “../../../certs”;为 ./certs
(7)make 运行测试 aws_iot_test 和1.5中结果一致说明,说明当前代码可用

3 交叉编译到嵌入式linux平台

在2基础上,进行交叉编译

3.1 交叉编译mbedTLS

到/external_libs/mbedTLS目录下 ,执行交叉编译

cd /external_libs/mbedTLS
make clean
make 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

CC 为交叉编译工具位置

3.2 交叉编译测试程序

修改Makefile
将CC=gcc 替换为
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
回到程序根目录执行make
尝试运行sample发现已经运行失败,说明已经交叉编译了

3.3 将测试程序放置到目标机

注意目标机内要有交叉编译工具的相关lib
将测试程序和certs文件夹放到目标机同一目录下运行。
结果和1.5一直说明交叉编译成功。

关于如何使用C SDK 后面在用文章说明

猜你喜欢

转载自blog.csdn.net/m0_37263637/article/details/81103497