安装对应的C-SDK
根据官方文档 安装对应的C-SDK
1.安装交叉编译工具链 以Ubuntu16.04开发环境为例
$ sudo apt-get install -y gcc-arm-linux-gnueabihf
$ arm-linux-gnueabihf-gcc --version
# 显示如下
arm-linux-gnueabihf-gcc (Ubuntu/Linaro 4.8.4-2ubuntu1~14.04.1) 4.8.4
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE
2.添加配置文件
$ touch src/board/config.arm-linux.demo
$ ls tools/board/
# 显示如下
config.alios.mk3080 config.arm-linux.demo config.ubuntu.x86
3.编辑配置文件
$ vim src/board/config.arm-linux.demo
# 输入以下内容
CONFIG_ENV_CFLAGS = \
-D_PLATFORM_IS_LINUX_ \
-Wall \
-DNO_EXECUTABLES
CONFIG_ENV_LDFLAGS = \
-lpthread -lrt
OVERRIDE_CC = arm-linux-gnueabihf-gcc
OVERRIDE_AR = arm-linux-gnueabihf-ar
OVERRIDE_LD = arm-linux-gnueabihf-ld
CONFIG_wrappers :=
4.选择配置文件
$ make reconfig
SELECT A CONFIGURATION:
1) config.alios.mk3080
2) config.arm-linux.demo
3) config.ubuntu.x86
#? 2
SELECTED CONFIGURATION:
VENDOR : arm-linux
MODEL : demo
5.交叉编译产生库文件libiot_sdk.a
$ make
BUILDING WITH EXISTING CONFIGURATION:
VENDOR : arm-linux
MODEL : demo
[CC] infra_timer.o <= ...
[CC] infra_json_parser.o <= ...
[CC] infra_preauth.o <= ...
6.复制一份HAL层实现代码
$ cd src/ref-impl/hal/os/
$ ls
freertos nos nucleus ubuntu
$ cp -rf ubuntu arm-linux
$ rm -f arm-linux/HAL_UART_linux.c
$ ls
arm-linux freertos nos nucleus ubuntu
$ tree -A arm-linux/
arm-linux/
+-- HAL_AWSS_linux.c
+-- HAL_Crypt_Linux.c
+-- HAL_FS_Linux.c
+-- HAL_KV_linux.c
+-- HAL_OS_linux.c
+-- HAL_TCP_linux.c
+-- HAL_UDP_linux.c
7.打开之前被关闭的编译开关
$ vim tools/board/config.arm-linux.demo
CONFIG_ENV_CFLAGS = \
-D_PLATFORM_IS_LINUX_ \
-Wall\
-DNO_EXECUTABLES
CONFIG_ENV_LDFLAGS = \
-lpthread -lrt
OVERRIDE_CC = arm-linux-gnueabihf-gcc
OVERRIDE_AR = arm-linux-gnueabihf-ar
OVERRIDE_LD = arm-linux-gnueabihf-ld
# CONFIG_wrappers :=
8.尝试交叉编译被复制的HAL层代码
$ make reconfig
SELECT A CONFIGURATION:
1) config.alios.mk3080
2) config.arm-linux.demo
3) config.ubuntu.x86
#? 2
SELECTED CONFIGURATION:
VENDOR : arm-linux
MODEL : demo
...
9.make
$ make
BUILDING WITH EXISTING CONFIGURATION:
VENDOR : arm-linux
MODEL : demo
[CC] infra_timer.o <= ...
[CC] infra_json_parser.o <= ...
[CC] infra_preauth.o <= ...
10.交叉编译例程
$ vi tools/board/config.arm-linux.demo
CONFIG_ENV_CFLAGS = \
-D_PLATFORM_IS_LINUX_ \
-Wall
CONFIG_ENV_LDFLAGS = \
-lpthread -lrt
OVERRIDE_CC = arm-linux-gnueabihf-gcc
OVERRIDE_AR = arm-linux-gnueabihf-ar
OVERRIDE_LD = arm-linux-gnueabihf-ld
# CONFIG_wrappers :=
11.重新载入配置文件, 交叉编译可执行程序
$ make reconfig
$ make all
如果有数据编译输出, 则代表 mqtt-example 等一系列样例程序已经被成功的编译出来, 它们存放在 output/release/bin 目录下
发送数据
发送数据需要提前在阿里云设备端建立DATA TOPIC
mqtt.c中建立相对应的发送TOPIC抬头
修改MQTT发送数据内容位置为
订阅数据(其中行数是不定的,存在代码改动,以原资源包为标准)
1.进入mqtt_example.c,其中mqtt_client函数中195行,会对阿里云端订阅的TOPIC进行一次信息获取
2.如果订阅的TOPIC有新的消息更新,则会返回到91行,返回字符串型数据,长度存储在topic_info->payload_len(局部变量),数据源存储在topic_info->payload(局部变量),可设定全局变量对其进行提取
3.如果存在对订阅数据的提取失败,造成历史数据累计,则下一次成功提取后会跳转到109行的_demo_message_arrive函数
相应数据与数据长度会存储在ptopic_info->payload与ptopic_info->payload_len中,同为局部变量,可设定全局变量对其调用
如何添加外部C文件进行一起编译:
1.进入/iotkit/example
2.用VIM编辑器(或者其他编译器)打开iot.mk
3.22-34行即为各个C文件编译顺序
4.找到23行 添加所需要编译的C文件(如图所示)
5.在mqtt_example.c中添加相应头文件(TEST.h)
取消PUBLISH的多余数据包(3个):
进入/src/infra/system/report.c
注释如下内容: