Contiki 2.7 Makefile 文件(四)

3、第三部分

这里我们假设TARGET为native

(1)

OBJECTDIR = obj_$(TARGET)

LOWERCASE = -abcdefghijklmnopqrstuvwxyz
UPPERCASE = _ABCDEFGHIJKLMNOPQRSTUVWXYZ
TARGET_UPPERCASE := ${strip ${shell echo $(TARGET) | sed y!$(LOWERCASE)!$(UPPERCASE)!}}
CFLAGS += -DCONTIKI=1 -DCONTIKI_TARGET_$(TARGET_UPPERCASE)=1

定义OBJECTDIR变量为obj_native,这个是存放object文件的目录

定义LOWERCASEUPPERCASE变量,分别存放字母的小写,大些。

TARGET_UPPERCASE看名字就知道,应该是将native转换为NATIVE,看怎么实现的。

echo $(TARGET)  这个命令输出TARGET变量的值,我们这里假定为native,故输出native。

| 是管道,连接上个指令的标准输出,做为下个指令的标准输入,即sed命令的输入是echo $(TARGET)的输出native。

sed命令:

 y/source/dest/
              Transliterate the characters in the pattern space which appear in source to the corresponding character in dest.

LOWERCASE和UPPERCASE所对应的位置,就是字母的小写和大写,所以native被转换成了NATIVE。

shell是make内置的函数,参数是Shell命令,将Shell命令的输出作为返回值,故这里的返回值为NATIVE。

strip是make内置的函数,返回去掉空格的字符串值。这里的NATIVE没有空格,故返回NATIVE。

CFLAGS追加 -DCONTIKI=1 -DCONTIKI_TARGET_NATIVE=1

 

(2)

include $(CONTIKI)/core/net/rime/Makefile.rime
include $(CONTIKI)/core/net/mac/Makefile.mac

 导入两个Makefile文件。

 

$(CONTIKI)/core/net/rime/Makefile.rime: 
ifeq ($(UIP_CONF_IPV6),1)
#RIME_UIP6      = rime-udp.c
RIME_BASE      = rimeaddr.c timesynch.c rimestats.c
else
RIME_CHAMELEON = chameleon.c channel.c chameleon-raw.c chameleon-bitopt.c
RIME_BASE      = rimeaddr.c rime.c timesynch.c \
                 rimestats.c announcement.c polite-announcement.c \
                 broadcast-announcement.c
RIME_SINGLEHOP = broadcast.c stbroadcast.c unicast.c stunicast.c \
                 runicast.c abc.c \
                 rucb.c polite.c ipolite.c
RIME_MULTIHOP  = netflood.c multihop.c rmh.c trickle.c
RIME_MESH      = mesh.c route.c route-discovery.c
RIME_COLLECT   = collect.c collect-neighbor.c neighbor-discovery.c \
         collect-link-estimate.c
RIME_RUDOLPH   = rudolph0.c rudolph1.c rudolph2.c
endif # UIP_CONF_IPV6

CONTIKI_SOURCEFILES += $(RIME_BASE) \
               $(RIME_SINGLEHOP) \
               $(RIME_MULTIHOP) \
               $(RIME_MESH) \
               $(RIME_COLLECT) \
               $(RIME_RUDOLPH) \
               $(RIME_CHAMELEON) \
               $(RIME_UIP6)

 

 这里根据UIP_CONF_IPV6的值来决定Rime模块中有哪些文件需要包含进CONTIKI_SOURCEFILES(源文件)。

这里的变量基本都可以从字面上的意思看得明白。

注:UIP_CONF_IPV6为1时,走ipv6。

 

 $(CONTIKI)/core/net/mac/Makefile.mac

CONTIKI_SOURCEFILES += cxmac.c xmac.c nullmac.c lpp.c frame802154.c sicslowmac.c nullrdc.c nullrdc-noframer.c mac.c
CONTIKI_SOURCEFILES += framer-nullmac.c framer-802154.c csma.c contikimac.c phase.c

 

包含Mac模块中所有源文件进 CONTIKI_SOURCEFILES(源文件)

(3)

SYSTEM  = process.c procinit.c autostart.c elfloader.c profile.c \
          timetable.c timetable-aggregate.c compower.c serial-line.c
