linux源码“.config”文件分析

转载于:http://www.cnblogs.com/amanlikethis/p/3641097.html

一、.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  16:21:56 2014 # 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=4 # 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[] = {         [0] = {                 .start  = 0x20300000,                 .end    = 0x20300002,                 .flags  = IORESOURCE_MEM,         },         [1] = {                 .start  = 0x20300004,                 .end    = 0x20300006,                 .flags  = IORESOURCE_MEM,         },         [2] = {                 .start  = IRQ_PF10,                 .end    = IRQ_PF10,                 .flags  = (IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE | IRQF_SHARED | IRQF_TRIGGER_HIGH),         }, };
static struct platform_device dm9000_device = {     .id                 = 0,     .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  16:22:04 2014 # 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。

一、.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  16:21:56 2014 # 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=4 # 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[] = {         [0] = {                 .start  = 0x20300000,                 .end    = 0x20300002,                 .flags  = IORESOURCE_MEM,         },         [1] = {                 .start  = 0x20300004,                 .end    = 0x20300006,                 .flags  = IORESOURCE_MEM,         },         [2] = {                 .start  = IRQ_PF10,                 .end    = IRQ_PF10,                 .flags  = (IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE | IRQF_SHARED | IRQF_TRIGGER_HIGH),         }, };
static struct platform_device dm9000_device = {     .id                 = 0,     .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  16:22:04 2014 # 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。

猜你喜欢

转载自www.cnblogs.com/baiduboy/p/9977453.html
今日推荐