Contiki Makefile結構

摘要shell

本文簡要介紹了contiki的makefile結構和添加新平臺的方法。app

正文spa

1.CPU.net

a. 創建須要支持的cpu目錄contiki/cpu/cputype/code

b.在../cputype/下放置如下文件:orm

CPU相關的底層代碼和驅動ip

contiki移植與CPU相關的代碼,例如clock.c rtimer-arch.cget

連接文件編譯器

makefileit

c. makefile文件解釋:

文件名: Makefile.cputype

CONTIKI_CPU=$(CONTIKI)/cpu/cputype
CONTIKI_CPU_DIRS = . dev hal			#定義與CPU有關的的文件夾
CONTIKI_TARGET_SOURCEFILES +=
CONTIKI_SOURCEFILES        += $(CONTIKI_TARGET_SOURCEFILES)	#定於與CPU有關的文件
#定義編譯器
CC	 = arm-none-eabi-gcc
LD       = arm-none-eabi-gcc
AS	 = arm-none-eabi-gcc
NM	 = arm-none-eabi-nm
AR       = arm-none-eabi-ar
OBJCOPY  = arm-none-eabi-objcopy
STRIP    = arm-none-eabi-strip
SIZE     = arm-none-eabi-size
ifndef DEBUG
OPTI = -Os -ffunction-sections 
#endif
#定義編譯選項
CFLAGSNO = -mthumb -mcpu=cortex-m0 -D __SOURCEFILE__=\"$*.c\"
CFLAGS  += $(CFLAGSNO) $(OPTI)
ASFLAGS = -mthumb -mcpu=cortex-m0 -c -g -Wall -Os -ffunction-sections \
	    -mlittle-endian -fshort-enums -x assembler-with-cpp -Wa,-EL
#定義連接選項
LDFLAGS += -mcpu=cortex-m0 \
	    -mthumb  \
	    -Wl,-T -Xlinker $(CONTIKI_CPU)/gnu.ld \
	    -Wl,-static \
			-u Default_Handler \
	    -nostartfiles \
	    -Wl,-Map -Xlinker contiki-$(TARGET).map
#定義依賴關係
%.$(TARGET): %.co $(PROJECT_OBJECTFILES) $(PROJECT_LIBRARIES) contiki-$(TARGET).a $(OBJECTDIR)/symbols.o
	$(LD) $(LDFLAGS) $(TARGET_STARTFILES) ${filter-out %.a,$^} -Wl,-\( ${filter %.a,$^} $(TARGET_LIBFILES) -Wl,-\) -o $@
	@echo >> contiki-$(TARGET).map
	@$(SIZE) $(SIZEFLAGS) $@ >> contiki-$(TARGET).map
$(OBJECTDIR)/%.o: %.s
	$(AS) $(ASFLAGS) -o $@ $<		
%.bin: %.$(TARGET)
	$(OBJCOPY) $(OBJOPTS) $< $@

2.平臺

a.創建須要支持的平臺目錄contiki/platform/plattarget/

b.在../plattarget/下放置如下文件:

平臺相關驅動及應用

平臺相關配置文件contiki-conf.h等

平臺啓動程序contiki-main.c 完成平臺基本工做環境的初始化,具體的用戶應用程序在用戶應用文件夾中用戶本身創建文件並以autostart process開始應用程序

makefile

c. makefile文件解釋:

文件名:Makefile.plattarget

CONTIKI_TARGET_DIRS = . dev						#定義platform要編譯的與平臺相關的文件夾
ifndef CONTIKI_TARGET_MAIN
CONTIKI_TARGET_MAIN = contiki-main.c				#contiki-main.c也能夠在其它地方定義
endif
CONTIKI_TARGET_SOURCEFILES += irq.c $(CONTIKI_TARGET_MAIN) #定於platform下須要編譯的文件
include $(CONTIKI)/cpu/cputype/Makefile.cputype		引用cpu的makefile

3.用戶應用

a.創建用戶應用須要的目錄contiki/examples/userapp/

b.在../userapp/下放置如下文件:

用戶應用程序文件

makefile

c. makefile文件解釋

指定平臺的Makefile.target,指定使用的平臺
		TARGET = plattarget
	指定編譯目標的Makefile
		CONTIKI_PROJECT = mb851-shell					#contiki應用名稱
PROJECTDIRS = $(CONTIKI)/platform/mb851/apps	#指定其它應用所在目錄
APPS = serial-shell								#指定使用contiki提供的應用名
PROJECT_SOURCEFILES = shell-sensors.c			#指定其它應用的文件名
all: $(CONTIKI_PROJECT)
CONTIKI = ../../..								#指定contiki的根目錄
include $(CONTIKI)/Makefile.include				引用根目錄下makefile規則

4. Makefile.include

該文件統領contiki的編譯規則

a. 如下片斷獲得TARGET能夠找到對應的platform

ifeq ($(TARGET),)
  -include Makefile.target
  ifeq ($(TARGET),)
    ${info TARGET not defined, using target 'native'}
    TARGET=native
  else
    ${info using saved target '$(TARGET)'}
  endif
endif

b.如下獲取所在platform的相關信息

獲取應用文件夾目錄
APPDIRS += ${wildcard ${addprefix $(CONTIKI)/apps/, $(APPS)} \
	     ${addprefix $(CONTIKI)/platform/$(TARGET)/apps/, $(APPS)} \
	     $(APPS)}
獲取platform makefile文件
target_makefile := $(wildcard $(CONTIKI)/platform/$(TARGET)/Makefile.$(TARGET) ${foreach TDIR, $(TARGETDIRS), $(TDIR)/$(TARGET)/Makefile.$(TARGET)})
獲取編譯和連接依靠規則
%.$(TARGET): %.co $(PROJECT_OBJECTFILES) $(PROJECT_LIBRARIES) contiki-$(TARGET).a
	$(LD) $(LDFLAGS) $(TARGET_STARTFILES) ${filter-out %.a,$^} ${filter %.a,$^} $(TARGET_LIBFILES) -o $@

總結

1. 在contiki內添加一個新的平臺及應用可分爲如下步驟(以nuc140爲CPU和m0rime爲platform爲例):

step1: 在contiki/cpu/下創建nuc140目錄,並在目錄下創建Makefile.nuc140和CPU相關的代碼

step2: 在contiki/platform/下創建m0rime目錄,並在目錄下創建Makefile.m0rime和platform相關的代碼

step3: 在contiki/examples/下創建應用目錄m0rime-app,並在目錄下創建Makefile和Makefile.target,和應用相關的代碼

2.Makefile的包含和依賴關係

m0rime-app:

Makefile.target 指定TARGET

Makefile 引用Makefile.include

contiki目錄下有Makefile.include

Makefile 引用Makefile.target的TARGET, 找到Makefile.m0rime 並應用Makefile. m0rime

m0rime:

m0rime直接指定引用 Makefile.nuc140

nuc140:

Makefile.nuc140 內指定編譯器,編譯連接選項,依靠生成規則

wps_clip_image-31393

相關文章
相關標籤/搜索