全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 钉钉智能硬件
阿里云物联网套件

SDK移植说明

更新时间:2017-09-04 19:13:08

本篇文档主要讲杭州节点设备端SDK跨平台移植文档。

SDK代码结构

iot_sdk

  • common目录主要是常用的utility库。
  • example目录是针对os平台的demo。
  • include目录包含ccp和mqtt对外的头文件。
  • platform目录包含os平台需要实现的接口文件,包括socket、mutex、semphore、timer、thread、memory等。
  • public_libs目录包含mbedtls库和其它tls库的api接口实现。
  • src目录包含ccp和mqtt协议代码实现。
  • 红色框是移植其它os平台需要实现的接口文件。

移植

对于其它平台,SDK暂未支持,后面会陆续支持更多的平台。现在如果想在其它平台上运行SDK,可以按照下面的方法进行移植:

  • 在platform目录下新建一个本平台的目录
  • 目录下包含src和inc两个目录,是平台相关接口的代码实现和头文件定义,src目录包含以下文件:
  1. aliyun_iot_platform_memory.c // 内存分配和释放
  2. aliyun_iot_platform_network.c // 网络操作
  3. aliyun_iot_platform_persistence.c // 文件操作,可不实现,参考freertos平台
  4. aliyun_iot_platform_pthread.c // 线程和互斥锁
  5. aliyun_iot_platform_random.c // 随机数生成,复用freertos平台下的实现即可
  6. aliyun_iot_platform_signal.c // 信号,可不实现,参考freertos平台
  7. aliyun_iot_platform_timer.c // 定时器
  8. aliyun_iot_platform_threadsync.c // 信号量同步
  • IoT SDK默认使用Mbedtls,如果嵌入式开发板SDK有SSL库,没有必要把IoT SDK带的Mbedtls添加到开发板上面,可以修改文件aliyun_iot_network_ssl.c,用开发板SDK带的SSL库替换掉Mbedtls,这样节省RAM/ROM资源。
  • 兼容SSL库的代码放在下面的目录:
  1. sdk\public_libs\porting\mbedtls //Mbedtls api接口
  2. sdk\public_libs\porting\micossl //mico ssl api接口
  3. sdk\public_libs\porting\qcassl //高通threadx平台ssl api接口
  4. sdk\public_libs\porting\openssl //openssl api接口
  1. IoT SDK 支持MQTT+TCPMQTT+TLS方式来传输MQTT数据。
  2. 如果开发板RAM/ROM资源受限,可以采用MQTT+TCP方式来传输MQTT数据,这样public_libs\mbedtls目录就无需编译到开发板SDK里面,同时需要把sdk\src\mqtt\MQTTClient-C\nettype\tcp添加到编译系统里面。
  3. RAM/ROM资源充足建议采用TLS方式,需要把sdk\src\mqtt\MQTTClient-C\nettype\tls添加到编译系统里面。
  • 以重写文件sdk\public_libs\porting\micossl\aliyun_iot_network_ssl.c为例。
  1. typedef struct _TLSDataParams {
  2. mico_ssl_t ssl; //根据具体的SSL库添加ssl data
  3. int socketId;
  4. }TLSDataParams;
  5. /*
  6. * SSL接收,一定要实现为阻塞式的读
  7. * buffer: 存放接收数据的buffer
  8. * len: 要读的数据的长度
  9. * timeout_ms: 没有数据可读的时候,需要阻塞的最大时间,单位是毫秒
  10. * 函数返回值: 返回实际读取到的数据长度
  11. */
  12. int aliyun_iot_network_ssl_read(TLSDataParams *pTlsData, unsigned char *buffer, int len, int timeout_ms);
  13. /*
  14. * SSL发送
  15. * buffer: 存放要发送的数据。
  16. * len: 要发送的数据长度
  17. * timeout_ms: 发送的超时时间,可以忽略。
  18. * 函数返回值: 返回实际发送的数据长度
  19. */
  20. int aliyun_iot_network_ssl_write(TLSDataParams *pTlsData, unsigned char *buffer, int len, int timeout_ms);
  21. //关闭SSL连接,释放资源
  22. void aliyun_iot_network_ssl_disconnect(TLSDataParams *pTlsData);
  23. /*
  24. * SSL连接
  25. * addr: server IP地址
  26. * port: server端口号
  27. * ca_crt: 服务端证书内容
  28. * ca_crt_len: 服务端证书长度
  29. */
  30. int aliyun_iot_network_ssl_connect(TLSDataParams *pTlsData, const char *addr, const char *port, const char *ca_crt, size_t ca_crt_len);

编译

  • 如果使用Makefile编译,需要把make.settings中的PLATFORM、PLATFORM_CC、PLATFORM_AR改成本平台相关的,并且在PORTING_INCLUDE中添加本平台编译需要依赖的头文件路径
  • 如果使用IAR工具编译,可以参考Mico平台下的编译方法C-SDK使用(Mico)
本文导读目录