在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的特性了---尽管还有许多路要走。

转载于:https://www.cnblogs.com/chineseboy/p/3844981.html

contiki makefile框架分析 contiki学习之一相关推荐

  1. linux makefile 框架分析1

    主Makefile [17] MAKECMDGOALS: 命令行传入的构建对象 [22] __all : 默认目标 [40] sub_make_done: 存在的意义,构建框架存在递归调用的行为,而对 ...

  2. linux makefile 框架分析2

    [194] ifeq need-sub-make = 0          该篇主要分析这部分主makefile内容 [1906] end need-sub-make [211] C: 源代码chec ...

  3. linux v4l2系统详解,Linux摄像头驱动学习之:(一)V4L2_框架分析

    这段时间开始搞安卓camera底层驱动了,把以前的的Linux视频驱动回顾一下,本篇主要概述一下vfl2(video for linux 2). 一. V4L2框架: video for linux ...

  4. Contiki 系统框架

    由于TCP/IP协议不适用于资源受限的嵌入式设备,IEFT提出了6lowpan协议栈,6lowpan框架如下: 图1 正如实现Zigbee协议的协议栈有z-stack.ember.Freakz一样,目 ...

  5. Contiki的内核分析-定时器模型

    导读 本文通过分析Contiki的源码,梳理Contiki的定时器模型中一共5个定时器的工作机制和原理. 引入 从本文开始,我们开始探究Contiki的5个定时器模型,遵循从易到难的原则,我们先开始两 ...

  6. nrf52832 学习笔记(二)SDK框架分析

    nrf52832 学习笔记(二)SDK框架分析 个人对SDK框架的一些理解,如有错误欢迎斧正. flash 分区 在不包含DFU的情况下,nrf52832 flash划分为: MBR 0x000000 ...

  7. OpenGL研究, GUI框架分析, 虚拟机比较, Win10历险记, WxWidget, uboot, WireShark

    http://antkillerfarm.github.io/ OpenGL研究 书籍 我手上其实有几本关于OpenGL的实体书,但是比较了一下之后,发现还是电子版的<OpenGL编程指南> ...

  8. framebuffer驱动详解2——framebuffer驱动框架分析

    以下内容源于朱有鹏嵌入式课程的学习,如有侵权,请告知删除. 一.framebuffer驱动框架总览 1.驱动框架部分 (1)drivers/video/fbmem.c(主要的文件) 创建graphic ...

  9. 不止Markov决策过程,全景式分析强化学习研究内容

    作者 | 肖智清 编辑 | 刘静 来源 | CSDN(ID:CSDNnews) 强化学习作为通用人工智能的希望,吸引了很多人工智能爱好者学习和研究.Markov决策过程是最知名的强化学习模型,强化学习 ...

最新文章

  1. 查找SQL SERVER 2005 IO过高的数据库
  2. 校园导游系统c语言代码,GitHub - iamywang/Campus-Guide-System: 校园导游系统
  3. 「Githug」Git 游戏通关流程
  4. SAP HANA ANY和ALL关键字
  5. imx6 android SD卡启动
  6. Linux内核Socket参数调优
  7. (转)深入理解最强桌面地图控件GMAP.NET --- 原理篇
  8. ajax请求头cookies中传递sid,跨域请求单点登录,登录成功,但是在controller中获取的cookie与浏览器中不一致,请大神指点一二。^_^...
  9. (64)FPGA模块例化(generate)
  10. 【PyQt5】PyQt5 安装 以及使用 designer 开发 python GUI 界面
  11. python工资一般多少西安-西安学习Python哪里好多少钱
  12. Github下载代码和运行
  13. python中格式化输出_python如何实现格式化输出
  14. CRC校验算法——C语言实现
  15. 利用Arthas进行简单的故障注入
  16. Python字符串的‘ ’,“ ”,''' '''
  17. 欢迎使JMKAJL KAJLKFJD
  18. 每周跑一下Python脚本,轻松生成工作日志模板
  19. 10万一平米的北京房价是如何让清华天才陨落的?
  20. 红魔8pro pro+机型NX729J解锁bl 获取root教程

热门文章

  1. 2018谷歌学术影响因子发布:NIPS首次跃进Top 100,CVPR排名泛AI领域第一
  2. 人脸识别冤枉了98%的好人,伦敦警察局长:我很满意
  3. 独家 | 林元庆告别百度
  4. 《代码敲不队》第八次团队作业:Alpha冲刺 第五天
  5. 靠近阿里云--视频点播
  6. 十一项全球最具权威的大数据资质认证
  7. C# 简单日志文本输出
  8. C ~ 指针函数与函数指针的区别
  9. php in_array()函数
  10. POJ 1451 T9 (字典树好题)