首页 > 系统相关 >嵌入式Linux单板连接飞燕物联网平台

嵌入式Linux单板连接飞燕物联网平台

时间:2022-11-16 14:01:22浏览次数:65  
标签:单板 set 飞燕物 ali smartliving add Linux definitions include


大家好,我是杂烩君。

最近,我们的设备连接的云平台需要切到阿里的飞燕平台,做个笔记记录下。

阿里的物联网平台有好几个:

  • 物联网平台
  • 生活物联网平台(飞燕平台)
  • 城市物联网平台

它们的应用场景不一样。其中,物联网平台的入口是最容易找到的,网上大多数demo都是基于物联网平台。而本篇笔记我们是基于生活物联网平台(飞燕平台)来记录的。

阿里的生活物联网平台是面向消费级生活智能设备的平台。

平台入口:

​https://www.aliyun.com/product/livinglink?spm=5176.13907935.J_3207526240.46.56603cc7M41In4​

开发文档:

​https://help.aliyun.com/document_detail/142147.html?spm=5176.20184507.J_1419255180.2.4c111d2e2IUsMC​

下面我们使用基于嵌入式Linux单板系统的设备一步一步地连接飞燕平台。

一、云端创建产品

1、功能定义

定义一些属性:


嵌入式Linux单板连接飞燕物联网平台_java

2、人机交互

配置APP的,后面我们可以使用公版APP进行测试。


嵌入式Linux单板连接飞燕物联网平台_物联网_02

3、设备调试/添加设备


嵌入式Linux单板连接飞燕物联网平台_物联网_03

4、产品发布


嵌入式Linux单板连接飞燕物联网平台_linux_04

5、获取设备SDK

飞燕平台的设备SDK需要发邮件进行获取,具体获取方式可查看文档。获取得到:


嵌入式Linux单板连接飞燕物联网平台_java_05

二、移植sdk库至板子

可以参照文档《无AliOS Things的SDK适配指南》来交叉编译libiot_sdk.a库。

​https://help.aliyun.com/document_detail/178333.htm?spm=a2c4g.11186623.0.0.1b046fdbIkFmIT#task-1935127​

1、配置交叉编译器。

(1)修改文件build-rules/settings.mk中的TOOLCHAIN_DLDIR,比如我这里修改为:


嵌入式Linux单板连接飞燕物联网平台_c++_06

(2)修改build-rules/funcs.mk里面的函数​​Relative_TcPath​​增加编译器的相对路径,比如我这里修改为:


嵌入式Linux单板连接飞燕物联网平台_物联网_07

(3)增加我们板子的config文件。在src/board/目录下增加一个新的config配置文件,里面的内容可以参照已有的配置文件,比如我参照的是config.ubuntu.x86来新增我的板子的配置文件config.linux.rv1126:

CONFIG_ENV_CFLAGS   += \
-Os -Wall \
-g3 --coverage \
-D_PLATFORM_IS_LINUX_ \
-D__UBUNTU_SDK_DEMO__ \

CONFIG_ENV_CFLAGS += \
-DWITH_MQTT_DYN_BUF=1 \
-DWITH_MEM_STATS=0 \
-DWITH_MEM_STATS_PER_MODULE=0 \
-DWITH_MQTT_JSON_FLOW=1 \
-DWITH_MQTT_ZIP_TOPIC=1 \
-DWITH_MQTT_SUB_SHORTCUT=1

CONFIG_ENV_CFLAGS += \
-DCONFIG_HTTP_AUTH_TIMEOUT=10000 \
-DCONFIG_MID_HTTP_TIMEOUT=10000 \
-DCONFIG_GUIDER_AUTH_TIMEOUT=10000 \
-DCONFIG_MQTT_RX_MAXLEN=10000 \
-DCONFIG_MBEDTLS_DEBUG_LEVEL=0 \
-DCOMPATIBLE_LK_KV


ifneq (Darwin,$(strip $(shell uname)))
CONFIG_ENV_CFLAGS += -rdynamic
CONFIG_ENV_CFLAGS += -Werror
CONFIG_ENV_CFLAGS += -Wno-missing-braces
else
CONFIG_src/ref-impl/hal :=
CONFIG_examples :=
CONFIG_src/tools/linkkit_tsl_convert :=
endif

