Link Kit SDK介绍
下面是阿里官网对Link Kit的描述:
Link Kit SDK由阿里云提供给设备厂商集成到设备上,将设备安全的接入到阿里云IoT物联网平台,并让设备可以被阿里云IoT物联网平台进行控制与管理。
阿里物联网云的Link Kit SDK解决方案如下(摘自阿里官方手册)
当Zephyr iot设备使用Link Kit SDK for C
软件结构如下(摘自阿里官方手册)
1.应用编程接口(API)
Link Kit SDK提供API给设备调用,用于对SDK提供的各个功能模块进行控制, 在zephyr中可直接用于APP的开发
2.功能模块
由Link Kit SDK本身实现,提供了一系列功能模块供设备调用:
- 设备连云:提供MQTT、CoAP、HTTP/S等多种方式连接阿里云IoT物联网平台
- 设备身份认证:提供一机一密、一型一密对设备进行身份认证
- OTA:提供设备固件升级
- 子设备管理:接入子设备
- WiFi配网:将无线路由器AP的SSID、密码传输给WiFi设备
- 设备管理:提供属性、服务、事件来对设备进行管理和控制
- 用户绑定:提供安全绑定token来支持用户与设备进行绑定
- 设备本地控制:对于使用WiFi和以太网接入的设备,手机或者网关如果与设备位于同一个局域网,则可以通过局域网对设备进行控制而不是通过云端进行控制,从而让控制更快捷更可靠.
3.硬件适配接口(Hardware Abstraction Layer, HAL)
Link Kit SDK需求的标准接口,由zephyr的API来实现,移植主要是体现在这里
移植
SDK准备
zephyr是C环境,因此下载C-SDK即可
下载
SDK功能配置和剪裁
将下载后的C-SDK解压缩,例如我是加压缩到~/work/project/alisdk, 在解压缩的目录下执行make menuconfig进行配置和剪裁,如下图:
对于zephyr选择以下三项,其它的属于功能选项可根据需求配置
1 | PLATFORM_HAS_STDINT |
进行保存退出
抽取SDK
Link Kid SDK提供SDK编译为库和提取SDK两种移植方法,这里zephyr选择提取SDK,这样源代码可控:
在~/work/project/alisdk下执行./extract.sh 可以看到如下提示
1 | Download request sent, waiting respond ... |
然后在output内就能看到提取的文件
1 | drwxr-xr-x 7 frank frank 4096 7月 12 10:57 eng |
eng是SDK的文件,将其拷贝到你zephyr的app下面
SDK移植
为测试新建一个zephyr的app,例如我放在~/work/project/nrf52_moderate/apps/aliiot下,目录结构如下
1 | . |
将提取的eng放到src下
修改CMakeLists.txt
修改CMakeLists.txt,让其能编译到eng下的内容
1 | cmake_minimum_required(VERSION 3.13.1) |
实现wrapper.c
使用zephyr提供的API实现eng/wrappers/wrapper.c要求的函数即可, wrapper.c需求的函数不多,大约是下面几种
1.操作系统函数–封装mutex,time,sleep等函数
2.内存分配函数–封装malloc,free函数
3.TCP函数–封装TCP读写函数
4.标准C封装–printf,随机树等函数
5.device信息–device的name/key/secret/version等
1~4大多实现都是简单封装,这里不做详述。以提交PR到Ali-iotkit,等待merge,可以参考 https://github.com/aliyun/iotkit-embedded/pull/150 ,不过该项目好像不活跃提交了4天还没人review。
Device信息API实现说明
Device信息API有如下几个
1 | int HAL_GetDeviceName(char device_name[IOTX_DEVICE_NAME_LEN + 1]) |
这些是zephyr作为device在aliyun上唯一识别和认证的信息,需要从aliyun上找到并写入这些函数,由这些函数提供给SDK。
在云端需要创建product和device。你可以拥有多个product,每个product下有多个device,例如:
1.智能家居可以做为一个product,这个product下可以有:客厅温湿度device, 卧室温湿度device,厨房燃气device,灯光控制device等等
2.智能大棚可以做为一个product,这product下可以有:玉米大棚device,草莓大棚device,葡萄大棚device等等
aliyun上如何创建product和device不是本篇重点,可参考 https://help.aliyun.com/document_detail/73705.html?spm=a2c4g.11174283.2.1.3a8b1668UuBEFk 进行。
当创建好product和device后,我们看下如何取得上面4个API需要的信息:
product:
登录入阿里云物联网平台在”设备管理->产品”下点击查看你的product:
在product的详情也中能找到productkey和productsecret:
device
在”设备管理->设备”下点击查看你的device:
在device的详情中能找到devicename和devicesecret:
prj.conf修改
zephyr的app中prj.conf中主要是开启TCP/IP和LIBC的支援
1 | # RX/TX buffer要给得足够大,避免网络通讯出问题 |
编译
编译方法同一般的zephyr app,编译结果如下
1 | make -j |
SDK和其中各部分的占比如下
1 | make rom_report | grep eng |
按前面的配置可以看到SDK大约占512kx35.53%x11.43%=21K
参考
https://help.aliyun.com/product/93051.html?spm=a2c4g.11186623.6.540.4eb0492bAnxrUX