Contiki‐NG的構(gòu)建系統(tǒng)

Contiki-NG構(gòu)建系統(tǒng)旨在為方便地各種硬件平臺(tái)構(gòu)建完整的系統(tǒng)映像,編譯生成二進(jìn)制文件同時(shí)包含應(yīng)用程序代碼和Contiki-NG操作系統(tǒng)代碼。

一個(gè)簡單的示例項(xiàng)目Makefile可以在examples/hello-world/中找到:

CONTIKI_PROJECT = hello-world
all: $(CONTIKI_PROJECT)
CONTIKI = ../..
include $(CONTIKI)/Makefile.include

定義項(xiàng)目名稱和Contiki-NG路徑后,將簡單地包含公共makefile。 通過從該目錄運(yùn)行make hello-world系統(tǒng)將針對(duì)默認(rèn)目標(biāo):本機(jī)(原生)構(gòu)建。 本機(jī)目標(biāo)是一個(gè)特殊的平臺(tái),該平臺(tái)將Contiki-NG構(gòu)建為能夠在開發(fā)系統(tǒng)(例如Linux)上運(yùn)行的程序。 編譯后只需運(yùn)行文件hello-world.native即可。

要為其他平臺(tái)編譯hello-world應(yīng)用程序,請(qǐng)使用標(biāo)志TARGET,例如 與TARGET = zoul。 在某些平臺(tái)上,需要額外的BOARD來進(jìn)一步指定目標(biāo)。

建立系統(tǒng)的輸出結(jié)構(gòu)

生成系統(tǒng)將生成許多文件,這些文件將放置在許多位置。 本指南使用hello-world示例作為用例,但所有其他示例的輸出將相同。

