阿里云IOT-C-SDK系列(1)概述:移植流程、程序框架、代码目录

前言

        阿里云推出的物联网平台是专为设备上云的平台,其物联网平台目前做的还是比较好的,尤其是高级版的物模型 + IOT studio使得设备数据不仅能够在云端上线,而且可以方便的做web+app显示,基本上相当于web版本+app版的组态软件。基于阿里云的市场份额和功能特点,可以预计,未来其物联网平台应该会应用广泛。对于开发者而言,对重要的就是要使设备连接到物联网平台上,连接的协议如果自己实现还是非常复杂的,而其IOT-SDK就是为了方便开发者进行应用开发的,本系列文章计划对SDK架构分析、移植步骤、业务逻辑等全开发步骤进行分析,也算是过程资料。

         系列文章参考了阿里云IOT C-SDK的官方手册《阿里云IOT C-SDK 手册》,C-SDK版本为v3.0.1.官方手册写的还是流程比较详全的,但是很多话写的过于专业,或者说写不够详细,也可能是我比较笨,所以需要结合代码和移植案例,来进行学习。接下来我们按照官方手册的流程来对C-SDK进行详细的分析,注意这里不是照搬,是提炼+总结。

1、应用场景说明

         C linkkit SDK 顾名思义,是为使用C语言 开发业务逻辑的设备 ,设备需要有联网功能,这分为2种情况,一种是设备本身能够联网,比如设备有以太网口,支持TCP/IP 协议。另一种需要外挂通信模组,比如GPRS模组、wifi模组等而对于不能上网也没有模组的设备,需要通过通信网关来实现,网关简单的讲就是代理设备,这个后面会着重的讲解开发 流程。

2、使用C-SDK对接开发流程 

2.1  物联网平台创建注册设备

            在阿里云物联网平台上创建设备或网关,相当于注册,这是必须的,因为要上物联网,必须在物联网平台上注册,注册的方式,物联网平台上有详细的说明。

2.2 交叉编译C-SDK

              阿里云提供的是C-SDK的源码,我们具体使用的时候分两种情况:

        ① 我们直接通过SDK自带的编译系统,编译生成静态库*.a文件,然后我们在linux开发项目中引用该库 文件,当然要包含相 关的头文件,进行开发,SDK的设计还是比较周全的,我们完全可以类似于u-boot 移植的流程,添加我们自己硬件设备的相关配置选项来进行移植、编译SDK.这一点我们后面详细的写该方式的移植步骤。

        ② 我们从C-SDK中抽取我们需要的功能代码,然后将代码放到我们的项目中,假设我们使用linux开发,我们就使用gcc来自己编译,而假设我们使用的是keil或IAR等IDE来开发,也是将对应功能的代码放入到工程中,进行 编译。这里可能会有人疑惑,SDK源码中那么多文件,我怎么知道抽取那些代码?抽取后会不会有各种问题?放心,该SDK在设计时就想到了这一点,在SDK的源码中,有2个工具,一个是 menuconfig 也就是“功能选项”可视化菜单功能和代码抽取工具。menuconfig菜单会将SDK支持的所有功能都罗列出来,然后我们选择我们要使用的功能,然后保存,它就会自动生成一个make.setting文件,这个文件记录了我们选择的功能,然后我们再使用代码抽取工具(一个脚本),抽取工具就会根据make.setting文件来自动的从SDK的源码中,抽取我们选择的功能所需要的全部源文件。这样我们就可以将抽出的代码放到我们的开发项目中,不管后面是基于linux+gcc,还是Keil或IAR等IDE。

        两种方式各有利弊,第一种方式看起来简单,但是难度稍大,要求熟练在linux下进行移植、编译,而且代码冗余,不够清晰。第2种方案是阿里提倡的一种开发方案, 不仅代码更加简洁,而且条理清楚,尤其是使用外挂模组的,模组的HAL驱动实现也是相对麻烦的,需要一点点的调试。上面两种方案,后面都会有详细的移植案例来说明。

2.3 HAL层的实现

             SDK的设计的出发点是和硬件平台无关的,以及运行在哪个操作系统上都无所谓的,只关注与物联网连接的软件功能的实现,所以它对底层的以来,都抽象成了一组HAL_XXX风格的函数来代替。上面的抽取代码步骤,会生成一个 wrapper 文件夹,里面有个 wrapper_xxx.c 的文件,我们需要完善该文件中的所有HAL_XXX 接口函数。这其实也好理解,所有的跟硬件相关的项目移植,都涉及到接口的实现,毕竟每个人用的硬件方案都不一样,所以需要自己去实现。C SDK自带了ubuntu和Windows的接口实现代码,可以参考。这里特别说 一下,如果我们的设备是linux系统,而且有网口,具备TCP/IP驱动,那么可以直接用SDK自带的HAL接口,我们不需要实现HAL_xxx函数, 移植工作将会变得特别简单。

2.4 将SDK和HAL层实现嵌入到工程项目中

           这里可能有些疑惑,为什么要把SDK和HAL分开,这是因为SDK首先提供了最核心的连接物联网的软件功能,这部分的功能能够生成一个 libiot_sdk.a 的库,这部分库只是联网的核心软件功能库,并不包含HAL层的库,而如果我们针对硬件设备开发,还需要实现HAL层,HAL层编译会生成一个libiot_hal.a库,这个库提供硬件接口,只有这两个库的功能都实现了,我们的业务逻辑才能真正的实现 真实的数据联网。注意上面说的是 两个库的功能实现,并不是说我们一定要生成这两个库,上面开发的第2种情况,也就是抽取代码的方案,我们将相关功能的文件放到 我们的项目文件中一起编译也是可以的, 只不过在linux下使用库开发,更加便利一些,也节省开发时间。所以生成库不是必须的,实现库的功能是必须的。有了这两种库的功能,我们就可以使用SDK提供的API来开发我们的项目了。

2.5 编写业务逻辑

            当我们实现了步骤2.4,不管是生成了库文件,还是将相应功能添加到 工程项目后,SDK提供的API接口就可以使用了,接下来我们就可以用这些API接口编写自己的业务逻辑了,比如连接物联网平台、上报数据、订阅主题、 接收命令 等等。

3、C-SDK架构框图

                                

 

代码树如下:


+-- make.settings                       : 记录用户对SDK中哪些功能使用, 哪个功能关闭的配置文件
+-- makefile                            : 使用 Ubuntu16.04 及SDK自带编译系统时的makefile
+-- extract.bat                         : 使用 Windows 主机作为开发环境时的代码抽取脚本
+-- config.bat                          : 使用 Windows 主机作为开发环境时的功能配置脚本
+-- extract.sh                          : 使用 Linux 主机作为开发环境时的代码抽取脚本
+-- model.json                          :示例物模型.json格式
|
+-- output                              : SDK代码抽取以及编译构建的输出目录
|   |
|   +-- eng                             : SDK代码抽取输出目录, 运行 extract.sh 或 
                                          extract.bat 后产生
|   |   +-- dev_model
|   |   +-- dev_sign
|   |   +-- infra                       : 被抽取出来的各个功能点实现源码
|   |   +-- mqtt
|   |   +-- wrappers
|   |
|   +-- examples                        : 被抽取出来的各个功能点API调用例程
|
+-- certs                               : 服务端根证书目录, 存放阿里云IoT物联网平台的云端证书
+-- external_libs                       : SDK使用的第三方开源库
|   +-- mbedtls
|   +-- nghttp2
+-- src                                 : SDK中各个功能点的实现源码, 运行 extract.sh 或 
                                          extract.bat 后会抽取到 output
|   |
|   +-- infra                           : 基座组件, 用户不必关心, 其内容的多寡由用户选择使用
                                          的功能点多少自动适应
|   +-- dev_sign                        : 设备签名模块, 体积最小的SDK可仅选用此功能
|   +-- mqtt                            : MQTT上云
|   +-- coap                            : CoAP上云
|   +-- http                            : HTTP上云
|   +-- ota                             : OTA固件升级
|   +-- dev_model                       : 物模型管理
|   +-- dynamic_register                : 一型一密
|   +-- dev_bind                        : 设备绑定
|   +-- dev_reset                       : 设备重置
|   +-- http2                           : HTTP2流式传输和文件上传
|   +-- wifi_provision                  : WiFi配网
|   +-- atm                             : AT命令辅助模块, 将SDK运行在外挂网络通信模组的MCU
                                          上, MCU和模组间用AT指令通信时使用
|

+-- tools                               : SDK抽取代码等行为所依赖的主机工具, 用户不必关心
+-- wrappers                            : SDK对外界依赖的函数接口 HAL_XXX 或者 wrapper_xxx 
                                          的参考实现
    +-- atm
    +-- os
    |   +-- freertos                    : SDK运行在FreeRTOS操作系统上的对接代码示例
    |   +-- nos                         : SDK运行在无操作系统的设备上的对接代码示例
    |   +-- ubuntu                      : SDK运行在Ubuntu操作系统上的对接代码示例
    |   +-- nucleus                     : SDK运行在Nucleus操作系统上的对接代码示例
    +-- tls

 


 

 

 

 


————————————————
版权声明:本文为CSDN博主「猪哥-嵌入式」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u012351051/article/details/98990423

 

https://zhuge.blog.csdn.net/article/details/98990423

https://blog.csdn.net/u012351051/category_6785584.html

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
微软云IoT C SDK是微软提供的一个软件开发工具包,用于在物联网设备上进行开发和集成Azure云服务。移植微软云IoT C SDK是将该SDK在其他平台或设备上进行适配和运行的过程。 首先,移植微软云IoT C SDK需要根据目标平台的特点和功能进行一些必要的调整和修改。例如,如果目标平台是嵌入式系统,则需要考虑处理器架构、操作系统支持、内存限制等因素。如果目标平台是单片机,则需要关注外设接口、中断处理等方面。 其次,需要根据目标平台的编译工具链进行相应的配置。微软云IoT C SDK使用C语言进行开发,因此需要确保目标平台的编译器和构建工具能够支持C语言,并且能够正确地编译和链接相关的源码和库文件。 然后,在进行SDK移植时,需要注意对平台相关的API进行适配和替换。由于不同平台可能有不同的系统调用和底层库函数,因此需要针对目标平台进行调整。同时,还需要根据目标平台的硬件特点进行相关配置,例如网络接口、传感器接口等。 最后,在移植完成后,需要进行测试和验证。可以使用样例代码或自己编写的测试代码,验证SDK在目标平台上的功能和性能是否正常。同时,还可以通过与云服务进行通信,测试数据传输和处理的稳定性和可靠性。 总之,移植微软云IoT C SDK是一个涉及到适配、配置、替换和测试的过程,需要根据目标平台的特点进行相应的调整。通过移植,可以使物联网设备能够方便地与Azure云服务进行集成和通信,实现各种物联网应用场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值