一、.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. Http(2)

    1.传递的请求参数如何获取 GET方式: 参数放在URI后面 POST方式: 参数放在实体内容中 核心的API: request.getParameter("参数名");  根据参 ...

  2. SQL SERVER 查询死锁

    USE mastergo CREATE PROCEDURE [dbo].[sp_who_lock]AS     BEGIN        DECLARE @spid INT ,             ...

  3. MyEclipse10搭建Strust2开发环境

    一.创建一个JavaWeb项目 启动MyEclipse10    ,然后在MyEclipse中创建一个JavaWeb项目,点击[File]---->[New]---->[WebProjec ...

  4. mysql 学习笔记5-- 数据库优化

    ext4:(rw,noatime,nodiratime,nobarrier,data=ordered)xfs: (rw,noatime,nodiratim,nobarrier,logbufs=8,lo ...

  5. careercup-数组和字符串1.5

    1.5 利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能.比如,字符串”aabcccccaaa“会变成”a2b1c5a3“.若”压缩“后的字符串没有变短,则返回原先的字符串. 类似 le ...

  6. CPP: 跨平台生成GUID/UUID

    #ifndef XGUID_H#define XGUID_H #include <string>#include <stdio.h>#ifdef WIN32#include & ...

  7. android开发之Parcelable使用详解

    想要在两个activity之间传递对象,那么这个对象必须序列化,android中序列化一个对象有两种方式,一种是实现Serializable接口,这个非常简单,只需要声明一下就可以了,不痛不痒.但是a ...

  8. ASP.NET基础之HttpContext学习

    一:HttpContext理论知识: 1:HttpContext类它对Request.Respose.Server等等都进行了封装,并保证在整个请求周期内都可以随时随地的调用:为继承 IHttpMod ...

  9. springmvc使用aop心得

    第一步:创建aop拦截类: @Component @Aspect public class ControllerSelectorInterceptor { @Before("executio ...

  10. jq版本更新后无live函数的处理.

    之前你的代码如果是$("#ele").live("click", function() {    //...});现在要写成$("#ele" ...