载体为软件沙箱的设备接入阿里云物联网平台
本文介绍了ID²设备端SDK的集成方法。
本文介绍了ID²设备端SDK的集成方法,适用于以下场景:
使用Link SDK v4.x。
载体类型为软件沙箱。
烧录方式为动态下发。
设备端必须预留50K ROM、4K RAM、4K存储分区(用于ID²的安全存储,需保证系统升级时该分区数据不被破坏)。
下载Link SDK
定制Link SDK
Link SDK 4.x的定制下载方式参考:
https://help.aliyun.com/document_detail/163755.html
设备认证方案务必要选择ID²。

下载后,解压可以得到Link SDK和ID² SDK,ID² SDK打包集成了阿里云IoT在设备端的安全框架和安全组件,代码目录结构如下表所示:
目录 | 说明 |
modules | 核心模块代码 |
include | 头文件 |
app | 测试代码,可用于集成调试 |
sample | crypto模块的示例代码 |
doc | 文档 |
make.settings | ID²配置文件 |
make.rules | 编译系统配置文件,可配置编译工具链和编译参数 |
makefile | 编译脚本 |
获取KM库文件
ID²的KM模块通过IoT安全中心-资产管理-直连设备- ID²接入指引-下载安全SDK,下载设备端安全SDK,解压后获得libkm.a库文件。
编译ID² SDK
ID² SDK适配
针对不同的操作系统和硬件平台,ID²抽象出统一的OSA层接口和HAL层接口,这些接口需要您根据使用的具体操作系统和硬件平台来实现,ID² SDK中的其他模块会调用这些接口。
(1)OSA层
OSA层是操作系统适配层,需要适配的代码在include/osa/ls_osa.h中定义,并非所有接口都需要实现,具体参考下表,实现方式可以参考modules/osa/linux/src/ls_osa.c。
接口 | 说明 | 是否必须 |
ls_osa_print | 格式化打印 | 是 |
ls_osa_snprintf | 字符串格式化 | 是 |
ls_osa_malloc | 内存分配 | 是 |
ls_osa_calloc | 内存分配 | 是 |
ls_osa_free | 内存释放 | 是 |
ls_osa_net_connect | 创建网络连接 | 是 |
ls_osa_net_disconnect | 断开网络连接 | 是 |
ls_osa_net_send | 发送数据 | 是 |
ls_osa_net_recv | 接收数据 | 是 |
ls_osa_get_time_ms | 获取系统当前时间戳 | 是 |
ls_osa_msleep | 睡眠函数 | 否 |
ls_osa_mutex_create | 创建互斥锁 | 否 |
ls_osa_mutex_destroy | 销毁互斥锁 | 否 |
ls_osa_mutex_lock | 互斥锁上锁 | 否 |
ls_osa_mutex_unlock | 互斥锁解锁 | 否 |
(2)HAL层
HAL层包括基础算法HAL和KM-HAL,基础算法HAL原则上可以直接使用modules/hal/demo/src中的代码,如果不适用,也可以自行实现;KM-HAL必须实现,接口定义在include/hal/ls_hal_km.h,实现代码请放在modules/hal/demo/src/ls_hal_km.c,并将其添加到modules/hal/makefile中参与编译。
接口 | 说明 | 是否必须 |
ls_hal_get_dev_id | 获取设备唯一ID | 是 |
ls_hal_open_rsvd_part | 打开存储分区,如不支持文件系统,直接返回0即可 | 是 |
ls_hal_write_rsvd_part | 向指定的分区中写入数据 | 是 |
ls_hal_read_rsvd_part | 从指定的分区中读出数据 | 是 |
ls_hal_close_rsvd_part | 关闭打开的存储分区,如不支持文件系统,直接返回0即可 | 是 |
OSA层和KM-HAL层的详细接口定义参见:
https://help.aliyun.com/document_detail/117166.html
编译生成ID²库文件
(1)打开ID²/目录
(2)修改make.settings文件
将CONFIG_LS_ID2_OTP=N改为CONFIG_LS_ID2_OTP=Y;
(3)修改make.rules文件
根据实际情况修改CROSS_COMPILE配置及CFLAGS编译选项;
(4)编译
执行make,成功后,out/libs目录下会生成所需的库文件,注意这里生成的libkm.a不会使用,需要使用上面由阿里云编译提供的libkm.a。
至此,所需的库文件已经全部生成:
文件名 | 描述 |
libid2.a | ID²核心功能 |
libitls.a | 基于ID²的轻量级安全连接协议 |
libicrypt.a | 加密算法 |
libls_osa.a | OS抽象层,由用户自行适配 |
libls_hal.a | 硬件抽象层,由用户自行适配 |
libkm.a | ID²安全载体SoftKM,由阿里云编译提供 |
(5)拷贝libkm.a
将从IoT安全中心-ID²接入指引流程中下载的libkm.a库文件拷贝到out/libs目录下
ID² SDK与Link SDK
拷贝ID² 库文件
将上面编译生成的out/libs目录整体拷贝到Link SDK目录下。

修改Makefile
(1)添加ID² SDK的头文件目录
HDR_DIR := $(SRC_DIR) HDR_DIR += ../ID2/include \ ../ID2/include/id2 \ ../ID2/include/osa \ ../ID2/include/hal \ ../ID2/include/itls \ ../ID2/include/crypto \ ../ID2/include/irot \ ../ID2/include/id2/inc \ ../ID2/include/hal/demo/inc |
(2)添加ID²库文件
ID2_LIB := libs/libitls.a libs/libid2.a libs/libkm.a libs/libicrypt.a libs/libls_hal.a libs/libls_osa.a all: prepare $(PROG_TARGET) prepare: $(Q)mkdir -p output $(PROG_TARGET): $(OBJ_FILES) $(ID2_LIB) $(Q)echo "+ Linking $(OUT_DIR)/$(notdir $@) ..." $(Q)mkdir -p $(dir $@) $(Q)$(CC) -o $@ \ $(patsubst $(OUT_DIR)/%,%,$(addsuffix .c,$(subst $(notdir $@),$(subst -,_,$(notdir $@)),$@))) \ $(BLD_CFLAGS) $^ $(BLD_LDFLAGS) $(Q)mv $@ $(OUT_DIR) $(OUT_DIR)/%.o: %.c |
关闭mbedtls
修改core/sysdep/core_adapter.c文件,关闭宏CORE_ADAPTER_MBEDTLS_ENABLED。
修改示例代码中的产品信息
修改demos/mqtt_id2_demo.c文件:

编译
执行make编译出output/mqtt-id2-demo可执行文件。
运行
运行output/mqtt-id2-demo,正确的运行结果如下图所示。
