一、.config文件概述

.config文件是linux内核配置文件,当执行#make uImage编译生成内核时,顶层的Makefile会读取.config文件的内容,根据这个配置文件来编译所定制的内核。

二、.config文件关联 

1 文件关联图

以CONFIG_DM9000为例进行说明。

在#make menuconfig中选择使用CONFIG_DM9000,然后在配置文件.config中就会有对应的项设置成为y或者m。

在#make uImage编译内核时,顶层Makefile会根据.config的配置生成两个配置文件:

include/linux/autoconf.h

include/config/auto.conf

其中,autoconf.h是C语言头文件主要影响C文件的编译。

auto.conf会被顶层Makefile所包含,然后传递到底层Makefile中从而影响到底层文件的编译。

2 关联文件部分内容展示

 1、.config

#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.30.4
# Wed Apr   :: 
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
CONFIG_GENERIC_GPIO=y
# CONFIG_PHYLIB is not set
CONFIG_NET_ETHERNET=y
CONFIG_MII=y
# CONFIG_AX88796 is not set
# CONFIG_SMC91X is not set
CONFIG_DM9000=y
CONFIG_DM9000_DEBUGLEVEL=
# CONFIG_DM9000_FORCE_SIMPLE_PHY_POLL is not set
# CONFIG_ETHOC is not set
# CONFIG_SMC911X is not set
# CONFIG_SMSC911X is not set

2、include/linux/autoconf.h

 * Automatically generated C config * Wed Apr  2 16:22:04 2014
 : don't edit
 * Linux kernel version: 2.6.30.4
*/
#define AUTOCONF_INCLUDED
#define CONFIG_VIDEO_V4L1_COMPAT 1
#define CONFIG_HID_CHERRY 1
#define CONFIG_FRAME_WARN 1024
#define CONFIG_CPU_S3C244X 1
#define CONFIG_USB_GSPCA_T613 1
#define CONFIG_CPU_COPY_V4WB 1
#define CONFIG_MMC_S3C 1
#define CONFIG_USB_GSPCA_OV519 1
#define CONFIG_DM9000 1
#define CONFIG_S3C2410_CLOCK 1
#define CONFIG_RTC_DRV_S3C 1

可以看到这个文件是自动生成的,而且有宏定义CONFIG_DM9000,通过这个宏定义就可以影响到包含到该宏的C文件。

3、arch/blackfin/mach-bf533/boards/H8606.c

*  Driver needs to know address, irq and flag pin.
 */
 #if    defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)
static struct resource dm9000_resources[] = {
        [] = {
                .start  = 0x20300000,
                .end    = 0x20300002,
                .flags  = IORESOURCE_MEM,
        },
        [] = {
                .start  = 0x20300004,
                .end    = 0x20300006,
                .flags  = IORESOURCE_MEM,
        },
        [] = {
                .start  = IRQ_PF10,
                .end    = IRQ_PF10,
                .flags  = (IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE | IRQF_SHARED | IRQF_TRIGGER_HIGH),
        },
}; static struct platform_device dm9000_device = {
    .id                 = ,
    .name               = "dm9000",
    .resource           = dm9000_resources,
    .num_resources      = ARRAY_SIZE(dm9000_resources),
};
#endif

上一步生成的宏就会影响到包含宏CONFIG_DM9000的文件的编译。笔者觉得通常这类C文件“可能是”用到了DM9000的功能,可以选择“添加”或者“去掉”,这正是autoconf.h中的宏定义存在的意义。

4、include/config/auto.conf

# Automatically generated make config: don't edit
# Linux kernel version: 2.6.30.4
# Wed Apr   :: 
#
CONFIG_VIDEO_V4L1_COMPAT=m
CONFIG_HID_CHERRY=y
CONFIG_PLAT_S3C=y
CONFIG_USB_GSPCA_OV519=y
CONFIG_DM9000=y
CONFIG_S3C2410_CLOCK=y
CONFIG_RTC_DRV_S3C=y

auto.conf也是自动生成的,这个文件被Makefile所包含,它会影响到模块功能是否被添加,以何种方式添加。

5、drivers/net/Makefile

obj-$(CONFIG_BFIN_MAC) += bfin_mac.o
obj-$(CONFIG_DM9000) += dm9000.o

在编译内核的模块时,将模块的编译划分为三类:

obj-y代表该模块以静态的方式编译进内核中

obj-m代表该模块被编译在内核之外,用到的时候需要手动加载

obj- 代表该模块不被编译

例如,drivers/net/Makefile根据auto.conf以静态的方式编译DM9000。

