本文介绍Make系统的详细描述,以及讲解如何对SDK进行裁剪。
Make命令
命令 | 解释 |
| 清除一切构建过程产生的中间文件,使当前目录如Clone一样。 |
| 使用默认的或已选中的平台配置文件开始编译。 |
| 显示当前编译配置,例如可显示交叉编译链,编译CFLAGS等。 |
| 弹出多平台选择菜单,用户可按数字键选择,然后根据相应的硬件平台配置开始编译。 |
| 显示当前被选择的平台配置文件。 |
| 以图形化的方式编辑和生成功能配置文件 |
| 打印帮助文本。 |
SDK裁剪
对于V3.0.1以上版本,可以用make menuconfig
命令或者config.bat
脚本,分别在Linux或Windows主机上图形化的配置SDK。
运行图形化配置工具图示
在图示界面中按下空格键,可以选中或者失效某个功能,使用键盘的上下键可以选择不同功能。
使用方向键将高亮光条移到选项上,再按键盘上的H键,将出现帮助文本,对该选项会进行详细说明。
不建议手动编辑
make.settings
文件改动配置,所有配置都需通过上面的图形界面进行。
配置选项说明如下表格所示。
配置项 | 说明 |
| MQTT上云功能开关,MQTT上云是指搭载了C Link SDK的嵌入式设备和阿里云服务器之间使用 |
| CoAP上云功能开关,CoAP上云是指搭载了C Link SDK的嵌入式设备和阿里云服务器之间使用 |
| HTTP或HTTPS上云功能开关,HTTP或HTTPS上云是指搭载了C Link SDK的嵌入式设备和阿里云服务器之间使用 |
| 一型一密或动态注册功能开关,动态注册是指不需要为同个品类下的不同设备烧录不同的设备证书(ProductKey、DeviceName、DeviceSecret),只需烧录相同的 |
| 高级版接口风格开关,配置进行高级版物模型相关的编程时,C Link SDK不仅提供 |
| V2.3.0之后的版本新增绑定功能开关,只有用C Link SDK连接飞燕平台的用户需要关注并打开它,用于使能设备被飞燕的公版App控制,可绑定设备和用户账号。 |
| 在V2.3.0以前的版本中,该开关的曾用名是 高级版网关能力的开关,配置进行高级版物模型相关的编程时,C Link SDK不仅提供 |
| HTTP2上云功能开关,HTTP2上云是指搭载了C Link SDK的嵌入式设备和阿里云服务器之间使用 |
| MQTT直连功能开关,MQTT直连是指设备和阿里云服务器之间使用 |
| 固件升级功能开关,固件升级是指设备从阿里云服务器上下载用户在IoT控制台中上传的固件文件功能。 |
| 在V2.3.0以前的版本中,该开关的曾用名是 高级版物模型能力的功能开关,高级版物模型能力是指设备可使用基于服务、属性、事件、的Alink协议和服务端通信。 |
| 在TLS层是否使用TLS的功能开关,关闭则代表用不带TLS加密的TCP连接连云。 |
| 在V2.3.0以前的版本中,该开关的曾用名是 WiFi配网的功能开关,WiFi配网是阿里云自研的一种从手机App发送WiFi网络的SSID和密码给设备端的通信协议。 |
| 本地控制使能开关,仅当设备接入阿里云生活物联网平台时使用,并且要求设备通过WiFi或者以太网连接网络。该开关打开之后,手机App可以通过局域网对设备进行控制。 |
| 物模型影子开关,使能之后当设备离线时云端可以对设备的属性进行设置,等设备上线之后设备获取云端保存的数值并进行执行。 |
| 订阅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
产物文件名 | 说明 |
| HAL接口层的参考实现,提供了 |
| SDK的主库,提供了 |
| 裁剪过的 |
output/release/include
产物文件名 | 说明 |
| 当用户在配置环节选中MQTT上云时出现,列出MQTT上云功能点提供的用户API。 |
| 当用户在配置环节选中物模型管理时出现,列出物模型管理功能点提供的用户API。 |
选中功能的API以<功能名字>_api.h
的形式出现,依次类推。
output/release/bin
如果是在主机环境下不做交叉编译(Ubuntu或Windows),可以产生主机版本直接运行的Demo程序。
产物文件名 | 说明 |
| 物模型管理功能的例程,可演示 |
| MQTT上云功能的例程,可演示 |
配置系统组成部分
用户输入
设备端C Link 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 Link SDK的功能模块裁剪或者配置,用于裁剪功能模块。
构建单元
从工程顶层目录以下,每一个含有iot.mk
的子目录,都被构建系统认为是一个构建单元。
每一个构建单元,若相对顶层makefile
的路径是bar
,foo/bar1
,则可以用make bar
,make foo/bar1
命令单独编译。
tools/board/config.xxx.yyy
文件名形式为config.<VENDOR>.<MODEL>
的文本文件,会被构建系统认为是硬件平台配置文件,每个文件对应一个嵌入式软硬件平台。
其中
<VENDOR>
,一般是指明嵌入式平台的软件OS提供方,如mxchip
,ubuntu
,win7
等。会导致构建系统到$(IMPORT_DIR)/<VENDOR>
目录下寻找预编译库的二进制库文件和头文件。其中
<MODEL>
,一般是标明嵌入式平台的具体硬件型号,如mtk7687
,qcom4004
等,也可以写其它信息,因为构建系统不会去理解它,比如mingw32
,x86-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
平台配置文件中使用的变量。
变量 | 说明 |
| 指定全局的 例如 |
| 指定全局的 例如 |
| 指定交叉编译工具链共有的前缀。 例如 |
| 当交叉工具链没有共有的前缀或者前缀不符合 例如 |
| 当交叉工具链没有共有的前缀或者前缀不符合 例如 |
| 当交叉工具链没有共有的前缀或者前缀不符合 例如 |
| 指定SDK产生的二进制库的形式。 例如 |
目录文件相关
变量 | 说明 |
| 指定 |