CONFIG_src/ref-impl/tls :=
CONFIG_src/ref-impl/hal :=

CONFIG_ENV_LDFLAGS += -lpthread -lrt

#交叉编译器的前缀,这里不要带路径
CROSS_PREFIX := arm-linux-gnueabihf-

2、配置SDK的功能

我们可以直接编辑根目录下面的make.settings文件,也可以执行make menuconfig命令进行图形化配置,比如配置配网的方式等,这里我使用设备AP配网,所以我使能设备AP配网:


嵌入式Linux单板连接飞燕物联网平台_linux_08

3、编译libiot_sdk.a库

先执行make clean命令进行清理操作,再执行make reconfig选择配置。


嵌入式Linux单板连接飞燕物联网平台_物联网_09

刚才我们添加的板子处于序号3的配置,输入3,然后回车:


嵌入式Linux单板连接飞燕物联网平台_linux_10

然后执行make命令进行编译,编译无误的结果:


嵌入式Linux单板连接飞燕物联网平台_物联网_11

如果没有编译错误,生成的库文件libiot_sdk.a在output/release/lib目录下面。

4、交叉编译demo工程

我们准备一个工程,然后把sdk里的必要文件到我们的工程里,比如我这里新建一个ali_smartliving文件夹存放sdk相关的代码,ali_smartliving里面的内容如:


嵌入式Linux单板连接飞燕物联网平台_c++_12

其中include及src文件夹就是sdk里对应的文件夹,lib里放的是我们上面交叉编译得到的libiot_sdk.a。

把sdk开发包examples/linkkit/living_platform的整个文件夹复制到我们的工程里,然后编写CMakeLists.txt文件:

cmake_minimum_required(VERSION 3.1)

message(STATUS "######################################")
message(STATUS "Build on target platform: ${TARGET_PLATFORM}")
message(STATUS "######################################")

####################################### 编译模式设置 #######################################
set(DEBUG_VERSION "DebugMode")
set(RELEASE_VERSION "ReleaseMode")
set(COMPILE_MODE ${RELEASE_VERSION}) # 编译模式
set(TARGET_NAME "ali_sdk_test") # 目标可执行程序名称
string(TIMESTAMP COMPILE_TIME %m%d_%H%M) # 生成编译时间

# Debug模式(目标:工程名+编译时间)
if(${COMPILE_MODE} MATCHES ${DEBUG_VERSION})
message(STATUS "Compile mode: ${COMPILE_MODE}")
set(USE_RELEASE_MODE 0)
set(CMAKE_BUILD_TYPE "Debug")
set(target ${TARGET_NAME}_${COMPILE_TIME})
# Release模式(目标:工程名+版本号)
else()
message(STATUS "Compile mode: ${COMPILE_MODE}")
set(USE_RELEASE_MODE 1)
set(CMAKE_BUILD_TYPE "Release")
set(VERSION_MAJOR 1) # 一级版本号
set(VERSION_MINOR 0) # 二级版本号
set(VERSION_LEVEL3 0) # 三级版本号
set(target ${TARGET_NAME}_V${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_LEVEL3})
endif()
project(${target})

####################################### 编译选项配置 #######################################
set(TARGET_PLATFORM "x86-64" CACHE STRING "which platform the source code should be compiled on")
message(STATUS "Build on target platform: ${TARGET_PLATFORM}")
if(TARGET_PLATFORM MATCHES "rv1126")
include(cmake/rv1126_crosscompile_toolchain.cmake) #交叉编译环境设置
elseif(TARGET_PALTFORM MATCHES "x86-64")
message(STATUS "PC_DEBUG: ${PC_DEBUG}")
endif()
set(CMAKE_CXX_FLAGS "-std=c++11")
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -Wall") #-g for debug
set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")
set(CMAKE_EXE_LINKER_FLAGS "-Wl,-Map=out.map")
if(TARGET_PLATFORM MATCHES "rv1126")
set(CMAKE_C_FLAGS "-fdata-sections -g -rdynamic -mapcs-frame -funwind-tables -ffunction-sections -Wall -Os")
set(CMAKE_C_FLAGS "$ENV{CMAKE_C_FLAGS} -DDLL_HAL_EXPORTS -DCOMPATIBLE_LK_KV -lrt")
elseif(TARGET_PALTFORM MATCHES "x86-64")
set(CMAKE_C_FLAGS "-fdata-sections -g -rdynamic -mapcs-frame -funwind-tables -ffunction-sections -Wall -Os")
set(CMAKE_C_FLAGS "$ENV{CMAKE_C_FLAGS} -DDLL_HAL_EXPORTS -DCOMPATIBLE_LK_KV -lrt")
endif()
set(CMAKE_CXX_FLAGS "-fdata-sections -Wno-psabi")

