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的特性了---尽管还有许多路要走。
contiki makefile框架分析 < contiki学习之一 >的更多相关文章
- openwrt: Makefile 框架分析
openwrt: Makefile 框架分析 原文链接:blog.chinaunix.net/uid-26675482-id-4704952.html 本篇的主要目的是想通过分析Makefile,了解 ...
- cc2530 makefile简略分析 <contiki学习之三>
前面将contiki的makefile框架都理了下,这篇就以cc2530为收篇吧,也即makefile分析就该到此为止了. contiki/examples/cc2530dk 打开Makefile如下 ...
- openwrt: Makefile 框架分析[转载]
openwrt目录结构 上图是openwrt目录结构,其中第一行是原始目录,第二行是编译过程中生成的目录.各目录的作用是: tools - 编译时需要一些工具, tools里包含了获取和编译这些工具的 ...
- contiki Makefile.include 四个关注点<contiki学习之二>
Contiki Makefile.include 笔记 约定: makefile 包括Makefile.Makefile.xxx,并不单指Makefile 不对makefile的语法进行分析,仅仅关 ...
- linux驱动基础系列--linux spi驱动框架分析
前言 主要是想对Linux 下spi驱动框架有一个整体的把控,因此会忽略某些细节,同时里面涉及到的一些驱动基础,比如平台驱动.设备模型等也不进行详细说明原理.如果有任何错误地方,请指出,谢谢! spi ...
- (七) UVC框架分析
title: UVC框架分析 date: 2019/4/23 19:50:00 toc: true --- UVC框架分析 源码的位置在drivers\media\video\uvc,查看下Makef ...
- Linux USB驱动框架分析 【转】
转自:http://blog.chinaunix.net/uid-11848011-id-96188.html 初次接触与OS相关的设备驱动编写,感觉还挺有意思的,为了不至于忘掉看过的东西,笔记跟总结 ...
- Linux USB驱动框架分析【转】
转自:http://blog.csdn.net/jeffade/article/details/7701431 Linux USB驱动框架分析(一) 初次接触和OS相关的设备驱动编写,感觉还挺有意思的 ...
- 机器学习框架ML.NET学习笔记【4】多元分类之手写数字识别
一.问题与解决方案 通过多元分类算法进行手写数字识别,手写数字的图片分辨率为8*8的灰度图片.已经预先进行过处理,读取了各像素点的灰度值,并进行了标记. 其中第0列是序号(不参与运算).1-64列是像 ...
随机推荐
- #include<unistd.h>头文件的理解
1.百度百科定义 unistd.h 是 C 和 C++ 程序设计语言中提供对 POSIX 操作系统 API 的访问功能的头文件的名称.该头文件由 POSIX.1 标准(单一UNIX规范的基础)提出,故 ...
- vim变ide
如果你稍微写过一点代码,就能知道“集成开发环境”(IDE)是多么的便利.不管是Java.C还是Python,当IDE会帮你检查语法.后台编译,或者自动导入你需要的库时,写代码就变得容易许多.另外,如果 ...
- 【ASP.NET】编程点滴 :ASP.NET身份验证
ASP.NET实际开发中身份验证 是一个不可回避的问题.在相当一段长的时间内,由于不求甚解,我对这个话题似懂非懂.今天就对它做个简单的小结. Authentication and Authorizat ...
- plsql developer 使用技巧
plsql developer 使用技巧 Oracle数据库相信已成为很多企业构建自身关键业务的重要后台支撑,也是众多开发人员常常采用的后台.但Oracle自己提供的一套客户端工具不是很好用,极大的影 ...
- Android 下压缩图片—微弱失真
Android下压缩图片的方法: 大概能将3M左右的图片压缩到100K左右, 几乎不失真. 代码如下: import java.io.FileNotFoundException; import jav ...
- <二>面向对象分析之几个关键的概念
一:建模 --->建模,是指通过对[客观事物]建立一种抽象的方法用以表征事物并获得对事物本身的理解.同时把这种理解概念化,将这些逻辑概念组织起来,构成一种对所观察对象的内部结构和工 ...
- 【转】linux中wait与waitpid的差别
原文网址:http://blog.163.com/libo_5/blog/static/15696852010324287748/ zombie不占用内存也不占用CPU,表面上我们可以不用在乎它们的存 ...
- 在linux的shell里访问一个URL
在linux上访问一个网址有四种方法 1.elinks,用法举例: [weishusheng@centOS6 ~]$ elinks -dump http://www.baidu.com 2. wget ...
- 新闻类App使用的组件
UI SlidingMenu:com.jeremyfeinstein.slidingmenu:滑动菜单 ActionBarSherlock:com.actionbarsherlock:Action B ...
- 未能加载文件或程序集“Oracle.DataAccess, Version=2.112.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342"
转载自原文 未能加载文件或程序集"Oracle.DataAccess, Version=2.112.1.0,..." 若本机的Oracle版本是32位系统,则在调用Oracle数据 ...