驱动的编译及运行
更新时间:2018-08-03 14:15:40
本文将讲述使用Leda_sdk_c库开发驱动后如何编译、运行驱动。
1. Leda_sdk_c库生成
1.1 依赖环境
本工程需要的编译工具版本保证和表格中列举版本一致或更高版本,否则将编译可能会失败
Tool | Version |
----------|---------|
gcc | 4.8.5+ |
make | 3.82+ |
1.2 依赖组件
本工程依赖库的版本要保证和表格中列举版本一致或更高版本,否则将编译可能会失败
Componet | Version |
----------|---------|
cjson | 1.5.5+ |
dbus | 1.2.1+ |
logger | / |
1.3 编译步骤
$ make prepare #生成leda_sdk_c需要的依赖库
$ make leda_sdk #生成leda_sdk_c库
$ make tool #生成调试工具
2. 编译和运行驱动
2.1 如何引用
在驱动业务代码中引入设备接入SDK头文件,按照业务需求进行接口使用。因为设备接入SDK依赖动态库cjson、dbus和logger,所以在引用SDK头文件的地方需要包含这三个库的头文件。
2.2 如何编译
按照驱动引用库,进行库链接。因为设备接入SDK依赖动态库cjson、dbus和logger,所以在必须要在包含设备接入SDK库之外必须要包含cjson、dbus和logger库引用。
2.3 如何调试
设备接入SDK工程源码中包含调试工具,调试工具模拟了设备注册、上下线、上下行数据、配置管理等服务。因为该工具不依赖于云端环境,所以在驱动开完完成后,可以通过该调试完成基本功能调试。
2.4 同步到Docker
在使用调试工具完成基本功能测试后,就可以将驱动迁移到LinkEdge环境,进行真实环境的测试。
当前,LinkEdge环境都是以docker镜像形式对外发布。所以如果要把完成基本功能验证的驱动在LinkEdge环境下测试,就需要把驱动和LinkEdge的docker镜像关联起来,关联方式有多种,下面列举两种常用方式。
2.4.1 拷贝方式
将驱动产物拷贝到LinkEdge环境docker镜像中,具体可以通过docker cp命令实现
docker cp: 用于容器与主机之间的数据拷贝
$ docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
$ docker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH
将主机/home/ivan/driver目录拷贝到容器id为2da729e2ce7b的/home/ ivan/driver目录下。
$ docker cp /home/ivan/driver 2da729e2ce7b:/home/ivan/driver
将容器id为2da729e2ce7b的/home/ivan/driver目录拷贝到主机的/home/ivan/driver目录下。
$ docker cp 2da729e2ce7b:/home/ivan/driver /home/ivan/driver
2.4.2 挂载方式
docker支持把一个宿主机上的目录挂载到镜里,通过该方式将驱动产物所在宿主机目录挂载到LinkEdge环境docker镜像中
$ docker run -it -v /home/ivan/driver:/mnt reg.docker.alibaba-inc.com/aliot-linkedge/linkedge-centos:v0.8.7 /bin/bash
通过-v参数,冒号前为宿主机目录,必须为绝对路径,冒号后为镜像内挂载的路径。
现在镜像内就可以共享宿主机里挂载目录的文件了,默认挂载的路径权限为读写。
2.5 如何运行
由于驱动编译环境依赖库路径和LinkEdge环境可能并不一致,所以将驱动产物同步到LinkEdge环境的docker后还需要设置下依赖库环境变量。设置依赖库环境变量操作如下:
$ export LD_LIBRARY_PATH=$(readlink -e /linkedge/build/lib):$LD_LIBRARY_PATH
/linkedge/build/lib: docker环境中LinkEdge链接库的路径
注:export命令仅对当前shell会话生效,当创建新shell会话时需要重新执行一遍。
依赖环境设置完成后,按照下述两个步骤即可完成驱动运行
a) 启动网关服务(若已启动则不需要重复执行)
./linkedge/build/script/iot_gateway_start.sh
b) 启动驱动
./home/ivan/driver/xxx_驱动
2.6 如何上线
请参照快速开始
中设备接入
章节,真实设备上云流程与虚拟设备上云流程是一样的。