####################################### 共享库 ############################################

set(ALI_IOT_LIBDIR ali_smartliving/lib)
link_directories(${ALI_IOT_LIBDIR})
set(ALI_IOT_LIBS libiot_sdk.a)


add_definitions (-DDLL_IOT_EXPORTS)

add_definitions (-DAWSS_DISABLE_ENROLLEE)
add_definitions (-DAWSS_DISABLE_REGISTRAR)
add_definitions (-DAWSS_SUPPORT_ADHA)
add_definitions (-DAWSS_SUPPORT_AHA)
add_definitions (-DAWSS_SUPPORT_APLIST)
add_definitions (-DAWSS_SUPPORT_DEV_AP)
add_definitions (-DAWSS_SUPPORT_PHONEASAP)
add_definitions (-DAWSS_SUPPORT_ROUTER)
add_definitions (-DAWSS_SUPPORT_SMARTCONFIG)
add_definitions (-DAWSS_SUPPORT_SMARTCONFIG_WPS)
add_definitions (-DAWSS_SUPPORT_ZEROCONFIG)
add_definitions (-DCOAP_SERV_MULTITHREAD)
add_definitions (-DCONFIG_HTTP_AUTH_TIMEOUT=5000)
add_definitions (-DCONFIG_MID_HTTP_TIMEOUT=5000)
add_definitions (-DCONFIG_GUIDER_AUTH_TIMEOUT=10000)
add_definitions (-DDEVICE_MODEL_ENABLED)
add_definitions (-DDEV_BIND_ENABLED)
add_definitions (-DFORCE_SSL_VERIFY)
add_definitions (-DMQTT_COMM_ENABLED)
add_definitions (-DMQTT_DIRECT)
add_definitions (-DOTA_ENABLED)
add_definitions (-DOTA_SIGNAL_CHANNEL=1)
add_definitions (-DSUPPORT_TLS)
add_definitions (-DWIFI_PROVISION_ENABLED)
add_definitions (-D_PLATFORM_IS_HOST_)

include_directories(build)
include_directories(ali_smartliving)
include_directories(ali_smartliving/include)
include_directories(ali_smartliving/include/exports)
include_directories(ali_smartliving/include/imports)
include_directories(ali_smartliving/linkkit/living_platform)
include_directories(ali_smartliving/src/ref-impl/hal)
include_directories(ali_smartliving/src/ref-impl/hal/os/ubuntu)
include_directories(ali_smartliving/src/infra/log)
include_directories(ali_smartliving/src/ref-impl/tls/include)
include_directories(ali_smartliving/src/infra/utils/digest)
include_directories(living_platform)

