arm-linux通过c语言实现数据传输至阿里云

安装对应的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


阿里云设备端建立DATA TOPIC

mqtt.c中建立相对应的发送TOPIC抬头


对应的发送TOPIC抬头

修改MQTT发送数据内容位置为
image.png

订阅数据(其中行数是不定的,存在代码改动,以原资源包为标准)

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文件(如图所示)


iot.mk

5.在mqtt_example.c中添加相应头文件(TEST.h)

取消PUBLISH的多余数据包(3个):

进入/src/infra/system/report.c
注释如下内容:


225-227行

294-299行

373-378行
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 网络编程 1. 概论 建立连接:通过IP或者域名来连接两台设备,通过端口号找到对应的通信程序 通信协议:要传输的数...
    陵无山阅读 12,465评论 0 12
  • sqlmap用户手册 说明:本文为转载,对原文中一些明显的拼写错误进行修正,并标注对自己有用的信息。 ======...
    wind_飘阅读 6,411评论 0 5
  • http://192.168.136.131/sqlmap/mysql/get_int.php?id=1 当给sq...
    xuningbo阅读 13,545评论 2 22
  • 我们在需要编译出运行在ARM平台上的代码,所使用的交叉编译器为arm-linux-gcc。 基本概念 首先介绍下编...
    放风筝的小小马阅读 5,587评论 0 5
  • 大视角,简一律是哲学思维推崇的重要思维模式,第一性原理就是重要的落地路径。昨天在思考能力几个维度的时候,就理解到如...
    逄格亮阅读 2,900评论 0 4

友情链接更多精彩内容