1. 程式人生 > >linux源碼“.config”文件分析

linux源碼“.config”文件分析

deb bubuko con war gsp 意義 space 執行 例如

轉載於: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: dont 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: dont 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。

linux源碼“.config”文件分析