THREADS = mt.c
LIBS    = memb.c mmem.c timer.c list.c etimer.c ctimer.c energest.c rtimer.c stimer.c trickle-timer.c \
          print-stats.c ifft.c crc16.c random.c checkpoint.c ringbuf.c settings.c
DEV     = nullradio.c

include $(CONTIKI)/core/net/Makefile.uip
include $(CONTIKI)/core/net/rpl/Makefile.rpl

CTK     = ctk.c
CTKVNC  = $(CTK) ctk-vncserver.c libconio.c vnc-server.c vnc-out.c ctk-vncfont.c

ifndef CONTIKI_NO_NET
  CONTIKIFILES = $(SYSTEM) $(LIBS) $(NET) $(THREADS) $(DHCP) $(DEV)
else
  CONTIKIFILES = $(SYSTEM) $(LIBS) $(THREADS) $(DEV) sicslowpan.c fakeuip.c
endif

CONTIKI_SOURCEFILES += $(CONTIKIFILES)

 

定义SYSTEM THREADS LIBS DEV等变量,这些都很容易理解,这是Contiki系统存储系统运行,多进程,库,设备等源文件的变量

导入$(CONTIKI)/core/net/Makefile.uip

NET =                        \
dhcpc.c                        \
hc.c                        \
nbr-table.c            \
netstack.c                    \
packetbuf.c                    \
packetqueue.c                    \
psock.c                        \
queuebuf.c                    \
resolv.c                    \
sicslowpan.c                    \
simple-udp.c                    \
tcpdump.c                    \
tcpip.c                        \
uaodv-rt.c                    \
uaodv.c                        \
uip-debug.c                    \
uip-ds6-route.c                    \
uip-ds6-nbr.c                \
uip-ds6.c                    \
uip-fw-drv.c                    \
uip-fw.c                    \
uip-icmp6.c                    \
uip-nd6.c                    \
uip-neighbor.c                    \
uip-over-mesh.c                    \
uip-packetqueue.c                \
uip-split.c                    \
uip-udp-packet.c                \
uip.c                        \
uip6.c                        \
uip_arp.c                    \
uiplib.c

 

定义uIP所需的源文件,并存放在NET变量中。

 

导入$(CONTIKI)/core/net/rpl/Makefile.rpl

CONTIKI_SOURCEFILES += rpl.c rpl-dag.c rpl-icmp6.c rpl-timers.c \
    rpl-mrhof.c rpl-ext-header.c

 

将rpl模块的源文件包含进 CONTIKI_SOURCEFILES(源文件)

 

CTK     = ctk.c
CTKVNC  = $(CTK) ctk-vncserver.c libconio.c vnc-server.c vnc-out.c ctk-vncfont.c

定义CTKCTKVNC等变量。这是跟GUI相关。

 

ifndef CONTIKI_NO_NET
  CONTIKIFILES = $(SYSTEM) $(LIBS) $(NET) $(THREADS) $(DHCP) $(DEV)
else
  CONTIKIFILES = $(SYSTEM) $(LIBS) $(THREADS) $(DEV) sicslowpan.c fakeuip.c
endif

 

根据是否定义了CONTIKI_NO_NET这个变量,来决定是否将NET变量中的源文件包含进CONTIKIFILES(源文件)。

即决定是否要包含uIP中的源文件。

 

CONTIKI_SOURCEFILES += $(CONTIKIFILES)

将上个步骤定义好的CONTIKIFILES变量的值添加到CONTIKI_SOURCEFILES(源文件)中去。

 

CONTIKIDIRS += ${addprefix $(CONTIKI)/core/,dev lib net net/mac net/rime \
                 net/rpl sys cfs ctk lib/ctk loader . }

定义Contiki操作系统,源文件目录。

addprefix为make的内置函数,即为后边的字符串添加$(CONTIKI)/core/。

最后为$(CONTIKI)/core/dev,  $(CONTIKI)/core/lib, $(CONTIKI)/core/net, $(CONTIKI)/core/net/mac, $(CONTIKI)/core/net/rime, $(CONTIKI)/core/net/rpl, $(CONTIKI)/core/sys, $(CONTIKI)/core/cfs, $(CONTIKI)/core/ctk, $(CONTIKI)/core/lib/ctk, $(CONTIKI)/core/loader, $(CONTIKI)/core/.

这些都是Contiki操作系统的内核源文件目录。

转载于:https://www.cnblogs.com/songdechiu/p/6012156.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值