本来想把configure.ac和各种m4文件分析明白,发现有点困难,不过好在也能理解一些。

基本教程

首先要明白m4,参见这个教程,写得不错,不论怎么样m4替换来替换去的,还真是不那么容易懂,好在我们自己不用写,只要看懂大意而已~

然后我们还得去了解下 autoconf和automake,这本书不错 《Autotools: A Practioner's Guide to GNU Autoconf, Automake, and Libtool》,csdn有下载。

文件夹结构

当autoconf和automake时使用时,用户自定义宏应该放在 acinclude.m4和m4/*.m4(GNU autoconf手册上说好像是 aclocal/*.m4),流程是这样的:

acinclude.m4 \

aclocal/*.m4 | === aclocal perl script (由automake提供) ===> aclocal.m4

configure.ac /

然后 autoconf 会在处理 configure.ac 之前先处理 aclocal.m4,使 acinclude.m4 aclocal/*.m4中包含的宏定义可在configure.ac中使用

aclocal/*.m4

  • version.m4:定义_RTEMS_VERSION和_RTEMS_API常数
  • rtems-top.m4:定义RTEMS_TOPdir=源代码顶层目录(相对路径)和PROJECT_TOPdir=build-tree顶层目录(相对路径)
  • enable-cxx.m4:定义 --enable-cxx 选项,最终对应变量为 RTEMS_HAS_CPLUSPLUS,默认为 no
  • enable-drvmgr.m4:定义 --enable-drvmgr 选项,最终对应变量为 RTEMS_DRVMGR_STARTUP,默认为 yes
  • enable-multiprocessing.m4:定义 --enable-multiprocessing 选项,最终对应变量为 enable_multiprocessing,默认为 no
  • enable-networking.m4:定义 --enable-networking 选项,最终对应变量为 RTEMS_HAS_NETWORKING,默认为 yes
  • enable-paravirt.m4:定义 --enable-paravirt 选项,最终对应变量为 RTEMS_HAS_PARAVIRT,默认为 no
  • enable-posix.m4:定义 --enable-posix 选项,最终对应变量为 RTEMS_HAS_POSIX_API, 默认为 yes
  • enable-rtemsbsp.m4:定义 --enable-rtemsbsp 选项,最终对应变量为 enable_rtemsbsp,这是一个列表,每个--enable-rtemsbsp都会向这个列表中添加新的bsp,也可以一次性加入多个以空格分隔的bsp列表,默认为空
  • enable-rtems-debug.m4:定义 --enable-rtems-debug 选项,最终对应变量为 enable_rtems_debug, 默认为 no
  • enable-smp.m4:定义 --enable-smp 选项,最终对应变量为 RTEMS_HAS_SMP, 默认为 no
  • enable-tests.m4:定义 --enable-tests 选项,最终对应变量为 enable_tests, 取值可为 yes/no/samples 默认为 samples
  • multilib.m4:定义 --enable-multilib 选项,最终对应变量为 multilib, 默认为 no,同时定义了automake条件 MULTILIB,将会定义两个autoconf变量,@@MULTILIB_TRUE@@和@@MULTILIB_FALSE@@可在makefile中使用,一个将被定义为空,另一个为#(makefile注释)
  • path-ksh.m4:将 bash/ksh/sh中第一个找到的shell的绝对路径设置到KSH变量中,AC_PATH_PROGS和AC_CHECK_PROGS相似,但设置的是绝对路径
  • project-root.m4:设置 PACKHEX和BIN2C变量,指向编译好的tools/build/packhex和rtems-bin2c工具
  • canonical-target-name.m4:从$target变量中获取RTEMS_CPU变量
  • check-bsps.m4:定义 RTEMS_CHECK_BSPS 该宏将参数指定的shell变量赋于所有BSP列表(此处隐含rtems的BSP是不能重名的),所有BSP是怎么确定的呢?其实先 ls c/lib/libbsp/$RTEMS_CPU/*/bsp_specs,其中 * 就是bsp family,然后再找bsp family 文件夹下的 make/custom/*.cfg,这就是bsp了。对于beagle来说,就是 c/lib/libbsp/arm/beagle/make/custom/*.cfg 即 beagleboardorig / beagleboardxm / beagleboneblack / beaglebonewhite
  • check-custom-bsp.m4:定义了 _RTEMS_CHECK_CUSTOM_BSP[bsp_name, path],查找 <bsp_name>.cfg文件是否存在,并将全路径赋于 <path> 的shell变量
  • bsp-alias.m4:定义了 _RTEMS_BSP_ALIAS[bsp_path, bsp_family],根据bsp配置的文件路径返回bsp_family,bsp_path 默认为 $RTEMS_BSP,bsp_family 默认为 RTEMS_BSP_FAMILY

acinclude.m4 文件有点复杂,没有仔细看,另外,我发现 c/src/aclocal 和 cpukit/aclocal 有很多与 顶层目录的 aclocal 目录中相似或相同的文件(这种设计应该是有问题的),暂时也用不着,先不管了,知道怎么加一个bsp就可以继续向前了。

rtems 4.11 部分m4文件分析的更多相关文章

  1. linux实践之ELF文件分析

    linux实践之ELF文件分析 下面开始elf文件的分析. 我们首先编写一个简单的C代码. 编译链接生成可执行文件. 首先,查看scn15elf.o文件的详细信息. 以16进制形式查看scn15elf ...

  2. KEIL MDK输出map文件分析

    一.文件分析流程 1.第一部分:Section Cross References 主要是各个源文件生成的模块之间相互引用的关系. stm32f10x.o(STACK) refers (Special) ...

  3. ecshop init.php文件分析

    1.  ecshop init.php文件分析 2.  <?php  3.   4.  /**  5.  * ECSHOP 前台公用文件  6.  * ===================== ...

  4. Nmap脚本文件分析(AMQP协议为例)

    Nmap脚本文件分析(AMQP协议为例) 一.介绍 上两篇文章 Nmap脚本引擎原理   编写自己的Nmap(NSE)脚本,分析了Nmap脚本引擎的执行过程,以及脚本文件的编写,这篇文章将以解析AMQ ...

  5. 详解m4文件

    最近在分析speex代码,发现编译过程中需要的一个speex.m4文件不知道是何方神圣,怀着对未知知识的渴望,跑到 某哥和某基问了一下,算是认识了,为了方便以后经常见面,这里就做个记录吧. M4实际上 ...

  6. /VAR/LOG/各个日志文件分析

     /VAR/LOG/各个日志文件分析 author:headsen  chen    2017-10-24   18:00:24 部分内容取自网上搜索,部分内容为自己整理的,特此声明. 1.   /v ...

  7. linux内核中链表代码分析---list.h头文件分析(二)【转】

    转自:http://blog.chinaunix.net/uid-30254565-id-5637598.html linux内核中链表代码分析---list.h头文件分析(二) 16年2月28日16 ...

  8. 转【Oracle】一款非常好用的trace文件分析工具

    [Oracle]一款非常好用的trace文件分析工具之一   北在南方 2016-04-14 11:23:58 浏览547 评论0 摘要: 介绍一款非常好用的10046分析工具--trca(Trace ...

  9. /proc/cpuinfo 文件分析(查看CPU信息)

    /proc/cpuinfo文件分析 根据以下内容,我们则可以很方便的知道当前系统关于CPU.CPU的核数.CPU是否启用超线程等信息. <1>查询系统具有多少个逻辑核:cat /proc/ ...

随机推荐

  1. Playing with String(codeforces 305E)

    题意:刚开始你只有一个字符串每次能选择一个有的字符串 s,找到 i,满足s[i - 1] = s[i + 1],将其分裂成 3 个字符串s[1 · · · i - 1]; s[i]; s[i + 1 ...

  2. Connect(bzoj 1948)

    Description 给定一个R*C大小的迷宫,其中R,C均为奇数 迷宫中坐标为两个奇数的点不能通过,称为障碍,迷宫中其他不能通过的点统称为墙壁 坐标为两个偶数的点可以通过,称为房间,迷宫中其他可通 ...

  3. HAOI2008题解

    又来写题解辣-然而并不太清楚题目排列情况...不管辣先写起来- T1:[bzoj1041] 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1 ...

  4. 创建外网 ext

    虽然外部网络是已经存在的网络,但我们还是需要在 Neutron 中定义外部网络的对象,这样 router 才知道如何将租户网络和外部网络连接起来. 上一节我们已经为创建外部网络配置了ML2,本节将通过 ...

  5. 洛谷 P1027 Car的旅行路线

    P1027 Car的旅行路线 题目描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游.她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一条笔直的高速铁路 ...

  6. Javascript&Html-弹出窗口的屏蔽程序

    大多数的浏览器都内置了弹出窗口的屏蔽程序,即使没有内置此类屏蔽程序的浏览器,用户也可以安装Yahoo tool等带有内置屏蔽程序的应用工具. 结果就是用户可以将绝大多数弹出窗口屏蔽掉. 于是,再弹出窗 ...

  7. AspNetPager分页控件官方网站

    原文发布时间为:2009-12-04 -- 来源于本人的百度文章 [由搬家工具导入] http://www.webdiyer.com/AspNetPager

  8. [LeetCode] Find Peak Element 二分搜索

    A peak element is an element that is greater than its neighbors. Given an input array where num[i] ≠ ...

  9. C语言编程中函数指针的定义及使用

    C语言中函数指针的定义: typedef int (*funcPtr)(int, int)表示定义了一个函数指针funcPtr,这个函数指针只能指向如下: int add(int, int).int ...

  10. TopCoder SRM 301 Div2 Problem 1000 CorrectingParenthesization(区间DP)

    题意  给定一个长度为偶数的字符串.这个字符串由三种括号组成. 现在要把这个字符串修改为一个符合括号完全匹配的字符串,改变一个括号的代价为$1$,求最小总代价. 区间DP.令$dp[i][j]$为把子 ...