设备接入驱动编码完成后,需进行驱动的调试。调试阶段包括:编译打包、上传驱动、搭建环境、创建物模型、创建设备、部署驱动、查看调试信息、调试数据交互和本地替换更新驱动。
一、编译打包
驱动打包相关要求,请参见本文下方驱动打包注意事项。
- 下载示例代码。
git clone https://github.com/aliyun/linkedge-thing-access-sdk-c.git
- 进入linkedge-thing-access-sdk-c目录,完成示例编译。
cd linkedge-thing-access-sdk-c
make prepare && make && make install
- 查看示例编译产物。
cd build/bin/demo/demo_led/ && ls -l
系统显示类似如下图表示已完成编译并打包。

二、上传并发布驱动
更多操作详情及参数说明,请参见驱动发布。
- 在边缘计算控制台左侧导航栏单击驱动管理,然后单击自研驱动页签。
- 在自研驱动页签下,单击新建驱动。
参考
云端发布内容,设置驱动参数。

本示例中,驱动是否内置需要选择否,然后在驱动文件下,上传已完成编译并打包的led_driver.zip文件。
- 完成参数的设置并上传成功驱动文件后,单击确认。您可以在自研驱动页签中看到刚刚创建的驱动。
三、分配驱动和设备到边缘实例
部署驱动依赖边缘实例,即您在前提条件中完成的环境搭建操作。
- 左侧导航栏单击边缘实例,在已创建的边缘实例右侧单击查看。
- 在实例详情页面设备与驱动页签下,单击全部驱动右侧的
+
图标 。
- 在分配驱动面板中,选择自研驱动并在已创建的自定义驱动对应操作栏中单击分配。然后单击完成。
- 选择已分配的自定义驱动demo_driver,单击分配子设备,在demo_driver驱动下为边缘实例分配设备。
- 在右侧弹出的分配子设备面板中,单击添加子设备。
- 在添加设备对话框,单击新建产品,创建一个产品。
- 在创建产品对话框设置参数后,单击完成。
表 1. 参数说明
参数 |
描述 |
产品名称 |
设置产品名称,产品名称在账号内具有唯一性。支持中文、英文字母、数字、下划线(_)、短划线(-)、at符号(@)和英文圆括号,长度限制4~30个字符,一个中文汉字算2个字符。 |
所属品类 |
选择品类,为该产品定义物模型。此处选择自定义品类。
|
接入网关协议 |
此处必须选择自定义。
|
认证方式 |
选择适合您设备的认证方式。详情请参见设备安全认证。
|
产品描述 |
添加对该产品的描述。可以为空。 |
- 返回添加设备对话框,单击前往配置,为产品添加自定义功能。
- 返回添加设备对话框,添加设备。
- 在分配子设备对话框中,单击刚创建的设备右侧的分配,将设备分配到边缘实例。
- 分配设备到边缘实例后,单击设备名称对应操作栏中的设备配置,配置设备信息。

编写JSON格式配置内容(内容不可超过1 KB),并校验格式通过后,单击确定。
- (可选)通信协议类型为LoRa WAN的驱动,分配子设备后需要进行ABP 入网配置。
- 在关联LoRa WAN协议驱动的子设备对应操作栏中单击ABP 入网配置。
- 设置ABP入网配置参数。
说明 ABP(Activation By Personalization)是LoRa WAN协议设备的一种入网认证方式。
表 2. 参数说明
参数 |
描述 |
DevEUI |
设备扩展的唯一标识符。请填写16位十六进制数值,例如d896e0000900**** 。
|
DevAddr |
设备地址。请填写8位十六进制数值,例如66be**** 。
|
AppSKey |
应用会话密钥。请填写32位十六进制数值,例如623bd505f042090b5af660954509**** 。
|
NwkSKey |
网络会话密钥。请填写32位十六进制数值,例如e1336a94a03aa3beae55b737acda**** 。
|
Class |
通信节点的特定类。有A、B和C三种特定类。
|
上行 FPort |
上行应用端口,取值范围为1~223。 |
下行 FPort |
下行应用端口,取值范围为1~223。 |
- 单击确定,完成配置。
四、部署边缘实例
- 在实例详情页面,右上角单击部署,部署边缘实例。部署成功后边缘实例名称后显示部署成功。
- 查看调试信息。
实例部署成功后,可以查看设备连接状态和运行状态。这些信息可以在阿里云物联网平台(云端)查看,也可以在边缘网关运行环境中的驱动运行日志中查看。
- 云端查看:
- 在实例详情页面设备与驱动页签,选择自定义驱动demo_driver,查看设备连接状态。

- 单击设备名称右侧操作栏中的查看,跳转到物联网平台设备详情页面。
- 选择页签,查看设备上报的数据。

- 本地查看:
- 通过
./fctl show
命令,可以查看到部署驱动的具体位置。 cd /linkedge/gateway/build/bin/
./fctl show
系统显示类似如下图所示。

表 3. 参数说明
字段名称 |
字段解释 |
DriverName |
驱动名称,该名称为在二、上传并发布驱动步骤中设置的驱动名称。
|
CodePath |
驱动部署到边缘网关中的位置路径。 |
Process PID |
驱动启动后的进程ID。 |
- 驱动在运行过程中会产生运行日志,通过查看运行日志可以了解驱动运行状态,每个自定义驱动生成的日志文件统一放在/linkedge/run/logger/fc-base路径下。每个驱动日志文件路径为/linkedge/run/logger/fc-base/xxxx/log_xxxx.txt。
说明 驱动日志文件路径中的xxxx为在上传驱动时填写的名称。
cd /linkedge/run/logger/fc-base/demo_driver && ls -l
详情如下图所示。

驱动运行日志可以查看大部分驱动的运行状态,但是有时还需要查看其它日志配合了解当前驱动的运行情况,例如设备上线异常时可以查看
dimu
日志,日志文件路径为
/linkedge/run/logger/dimu/log_xxxxx.txt。
cd /linkedge/run/logger/dimu
ls -l
详情如下图所示。

设备上线成功后,如果设备数据上报有异常,则可以查看
cloud_proxy
日志。cloud_proxy产生的运行日志文件路径格式为
/linkedge/run/logger/cloud-proxy/log_xxxxx.txt。
cd /linkedge/run/logger/cloud-proxy
ls -l
详情如下图所示。

五、调试数据交互
如果设备上线成功,则可以使用阿里云物联网平台在线调试功能调试驱动和设备,该功能页面还可以实时查看设备上报的数据信息,也可以触发对设备服务的调用请求。
- 在物联网平台控制台,选择,在在线调试页面,选择调试产品和调试设备。
- 选择调试设备待调功能和服务,进行调试,并查看设备实时运行日志。
六、(可选)本地替换驱动
如果在驱动调试过程中发现问题,需要修改驱动代码重新生成新的驱动进行调试,这时只需要在本地替换修改编译后的驱动即可。
- 找到驱动的位置。可以通过fctl命令进行查找,具体字段解释查看调试信息。
cd /linkedge/gateway/build/bin/
./fctl show

- 根据CodePath找到驱动所在位置路径,完成替换。
- 根据Process PID得到驱动进程ID,使用kill -9 Pid命令重新启动驱动。
kill -9 Pid #Pid为驱动进程ID,即通过fctl命令查看得到的Process PID
- 替换驱动并完成驱动调试后,可参见本文上方二、上传并发布驱动步骤,将驱动发布到物联网平台控制台。
至此,您已完成驱动的调试与发布过程。
驱动依赖注意事项
设备接入驱动根据协议和业务场景的不同,可能会涉及第三方库依赖。Link IoT Edge针对开发设备接入驱动所用不同开发语言,分别制定了第三方库依赖规则。
- C版本SDK:
C语言属于编译型语言,如果编译目标环境和运行环境不一致,则很可能导致不可运行。所以对于使用设备接入C版本SDK开发驱动,需要保证开发编译目标环境和运行环境相同。
驱动包中包含驱动程序和依赖动态库。如果该驱动依赖于第三方库,则需要将动态库和驱动程序一起打包生成最终驱动程序包。
- Node.js版本SDK:
使用设备接入SDK Node.js版本开发驱动时,若依赖第三方库,需要到Link IoT Edge运行环境上开发驱动,并在驱动目录中使用如下命令安装依赖。
npm install 第三方库名
- Python版本SDK:
使用设备接入SDK Python版本开发驱动时,若依赖第三方库,需要到Link IoT Edge运行环境上开发驱动,并在驱动目录中使用如下命令安装依赖。
pip3 install -t . 第三方库名
驱动打包注意事项
基于Link IoT Edge提供的SDK开发驱动并完成调试后,需将产物打包为.zip包,并确保驱动Binary或index源文件在.zip包第一级目录。
每个版本SDK开发的驱动在打包时,有不同的打包规则。
- 基于C SDK开发的驱动
对于C语言开发的驱动,驱动包中包含驱动程序和驱动依赖的动态库。如果驱动程序包含依赖库,则需要将依赖库放置指定的位置,即在驱动程序当前路径下的lib文件夹下。具体操作步骤如下:
- 规定驱动程序需命名为main。
- 在main当前路径下创建lib文件夹。
- 将main依赖的动态库全部拷贝到lib文件夹下。
- 使用zip命令对当前路径下的main和lib进行压缩处理生成zip包。
zip -r your_driver_name.zip main lib
- 基于Python SDK开发的驱动
驱动包文件中须包含index.py,并且在该文件中定义handler函数。驱动是一个在函数计算应用引擎中持续运行的函数,所以在驱动包中须包含index.py文件,并且在该文件中定义handler函数。
驱动运行时,会加载index.py文件。而该文件中,函数计算应用定义的handler函数是不会被调用,因此驱动代码须放在handler函数外,保证加载index.py文件时能直接执行。详情请参考Python版本SDK。
- 基于Node.js SDK开发的驱动
驱动包文件中须包含index.js,并且在该文件中定义handler函数。
驱动运行时,会加载index.js文件。而该文件中,函数计算应用定义的handler函数是不会被调用,因此驱动代码须放在handler函数外,保证加载index.js文件时能直接执行。详情请参考Nodejs版本SDK。
在文档使用中是否遇到以下问题
更多建议
匿名提交