首页 IoT安全中心 用户指南 资产管理 接入指引 载体为软件沙箱的设备接入阿里云物联网平台

载体为软件沙箱的设备接入阿里云物联网平台

本文介绍了ID²设备端SDK的集成方法。

本文介绍了ID²设备端SDK的集成方法,适用于以下场景:

  1. 使用Link SDK v4.x。

  2. 载体类型为软件沙箱。

  3. 烧录方式为动态下发。

重要

设备端必须预留50K ROM、4K RAM、4K存储分区(用于ID²的安全存储,需保证系统升级时该分区数据不被破坏)。

下载Link SDK

  1. 定制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

编译脚本

  1. 获取KM库文件

ID²的KM模块通过IoT安全中心-资产管理-直连设备- ID²接入指引-下载安全SDK,下载设备端安全SDK,解压后获得libkm.a库文件。

编译ID² SDK

  1. 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

  1. 编译生成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

  1. 拷贝ID² 库文件

将上面编译生成的out/libs目录整体拷贝到Link SDK目录下。

  1. 修改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

  1. 关闭mbedtls

修改core/sysdep/core_adapter.c文件,关闭宏CORE_ADAPTER_MBEDTLS_ENABLED。

  1. 修改示例代码中的产品信息

修改demos/mqtt_id2_demo.c文件:

  1. 编译

执行make编译出output/mqtt-id2-demo可执行文件。

  1. 运行

运行output/mqtt-id2-demo,正确的运行结果如下图所示。

阿里云首页 IoT安全中心 相关技术圈