linux源码“.config”文件分析的更多相关文章

  1. Linux源码Kconfig文件语法分析

    Kconfig是我们进行内核配置的关键文件,用于生成menuconfig的界面并生成最终确定编译选项的.config文件.关于Kconfig文件的编写规则,在Documentation/kbuild/ ...

  2. vue源码入口文件分析

    开发vue项目有段时间了, 之前用angularjs 后来用 reactjs 但是那时候一直没有时间把自己看源码的思考记录下来,现在我不想再浪费这 来之不易的思考, 我要坚持!! 看源码我个人感觉非常 ...

  3. linux源码分析2

    linux源码分析 这里使用的linux版本是4.8,x86体系. 这篇是 http://home.ustc.edu.cn/~boj/courses/linux_kernel/1_boot.html  ...

  4. [C#] .NET Core项目修改project.json来引用其他目录下的源码等文件的办法 & 解决多框架时 project.json 与 app.config冲突的问题

    作者: zyl910 一.缘由 项目规模大了后,经常会出现源码文件分布在不同目录的情况,但.NET Core项目默认只有项目目录下的源码文件,且不支持"Add As Link"方式 ...

  5. .NET Core项目修改project.json来引用其他目录下的源码等文件的办法 & 解决多框架时 project.json 与 app.config冲突的问题

    作者: zyl910 一.缘由 项目规模大了后,经常会出现源码文件分布在不同目录的情况,但.NET Core项目默认只有项目目录下的源码文件,且不支持“Add As Link”方式引入文件.这时需要手 ...

  6. linux源码学习-for_each_cpu

    刚开始读linux源码,第一眼就看到了这个很有意思的函数族,周末好好研究一下 3.13 这个组都是宏定义for循环,分析的时候注意到cpumask_next(),它在一个文件中定义了两次,还不是重载, ...

  7. HTTP请求库——axios源码阅读与分析

    概述 在前端开发过程中,我们经常会遇到需要发送异步请求的情况.而使用一个功能齐全,接口完善的HTTP请求库,能够在很大程度上减少我们的开发成本,提高我们的开发效率. axios是一个在近些年来非常火的 ...

  8. 如何实现一个HTTP请求库——axios源码阅读与分析 JavaScript

    概述 在前端开发过程中,我们经常会遇到需要发送异步请求的情况.而使用一个功能齐全,接口完善的HTTP请求库,能够在很大程度上减少我们的开发成本,提高我们的开发效率. axios是一个在近些年来非常火的 ...

  9. qt creator源码全方面分析(3-3)

    目录 qtcreatordata.pri 定义stripStaticBase替换函数 设置自定义编译和安装 QMAKE_EXTRA_COMPILERS Adding Compilers 示例1 示例2 ...

随机推荐

  1. MySql中having字句对组记录进行筛选使用说明

    having字句可以让我们筛选成组后的各种数据 having的用法 having字句可以让我们筛选成组后的各种数据,where字句在聚合前先筛选记录,也就是说作用在group by和having字句前 ...

  2. hibernate sql查询

    如果你跟我一样比较熟悉SQL,同时不想学习一门新的语言.那么在hibernate中使用Native SQL 查询也是一种不错的方式. 一方面,Native SQL在效率方面有天生的优势: 另一方面,S ...

  3. <%%>与<%=%>区别

    1.<%= %>只能得到当前面定义的值.即你在这个页里有<% int a=100%>--你在下面才可以使用<%=a%>2.${ }这个是el表达式.可以从上下文中得 ...

  4. TortoiseSVN客户端重新设置用户名和密码[转]

    在第一次使用TortoiseSVN从服务器CheckOut的时候,会要求输入用户名和密码,这时输入框下面有个选项是保存认证信息,如果选了这个选项,那么以后就不用每次都输入一遍用户名密码了. 不过,如果 ...

  5. [Javascript] Immutable opreators

    slice filter map ...spread concat Object.assign let items = [1,2,3]; //add let newItems = [...items, ...

  6. Linux发送监控指标到内部邮箱

    数据库的健康监控是个很重要的工作.重要的指标\KPI监控结果会有专门的採集.监控.告警系统来做相关事情. 而一些不是很重要的或者还在设计和调试阶段的相关指标,我仅仅是想发送到我自己邮箱,本文就针对在s ...

  7. marquee 标签的使用详情

    <marquee>标签,它是成对出现的标签,首标签<marquee>和尾标签</marquee>之间的内容就是滚动内容.<marquee>标签的属性主要 ...

  8. spring注解:@PostConstruct和@PreDestroy

    关于在spring  容器初始化 bean 和销毁前所做的操作定义方式有三种: 第一种:通过@PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作 第二 ...

  9. angularjs 根据变量改变 动态加载模板

    directive return { restrict: 'E', replace: true, templateUrl: 'app/view/order.html', link: function ...

  10. 图像本地预览插件(基于JQUERY、HTML5)

    最近是被这项目搞疯了.害我天天写插件,上周才写,现在就继续吧..... 说说这个吧.主要是用于本地图像预览的.我们知道在以前,图像预览一般都很麻烦,一般都是异步上传然后返回路径,动态设置路径,但是这样 ...