Linux移植之make uImage编译过程分析中分析了uImage文件产生的过程,在uImage产生的过程中,顺带还产生了其它的一些中间文件。这里主要介绍几个比较关键的文件

1、linux-2.6.22.6\include\config\auto.conf、inux-2.6.22.6\include\linux\autoconf.h文件的生成过程

2、include\asm-arm\Mach-types.h文件的生成过程

1、inux-2.6.22.6\include\config\auto.conf、inux-2.6.22.6\include\linux\autoconf.h文件的生成过程

在顶层Makefile中尝试寻找auto.conf,找到如下信息:可以看到顶层Makefile中需要包含-include include/config/auto.conf、-include include/config/auto.conf.cmd。-include表示即使文件不存在也不会报错。

    # Read in config
-include include/config/auto.conf ifeq ($(KBUILD_EXTMOD),)
# Read in dependencies to all Kconfig* files, make sure to run
# oldconfig if changes are detected.
-include include/config/auto.conf.cmd # To avoid any implicit rule to kick in, define an empty command
$(KCONFIG_CONFIG) include/config/auto.conf.cmd: ; # If .config is newer than include/config/auto.conf, someone tinkered
# with it and forgot to run make oldconfig.
# if auto.conf.cmd is missing then we are probably in a cleaned tree so
# we execute the config step to be sure to catch updated Kconfig files
include/config/auto.conf: $(KCONFIG_CONFIG) include/config/auto.conf.cmd
$(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig

继续分析生成include/config/auto.conf目标的语句

    include/config/auto.conf: $(KCONFIG_CONFIG) include/config/auto.conf.cmd
$(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig

可以看到依赖KCONFIG_CONFIG其实就是.config

    KCONFIG_CONFIG    ?= .config
依赖include/config/auto.conf.cmd,这条语句知道,该语句中的目标没有依赖,也没有生成它的规则命令,所以可想GNU Make本身无法生成auto.conf.cmd 的。
    $(KCONFIG_CONFIG) include/config/auto.conf.cmd: ;
然后该条语句后面的一个分号表明,这两个目标被强制是最新的,所以下面这条命令得以执行:
        $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig

继续往下分析发现这条命令是执行顶层的Makefile生成silentoldconfig目标。找到生成这个目标的规则:

    config %config: scripts_basic outputmakefile FORCE
$(Q)mkdir -p include/linux include/config
$(Q)$(MAKE) $(build)=scripts/kconfig $@

这个规则在Linux移植之配置过程分析已经分析过。所以直接去到scripts/kconfig/Makefile找到silentoldconfig目标的规则:

    silentoldconfig: $(obj)/conf
$< -s arch/$(ARCH)/Kconfig

可以看到它依赖于scripts/kconfig/conf这个程序,这个程序的编译过程就不分析了,继续看到规则,将规则展开得到

        conf -s arch/arm/Kconfig

所以需要知道conf的功能,那么就去要看它的源码。在这里简单说明一下它的功能:其实就是调用.config文件,保证了 .config 已经最新后,那么调用 conf_write_autoconf() 生成 auto.conf,auto.conf.cmd 以及 autoconf.h 这 3 个文件。详情分析参考https://blog.csdn.net/lcw_202/article/details/6661364

2、include\asm-arm\Mach-types.h文件的生成过程,在分析内核源码时发现这个文件如果没有编译的话是不存在的,它存放着单板机器编码,这个编码就是与uboot传入的编码比较的。比如#define MACH_TYPE_S3C2440              362。

来到arch/arm/Makefile文件中,看到如下几条命令:

    maketools: include/linux/version.h include/asm-arm/.arch FORCE
$(Q)$(MAKE) $(build)=arch/arm/tools include/asm-arm/mach-types.h

这个分析过程类似于第一点产生文件的过程,来到arch/arm/tools/Makefile中,可以看到nclude/asm-arm/mach-types.h是由

    include/asm-arm/mach-types.h: $(src)/gen-mach-types $(src)/mach-types
@echo ' Generating $@'
$(Q)$(AWK) -f $^ > $@ || { rm -f $@; /bin/false; }

将第9行命令展开得到,它的意思是利用arch/arm/tools/mach-types程序产生include/asm-arm/mach-types.h文件,如果不成功,则删除。其中arch/arm/tools/mach-types是内核一开始就做好的工具。

awk -f arch/arm/tools/gen-mach-types arch/arm/tools/mach-types > include/asm-arm/mach-types.h || { rm -f include/asm-arm/mach-types.h; /bin/false; }
 

Linux移植之auto.conf、autoconf.h、Mach-types.h的生成过程简析的更多相关文章

  1. [C++]Linux之头文件sys/types.h[/usr/include/sys]

    1.查找<sys/types.h>文件 一般地,Linux的C头文件<sys/types.h>路径在如题的途径:/usr/include/sys下,然而博主[Linux For ...

  2. 《Linux内核Makefile分析》之 auto.conf, auto.conf.cmd, autoconf.h【转】

    转自:http://blog.sina.com.cn/s/blog_87c063060101l25y.html 转载:http://blog.csdn.net/lcw_202/article/deta ...

  3. Linux移植之make uImage编译过程分析

    编译出uboot可以运行的linux内核代码的命令是make uImage,下面详细介绍下生成linux-2.6.22.6/arch/arm/boot/uImage的过程: 1.vmlinux.Ima ...

  4. Linux移植之tag参数列表解析过程分析

    在Linux移植之内核启动过程start_kernel函数简析中已经指出了start_kernel函数的调用层次,这篇主要是对具体的tag参数列表进行解析. 1.内存参数ATAG_MEM参数解析 2. ...

  5. linux移植问题汇总(一)

    linux移植问题汇总(一) 在此记录移植linux过程中出现的问题以及解决方法. 项目GitHub地址 linux3.0.80:https://github.com/numbqq/linux-3.0 ...

  6. 三种嵌入式web服务器(Boa / lighttpd / shttpd)的 linux移植笔记

    一:移植Boa(web服务器)到嵌入式Linux系统 一.Boa程序的移植 1.下载Boa源码    下载地址: http://www.boa.org/    目前最新发行版本: 0.94.13   ...

  7. Linux移植之内核启动过程引导阶段分析

    在Linux移植之make uImage编译过程分析中已经提到了uImage是一个压缩的包并且内含压缩程序,可以进行自解压.自解压完成之后内核代码从物理地址为0x30008000处开始运行.下面分析在 ...

  8. Linux移植随笔:对tslib库的ts_test测试程序代码的一点分析【转】

    转自:http://www.latelee.org/embedded-linux/porting-linux-tstest-code.html 本文是作者对tslib库的ts_test.c文件进行分析 ...

  9. freescale-sdk linux移植一搭建编译环境脚本host-prepare.sh分析

    接下来使用自己的课外歇息时间,对基于PowerPC架构freescale-sdk,进行linux移植和分析.主要參考官方文档freescale linux sdk START_HERE.html,首先 ...

随机推荐

  1. LISTVIEW显示JPEG缩略图

    http://www.ctsys.cn/files/SHOW_FILES.ASPX?ID=22 许多的JPEG图片浏览器(如由我设计的<JPEG浏览缩放器>),都可以将JPEG缩略图放置到 ...

  2. ArcGIS案例学习笔记-点群密度统计

    ArcGIS案例学习笔记-点群密度统计 联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com 目的:对于点群,统计分布密度 数据: 方法: 1. 生成格网 2. 统计个数, ...

  3. 手动安裝TMG2010所需Windows服务和功能

    安装 Forefront TMG 之前,必须运行准备工具,以验证是否已在您的计算机上安装成功安装 Forefront TMG 所需的应用程序.如果在未首先运行准备工具的情况下运行 Forefront ...

  4. 在Centos 6.5 X64下切割m3u8

    操作系统:centos 6.5 必需要参考的文章: http://blog.chinaunix.net/uid-23069658-id-4018842.html 准备工作: 安装git yum ins ...

  5. Android Debug Bridge命令介绍[转]

    Android Debug Bridge命令介绍 Android Debug Bridge的一些基本命令.这个工具直译过来就是Android调试桥的意思.它提供了强大的特性,例如复制文件到设备或从设备 ...

  6. openstack常用命令

    共享镜像 glance member-create fa47923c-2d3b-4d71-80cf-a047ba3bf342 eb3913b9ae5f41b09f2632389a1958d8删除共享镜 ...

  7. godep 包管理

    go get -u -v github.com/tools/godep  godep save

  8. APP支付-》支付宝RSA2->支付与验签

    第一次配置支付宝,按照官网示例搞了一天,走不通.经过两天的踩坑,百度了大神的代码,支付宝终于可以了. 1:下载这是官网的最新SDK 2:配置SDK,添加命名空间 AopClient.php文件: Si ...

  9. mongodb副本集的从库永久性设置setSlaveOk

    今天在生产环境下面搭了一个mongo的副本集,但开发那边要求副本集读写分离. 坑爹的是每次上副本集的时候都要设置db.getMongo().setSlaveOk()才能访问数据.感觉很是苦逼. 后来开 ...

  10. love is ... ...

    16 years old, love is dream.20 years old, love is sex.30 years old, love is marriage. 40 years old, ...