• 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操作系统的内核源文件目录。

  • 相关阅读:
    LeetCode90.子集 ||
    Ubuntu下的Matlab安装
    FAQ
    青石板
    交叉熵损失函数
    tf常用函数
    激活函数
    SGD和GD的区别
    卷积神经网络
    Ubuntu安装Matlab2016b
  • 原文地址:https://www.cnblogs.com/songdechiu/p/6012156.html
Copyright © 2020-2023  润新知