linux源碼“.config”文件分析


一、.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   2  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   2  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。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM