link sdk基于Make的编译说明

基于Make的编译说明

我的收藏

本页目录

在"快速体验"中使用到了make进行sdk的编译, 本章对make系统进行更详细的描述, 以及讲解如何对SDK进行裁剪

命令解释
make distclean清除一切构建过程产生的中间文件, 使当前目录仿佛和刚刚clone下来一样
make使用默认的或已选中的平台配置文件平台配置文件开始编译
make env显示当前编译配置, 非常有用, 比如可显示交叉编译链, 编译CFLAGS等
make reconfig弹出多平台选择菜单, 用户可按数字键选择, 然后根据相应的硬件平台配置开始编译
make config显示当前被选择的平台配置文件
make menuconfig以图形化的方式编辑和生成功能配置文件make.settings
make help打印帮助文本

SDK裁剪

对V3.0.1以上版本, 可以用 make menuconfig 命令或者 config.bat 脚本, 分别在Linux/Windows主机上图形化的配置SDK

下面是运行图形化配置工具之后的图示:

在上面的界面中

  • 按下空格键可以选中或者失效某个功能, 使用小键盘的上下键来在不同功能之间选择
  • 如果想知道每个选项的具体含义, 先用方向键将高亮光条移到那个选项上, 再按键盘上的 "h"按键, 将出现帮助文本, 对选项进行详细说明。

注意: 不建议手动编辑 make.settings 文件改动配置, 一切配置都需通过上面的图形界面进行

配置选项说明:

FEATURE_MQTT_COMM_ENABLED

  • MQTT上云功能开关, 所谓MQTT上云是指搭载了C-SDK的嵌入式设备和阿里云服务器之间使用 MQTT 协议进行连接和交互。本选项使能之后,SDK将提供MQTT相关的API。

FEATURE_COAP_COMM_ENABLED

  • CoAP上云功能开关, 所谓CoAP上云是指搭载了C-SDK的嵌入式设备和阿里云服务器之间使用 CoAP 协议进行连接和交互

FEATURE_HTTP_COMM_ENABLED

  • HTTP/S上云功能开关, 所谓HTTP/S上云是指搭载了C-SDK的嵌入式设备和阿里云服务器之间使用 HTTP 协议或 HTTPS协议进行连接和交互

FEATURE_DYNAMIC_REGISTER

  • 一型一密/动态注册功能开关, 所谓动态注册是指不需要为同个品类下的不同设备烧录不同的三元组, 只需烧录相同的productSecret, 每个设备在网络通信中动态注册自己

FEATURE_DEPRECATED_LINKKIT

  • 高级版接口风格的开关, 配置进行高级版物模型相关的编程时, C-SDK是提供 linkkit_xxx_yyy() 风格的旧版接口, 还是提供 IOT_Linkkit_XXX() 风格的新版接口

FEATURE_DEV_BIND_ENABLED

V2.3.0之后的版本才新增的这个开关

  • 绑定功能的开关, 只有用C-SDK连接飞燕平台的客户才需要关注并打开它, 用于使能设备被飞燕的公版app控制, 可绑定设备和用户账号

FEATURE_DEVICE_MODEL_GATEWAY

在V2.3.0以前的版本中, 这个开关的曾用名是 FEATURE_ENHANCED_GATEWAY

  • 高级版网关能力的开关, 配置进行高级版物模型相关的编程时, C-SDK是提供 linkkit_xxx_yyy() 风格的单品接口, 还是提供 linkkit_gateway_xxx_yyy() 风格的网关接口

FEATURE_HTTP2_COMM_ENABLED

  • HTTP2上云功能开关, 所谓HTTP2上云是指搭载了C-SDK的嵌入式设备和阿里云服务器之间使用 HTTP2 协议进行连接和交互

FEATURE_MQTT_DIRECT

  • MQTT直连功能开关, 所谓MQTT直连是指设备和阿里云服务器之间使用 MQTT 协议进行连接, 而不会前置基于 HTTP 协议认证的交互过程

