本文介紹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產生的二進制庫的形式。 例如 |
目錄文件相關
變量 | 說明 |
| 指定 |