構(gòu)建系統(tǒng)將始終將最終的構(gòu)建輸出文件(固件)放在示例.目標(biāo)平臺(tái)。 這是用于編程設(shè)備(嵌入式目標(biāo))或執(zhí)行(本機(jī)平臺(tái))的固件。 對(duì)于hello-world示例,這將稱為hello-world.$(TARGET)(例如hello-world.nativehello-world.zoul。

生成系統(tǒng)還將生成一個(gè)build/目錄,并在其中生成各個(gè)子目錄,并在其中放置中間文件。 邏輯如下:

  • 一定會(huì)創(chuàng)建一個(gè)名為build/$(TARGET)的目錄(例如build/nativebuild/zoul)。
  • 如果平臺(tái)支持make變量BOARD,那么還將在build/$(TARGET)下創(chuàng)建特定于板子的目錄。例如build/zoul/remote-revabuild/ srf06-cc26xx/launchpad/cc2650。
  • 構(gòu)建示例時(shí),您可能希望在不同的配置之間切換。例如,您可能希望有一個(gè)用于調(diào)試和測試的構(gòu)建,以及一個(gè)單獨(dú)的用于部署的構(gòu)建。 Contiki-NG通過make變量BUILD_DIR_CONFIG對(duì)此提供支持,您可以為您的不同構(gòu)建分配不同的值。如果確實(shí)選擇使用BUILD_DIR_CONFIG,則構(gòu)建系統(tǒng)將在build/(TARGET)/[(BOARD)]/下創(chuàng)建另一個(gè)名為$(BUILD_DIR_CONFIG)/的子目錄。例如,如果運(yùn)行make BUILD_DIR_CONFIG = deploy,則為build/zoul/remote-reva/deploy`。
  • 最后,將在build/$(TARGET)/[$(BOARD)]/[$(BUILD_DIR_CONFIG)]下創(chuàng)建另一個(gè)名為obj的子目錄。例如build/srf06-cc26xx/launchpad/cc2650/debug/obj。

考慮到上述子目錄結(jié)構(gòu),構(gòu)建系統(tǒng)將輸出以下文件:

  • 所有編譯輸出文件(.o)和依賴文件(.d)將放置在obj/dir下。
  • 所有鏈接和后期處理文件(例如hello-world.elf、hello-world.hexhello-world.bin)都將放置在build/$(TARGET)/[$(BOARD)]/[$(BUILD_DIR_CONFIG)]。 在同一目錄中,您通常還會(huì)歸檔一個(gè).map文件。 最后,該目錄還將始終托管hello-world.$(TARGET)文件的副本。

清除目標(biāo)(clean)

要清除以前構(gòu)建的目標(biāo),請(qǐng)使用:

  • clean:刪除TARGET的所有構(gòu)建輸出文件,包括整個(gè)build/$(TARGET)目錄。 當(dāng)前沒有辦法只清除為--特定BOARD--構(gòu)建的文件。
  • distclean:清除所有Contiki-NG目標(biāo)的--所有構(gòu)建輸出文件--,并刪除整個(gè)build/目錄。 它基本上為所有支持Contiki-NG的平臺(tái)調(diào)用make TARGET = xyz clean,一旦完成,它將強(qiáng)制刪除build/目錄。

更多操作

支持以下make目標(biāo):

  • viewconf:顯示重要的Make和C常量的值,用于檢查Contiki-NG配置
  • targets:顯示受支持的TARGET列表
  • board:顯示當(dāng)前TARGET支持的BOARD列表
  • savetarget:將當(dāng)前的TARGET和BOARD保存在Makefile.target下,以用于后續(xù)的make運(yùn)行
  • savedefines:保存當(dāng)前的DEFINES標(biāo)志以供后續(xù)運(yùn)行make
  • %.o:從給定的源文件生成目標(biāo)文件
  • %.e:生成給定源文件的預(yù)處理版本
  • %.s:從給定的源文件生成一個(gè)程序集文件
  • %.ramprof:顯示給定固件的RAM配置文件
  • %.flashprof:顯示給定固件的Flash / ROM配置文件
  • login:查看連接到PORT的設(shè)備的串行輸出
  • serialview:與login相同,但是在串行輸出前加上unix時(shí)間戳
  • serialdump:與serialview相同,但還將輸出保存到文件中
  • motelist-all:打印已連接設(shè)備的列表
  • usagehelp:顯示簡短的幫助

Makefiles的使用

Contiki-NG構(gòu)建系統(tǒng)由許多Makefile組成。 他們是:

  • Makefile:項(xiàng)目的makefile,位于項(xiàng)目目錄中。 這個(gè)Makefile可以定義MODULES變量,即應(yīng)包含的模塊列表。 它還可以配置Contiki-NG網(wǎng)絡(luò)堆棧(請(qǐng)參閱doc:configuration)以及任何其他標(biāo)準(zhǔn)的Makefile規(guī)則和標(biāo)志。
  • 頂級(jí)Makefile,位于Contiki-NG的源代碼樹的根目錄中:
    • Makefile.include:系統(tǒng)范圍內(nèi)的makefile。 運(yùn)行make時(shí),Makefile.include包括Makefile.$(TARGET)以及MODULES列表中模塊的所有makefile(由項(xiàng)目的Makefile指定)。
    • Makefile.help:包含幫助和使用目標(biāo)的定義。
    • Makefile.tools:一些內(nèi)部版本依賴于工具目錄下的實(shí)用程序。 這個(gè)Makefile確保在需要時(shí)可以構(gòu)建那些依賴關(guān)系。
    • Makefile.embedded:包含適用于Contiki-NG所有嵌入式平臺(tái)的其他Makefile邏輯,也就是除nativecooja之外的所有平臺(tái)。
    • Makefile.identify-target:此Makefile可用于識(shí)別用于特定構(gòu)建的所選TARGET。 它可以包含在示例Makefile中,這些文件需要根據(jù)TARGET make變量的值進(jìn)行決策。
  • Makefile.$(TARGET)(其中$(TARGET)是平臺(tái)的名稱):特定平臺(tái)的規(guī)則,位于arch/platform的子目錄中。它包含平臺(tái)添加到Contiki-NG系統(tǒng)的C文件列表(CONTIKI_TARGET_SOURCEFILES)Makefile.$(TARGET)還包括來自arch/cpu/$(CPU)/目錄的Makefile.$(CPU)。
  • Makefile.$(CPU)(其中$(CPU)CPU/MCU的名稱):CPU體系結(jié)構(gòu)的規(guī)則,位于arch/cpu/中CPU體系結(jié)構(gòu)的子目錄中。
  • Makefile.$(MODULE)(其中$(MODULE)是os目錄中模塊的名稱):可選的,特定于模塊的Makefile規(guī)則。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容