FEATURE_OTA_ENABLED

  • 固件升级功能开关, 所谓固件升级是指设备从阿里云服务器上下载用户在IoT控制台中上传的固件文件功能

FEATURE_DEVICE_MODEL_ENABLED

在V2.3.0以前的版本中, 这个开关的曾用名是 FEATURE_SDK_ENHANCE

  • 高级版物模型能力的功能开关, 所谓高级版物模型能力是指设备可使用基于服务/属性/事件三要素的Alink协议和服务端通信

FEATURE_SUPPORT_TLS

  • 在TLS层是否使用TLS的功能开关, 关闭则代表用不带TLS加密的TCP连接连云

FEATURE_WIFI_PROVISION_ENABLED

在V2.3.0以前的版本中, 这个开关的曾用名是 FEATURE_WIFI_AWSS_ENABLED

  • WiFi配网的功能开关, 所谓WiFi配网是阿里巴巴自研的一种从手机app发送WiFi网络的SSID和密码给设备端的通信协议

FEATURE_ALCS_ENABLED

  • 本地控制使能开关,仅当设备接入阿里云生活物联网平台时使用,并且要求设备通过WiFi或者以太网连接网络。该开关打开之后,手机APP可以通过局域网对设备进行控制

FEATURE_DEVICE_MODEL_SHADOW

  • 设备模型影子开关,使能之后当设备离线时云端可以对设备的属性进行设置,等设备上线之后设备获取云端保存的数值并进行执行

FEATURE_SUB_PERSISTENCE_ENABLED

  • 订阅topic保存开关,当设备再次上线时若设备发现该topic已订阅则不再发送订阅消息给物联网平台,从而节约设备与平台之间的交互消息

输出说明

使用make进行成功编译, 将会打印类似如下的表格, 给出每个模块的ROM占用, 以及静态RAM占用的统计

| RATE  | MODULE NAME          | ROM     | RAM     | BSS    | DATA   |
|-------|----------------------|---------|---------|--------|--------|
| 45.3% | src/dev_model        | 28563   | 216     | 188    | 28     |
| 28.1% | src/mqtt             | 17737   | 28      | 28     | 0      |
| 25.7% | src/infra            | 16195   | 544     | 60     | 484    |
| 1.65% | src/dev_sign         | 1045    | 48      | 0      | 48     |
|-------|----------------------|---------|---------|--------|--------|
|  100% | - IN TOTAL -         | 63540   | 836     | 276    | 560    |
			

用户需要关注的输出产物都在output/release目录下。

output/release/lib

产物文件名说明
libiot_hal.aHAL接口层的参考实现, 提供了 HAL_XXX() 接口
libiot_sdk.aSDK的主库, 提供了 IOT_XXX 接口和 linkkit_xxx()接口
libiot_tls.a裁剪过的 mbedtls, 提供了 mbedtls_xxx() 接口, 支撑 libiot_hal.a

output/release/include

产物文件名说明
mqtt_api.h当用户在配置环节选中"MQTT上云"时出现, 列出MQTT上云功能点提供的用户API
dev_model_api.h当用户在配置环节选中"物模型管理"时出现, 列出物模型管理功能点提供的用户API

选中了什么功能, 该功能的API就会以 <功能名字>_api.h 的形式出现, 依次类推

output/release/bin

如果是在主机环境下不做交叉编译(Ubuntu/Windows), 是可以产生主机版本的demo程序, 可以直接运行的, 比如

产物文件名说明
linkkit-example-solo物模型管理功能的例程, 可演示 linkkit_xxx() 接口的使用
mqtt-exampleMQTT上云功能的例程, 可演示 IOT_XXX() 接口的使用

配置系统组成部分

用户输入

设备端C-SDK的构建配置系统, 有以下输入文件可接受用户的配置, 您可以通过编辑它们, 将配置输入到构建系统中

  • 功能配置文件: 即顶层目录的 make.settings 文本文件
  • 平台配置文件: 即目录 tools/board 下的 config.xxx.yyy 系列文件, 也称config文件

构建系统最终是依据 config.xxx.yyy 文件进行编译, 然而由于功能配置/裁剪更为常用, 我们将它额外抽取到了 make.settings 中

config.xxx.yyy 主要关注目标嵌入式硬件平台的工具链程序和编译/链接选项的指定, 用于跨平台移植

config.xxx.yyy 此外也能以 CONFIG_ENV_CFLAGS += ... 的语法新增自定义 CFLAGS, 同理 CONFIG_ENV_LDFLAGS += ... 可以指定链接选项

make.settings 则是在已被确定的目标硬件平台上, 专注于C-SDK的功能模块裁剪或者配置, 用于裁剪功能模块

构建单元

从工程顶层目录以下, 每一个含有iot.mk的子目录, 都被构建系统认为是一个__构建单元__

每一个构建单元, 若相对顶级makefile的路径是barfoo/bar1, 则可以用make barmake foo/bar1这样的命令单独编译

tools/board/config.xxx.yyy

文件名形式为config.<VENDOR>.<MODEL>的文本文件, 会被构建系统认为是硬件平台配置文件, 每个文件对应一个嵌入式软硬件平台

  • 其中部分, 一般是指明嵌入式平台的软件OS提供方, 如mxchipubuntuwin7等. 另外, 这也会导致构建系统到$(IMPORT_DIR)/<VENDOR>目录下寻找预编译库的二进制库文件和头文件
  • 其中部分, 一般是标明嵌入式平台的具体硬件型号, 如mtk7687qcom4004等, 不过也可以写上其它信息, 因为构建系统不会去理解它, 比如mingw32x86-64

调试方式

  • make ...命令行中, 设置TOP_Q变量为空, 可打印工程顶层的执行逻辑, 例如硬件平台的选择, SDK主库的生成等

    make .... TOP_Q=
    					
  • make ...命令行中, 设置Q变量为空, 可打印模块内部的构建过程, 例如目标文件的生成, 头文件搜寻路径的组成等

    make .... Q=
    					
  • 可以用make foo/bar单独对foo/bar进行构建, 不过, 这可能需要先执行make reconfig
  • 可以进入.O/foo/bar路径, 看到完整的编译临时目录, 有makefile和全部源码, 所以在这里执行make, 效果和make foo/bar等同

交叉编译相关

以下是常在 tools/board/config.xxx.yyy 平台配置文件中使用的变量

变量说明
CONFIG_ENV_CFLAGS指定全局的CFLAGS编译选项, 传给compiler, 例如CONFIG_ENV_CFLAGS += -DDEBUG
CONFIG_ENV_LDFLAGS指定全局的LDFLAGS链接选项, 传给linker, 例如CONFIG_ENV_LDFLAGS += -lcrypto
CROSS_PREFIX指定交叉编译工具链共有的前缀, 例如CROSS_PREFIX := arm-none-eabi-, 会导致构建系统使用arm-none-eabi-gccarm-none-eabi-ar, 以及arm-none-eabi-strip
OVERRIDE_CC当交叉工具链没有共有的前缀或者前缀不符合prefix+gcc/ar/strip类型时, 例如armcc, 可用OVERRIDE_CC = armcc单独指定C编译器
OVERRIDE_AR当交叉工具链没有共有的前缀或者前缀不符合prefix+gcc/ar/strip类型时, 例如armar, 可用OVERRIDE_AR = armar单独指定库压缩器
OVERRIDE_STRIP当交叉工具链没有共有的前缀或者前缀不符合prefix+gcc/ar/strip类型时, 例如armcc没有对应的strip程序, 可用OVERRIDE_STRIP = true单独指定strip程序不执行
CONFIG_LIB_EXPORT指定SDK产生的二进制库的形式, 例如``CONFIG_LIB_EXPORT := dynamic可以指定产生linux上的libiot_sdk.so动态库文件, 默认为产生跨平台的libiot_sdk.a`静态库

目录文件相关

变量说明
CONFIG_mmm/nnn指定mmm/nnn目录是否需要编译的开关, 例如CONFIG_mmm/nnn :=的写法会导致该目录被跳过编译
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值