zoukankan      html  css  js  c++  java
  • contiki makefile框架分析 < contiki学习之一 >

    在linux下的工程编译,基本都可以使用makefile这个工具来完成。Contiki OS亦如此,下面分析contiki整个Makefile的框架,对makefile的具体内容暂不做分析。本文依赖于contiki OS 源码目录下  /doc/build-system.txt 文件,若有疑问,可参考该文档。

    约定: makefile 一词代指所有makefile文件,包括Makefile 以及Makefile.xxx之类的文件。

    一 contiki OS源码中Makefile的种类。

      其实Makefile种类一说,这个是我自己创的—-其实它们都是makefile文件了。Contiki OS一共分为5类makefile文件:

    A : Makefile

    B:  Makefile.include 

    C:  Makefile.$(TARGET)

    D:  Makefile.$(CPU)

    E:  Makefile.$(APP)

    从上面可以看出,除了自己项目工程下的makefile名字为Makefile以外,其他的makefile文件都带有后缀名了。

    二 contiki OS源码各类makefile的来源及作用。

    Makefile:

    来自自己的项目工程目录,比如contiki/examples/hello-world/ 的Makefile。这个文件即是响应我们的make命令的文件—当然,也只有这个文件会响应我们的make命令,其他的makefile文件都是被调用的配角。

    Makefile.include:

    来自contiki OS的顶层目录 contiki/。这个文件会被前面的Makefile文件调用,我们在编写自己的项目工程makefile文件的时候,应该include 这个Makefile.include文件。该文件会包含整个contiki 系统的核心代码:system core。同时,它自己也属于整个源码树的一个环节,它还会包含后面几种makefile文件。

    Makefile.$(TARGET):

    来自contiki/platform/ 目录下的某个平台。比如,我们演示程序hello-world依赖于native平台,那么contiki/platform/native 下就有一个Makefile.native 的makefile文件。当我们选择了native 平台的时候,Makefile.native文件就会被前面的 Makefile.include所调用。

    Makefile.$(CPU):

    这个从名字上看,应该是标志cpu的。不错,确实是选择cpu时使用的makefile文件。它来自于contiki/cpu/ 目录下的某个芯片。比如,我们的native 平台,那么在contiki/cpu/native

    目录下会有一个Makefile.native的makefile文件,来表示native平台使用的cpu,那么它将会被前面的Makefile.$(TARGET)  (contiki/platform/native/Makefile.native)文件所调用。注意,前面的target下的makefile名字与cpu下的makefile名字相同了,不要诧异。

    Makefile.$(APP):

    来自/contiki/apps/ 目录下的某个应用。比如contiki/apps/email/ 目录下的 Makefile.email 文件。那么它们会在哪里被调用呢?如果在项目工程的Makefile里面定义了”APPS” 变量,那么在Makefile.include里会被调用到,或者说会被包含进入的。

    下面用图展示下各种makefile之间的层次关系,就以hello-world的工程为例吧。

     

         从上面的makefile来看,不同平台,不同应用在编译的时候,并不是把contiki/目录下的所有源码都编译了,而是经过makefile选择性的编译了。这就为我们的移植工作带来了各种方便。

         以上便是contiki的整体makefile的框架,或者说contiki的编译方法。下面介绍一下在工程目录下make的一些使用技巧。

    三、make的方法

         当然,有了上面的各种makefile文件,我们编译这个工程就只需要一个make命令。但还有一些细节需要介绍。

         在我们的项目工程目录下,如果不在Makefile里指定我们的硬件平台,这个时候敲下make命令,发生的情况是会自动以  native 为硬件平台。至于能否在这个平台上编译成功,这是未知的事情。

        那么,我们如何指定自己的硬件平台呢?有以下两种或者三种方法:

     A、 在make的时候手工指定平台,像这样:

        make TARGET=native/make TARGET=arm

     B、 在Makefile的同级目录,手工创建一个Makefile.target,然后在该文件里写入:

        TARGET = native

       然后保存退出,再次make

     C、 在第一次make的时候,顺带把当前编译的平台保存为默认平台,像这样:

        make TARGET=native savetarget

       编译过后,它会自动保存一个Makefile.target,里面的内容同前面操作相同。

         那么接下来看另外一种情况:如果把contiki OS运行起来,而我们把一个hello-world的二进制可执行文件当成一个普通应用加载到这个正在运行的OS上,怎么弄呢?

    按照官方文档,我们可以这样操作:

         make TARGET=native  hello-world.ce

    这样生成的文件,就类似于在linux下gcc编译生成的a.out文件或者在windows下生成的.exe文件,我们可以直接运行。

      那么,与直接make生成的文件区别为:直接make编译会生成整个contiki OS的二进制文件,而最后面的make hello-world.ce生成的只是一个可执行的二进制文件而已。

        好了,有了整个makefile的框架图,那么就可以开始学习contiki的特性了---尽管还有许多路要走。

  • 相关阅读:
    latex之图表位置控制
    iPhone应用程序的启动过程
    zend server mac 下配置
    外键约束
    yii2中的资源....
    Composer fails to download http json files on "update", not a network issue, https fine
    UIResponder
    UIApplication深入学习
    UISCREEN 和支持高分辨率的显示屏
    IOS7 隐藏状态栏 (电池栏)
  • 原文地址:https://www.cnblogs.com/chineseboy/p/3844981.html
Copyright © 2011-2022 走看看