####################################### 源文件 ############################################
aux_source_directory(living_platform living_platform_src)
file(GLOB hal_srcs ${PROJECT_SOURCE_DIR}/ali_smartliving/src/ref-impl/hal/os/ubuntu/*.c)
file(GLOB ssl_mbedtls_srcs ${PROJECT_SOURCE_DIR}/ali_smartliving/src/ref-impl/hal/ssl/mbedtls/*.c)
file(GLOB tls_srcs ${PROJECT_SOURCE_DIR}/ali_smartliving/src/ref-impl/tls/library/*.c)

set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)

message(STATUS "################## Compile time:${COMPILE_TIME} ##################")

add_executable(${PROJECT_NAME}
${living_platform_src}
${hal_srcs}
${ssl_mbedtls_srcs}
${tls_srcs}
main.c
)
target_link_libraries(${PROJECT_NAME}
${ALI_IOT_LIBS}
Threads::Threads
m
)

我们工程的结构如:


嵌入式Linux单板连接飞燕物联网平台_linux_13

我们的demo工程在文末回复具体的关键词可以获取。

注意:

大家自己移植、编译,可能会遇到如下两个问题:

(1)很多系统函数找不到,加上编译参数-lrt即可。

(2)softap_decrypt_password函数找不到。这个函数是在libawss_security.a库里的,而这个库我们并没有交叉编译,demo的文档也有提到:


嵌入式Linux单板连接飞燕物联网平台_linux_14

这里我们暂时用不到,也可以屏蔽掉sdk里调用这个函数的地方,如:


嵌入式Linux单板连接飞燕物联网平台_物联网_15

到了这一步,工程编译基本没什么问题了。下面开始连接云端

5、设备连接云端

先来测试设备连接云端,需要在代码里写入云端的设备证书。

云端设备证书:


嵌入式Linux单板连接飞燕物联网平台_物联网_16

代码里需要修改living_platform_ut.h文件里的如下宏定义:


嵌入式Linux单板连接飞燕物联网平台_linux_17

修改的时候需要去掉PK_ 、PS_ 、 DN_ 、DS_ 这些前缀。

修改如:


嵌入式Linux单板连接飞燕物联网平台_嵌入式_18

运行测试,没报什么错的话,云端设备就会显示在线:


嵌入式Linux单板连接飞燕物联网平台_linux_19

嵌入式Linux单板连接飞燕物联网平台_嵌入式_20

可以在线调试设备:


嵌入式Linux单板连接飞燕物联网平台_c++_21

嵌入式Linux单板连接飞燕物联网平台_c++_22

demo获取

本篇笔记的demo可在本公众号后台回复关键词:​飞燕平台初体验

以上就是使用嵌入式Linux单板系统连接飞燕平台的例子分享,下一篇我们分享基于飞燕平台的配网。


标签:单板,set,飞燕物,ali,smartliving,add,Linux,definitions,include
From: https://blog.51cto.com/u_15244533/5856128

相关文章

  • Linux中ifconfig命令的使用
    1、安装ifconfig找不到,发现ifconfig命令在net-tools里面yumsearchifconfigyuminstallnet-tools 安装net-tools  通过whatis命令显示简单描述[root@rocky9......
  • Linux下Socket编程(转)
    什么是SocketSocket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。要学Internet上的TCP/IP网络编程,必须理解So......
  • Linux 下Socket编程基础(转)
    1、 引言Linux的兴起可以说是Internet创造的一个奇迹。Linux作为一个完全开放其原代码的免费的自由软件,兼容了各种UNIX标准(如POSIX、UNIX System V 和 BSD UNIX ......
  • Linux工作记录
    系统信息whoami:查看当前使用的终端who或w:查看所有终端uname-m:显示机器的处理器架构(如x86_64)cat/proc/version:查看linux版本信息uname-r:显示正在使用的......
  • 虚拟机VMWare+Linux系统CentOS7安装【Linux】
    Linux​​Linux​​​​联网​​​​pinyin输入法​​​​快照的使用​​​​gcc​​​​测试gcc​​​​测试g++​​​​高版本的gcc​​Linux安装VMWare​​【Linux入门......
  • 实验 Linux Shell实现模拟多进程并发执行【操作系统】
    实验楼【操作系统】​​参考文章​​​​简单样例​​​​添加一个系统调用【实验】​​​​LinuxShell实现模拟多进程并发执行【实验】​​​​test1串行​​​​test2......
  • linux常用命令精讲
    一、虚拟机三种网卡模式1 桥接 相当于虚拟机和真机之间架了一座桥2 NAT虚拟系统借助NAT(网络地址转换)功能,通过宿主机器所在的网络来访问公网(常用vm8)3 仅主机虚拟......
  • 【Qt】linux环境下发布Qt程序
    https://blog.csdn.net/wangruifengrr/article/details/123358907主要步骤是:qt中采用release模式编译软件。在"xxxx-xxx-xxx-Realse"文件夹下新建deployqtapp.sh文件,......
  • Almalinux安装部署kubesphere容器云平台
    一、介绍AlmaLinux是一个开源的、社区驱动的项目,旨在填补CentOS稳定版本消亡所留下的空白。AlmaLinux是RHEL8的一个1:1二进制兼容的分支,它是由有丰富经验的CloudLinuxOS......
  • linux 中实现将 每一行指定的最后一个出现的特定字符替换为指定字符
     001、[root@pc1test2]#lsa.txt[root@pc1test2]#cata.txt##测试数据abcdkkjjeerrttttssnnbbrr[root@pc1test2]#reva......