一、.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. Codeigniter数据库操作

    //查询: $query = $this->db_query("SELECT * FROM table"); ================================ ...

  2. Linux中的文件压缩,打包和备份命令

    压缩解压命令 gzip  文件   -c : 将压缩数据输出到屏幕,可用来重定向 -v   显示压缩比等信息 -d   解压参数 -t    用来检验一个压缩文件的一致性看看档案有没错 -数字 : 压 ...

  3. 一、两种方式初始化Mybatis

    一.xml Configuration.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTY ...

  4. CoreJava_线程并发(堵塞队列):在某个目录下搜索含有某keyword的文件

    Java多线程编程是很考验一个程序猿水平的. 传统的WEB程序中.由于框架提供了太多的健壮性.并发性.可靠性的支持,所以我们都是将全部的注意力放到了业务实现上.我们不过依照业务逻辑的要求.不停的积累自 ...

  5. extern用法总结!

    extern 在源文件A里定义的函数,在其他源文件中是看不见的(即不能訪问).为了在源文件B里能调用这个函数,应该在B的头部加上一个外部声明: extern   函数原型: 这样,在源文件B里也能够调 ...

  6. [R] Draw a wordcloud

    # 加载rJava.Rwordseg库 library(rJava); library(Rwordseg); library(RColorBrewer); # == 读入数据 lecture=read ...

  7. python 用pdb调试

    简单调试 Python 程序   在 Python 中也可以像 gcc/gdb 那样调试程序,只要在运行 Python 程序时引入 pdb 模块(假设要调试的程序名为 d.py): $ vi d.py ...

  8. (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间

    亲测一: 1.找到D:\MyEclipse 8.5\configuration\ config.ini 这个文件 2.找到这一行instance.area.default 3.将后面的地址替换为你想要 ...

  9. CocoaPods导入第三方库头文件自动补齐

    使用了一段时间CocoaPods来管理Objective-c的类库,方便了不少.但是有一个小问题,当我在xcode输入import关键字的时候,没有自动联想补齐代码的功能,需要手工敲全了文件名,难以适 ...

  10. mysql的limit、order by和group by的用法

    程序执行会重复 用mysql很长时间,limit是分页的一个好工具, select * from table_a where num = 4 limit 1,10, select * from tab ...