Contiki Makefile结构

来源:互联网 发布:人工智能 电影在线 编辑:程序博客网 时间:2024/05/16 06:41

摘要

本文简要介绍了contiki的makefile结构和添加新平台的方法。

正文

1.CPU

a. 建立需要支持的cpu目录contiki/cpu/cputype/

b.在../cputype/下放置以下文件:

CPU相关的底层代码和驱动

contiki移植与CPU相关的代码,例如clock.c rtimer-arch.c

链接文件

makefile

c. makefile文件解释:

文件名: Makefile.cputype

CONTIKI_CPU=$(CONTIKI)/cpu/cputypeCONTIKI_CPU_DIRS = . dev hal#定义与CPU有关的的文件夹CONTIKI_TARGET_SOURCEFILES +=CONTIKI_SOURCEFILES        += $(CONTIKI_TARGET_SOURCEFILES)#定于与CPU有关的文件#定义编译器CC = arm-none-eabi-gccLD       = arm-none-eabi-gccAS = arm-none-eabi-gccNM = arm-none-eabi-nmAR       = arm-none-eabi-arOBJCOPY  = arm-none-eabi-objcopySTRIP    = arm-none-eabi-stripSIZE     = arm-none-eabi-sizeifndef DEBUGOPTI = -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_MAINCONTIKI_TARGET_MAIN = contiki-main.c#contiki-main.c也可以在其它地方定义endifCONTIKI_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指定编译目标的MakefileCONTIKI_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)'}  endifendif

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

0 0
原创粉丝点击