1、.config文件概述linux
.config文件是linux內核配置文件,當執行#make uImage編譯生成內核時,頂層的Makefile會讀取.config文件的內容,根據這個配置文件來編譯所定製的內核。 spa
2、.config文件關聯 code
1 文件關聯圖orm
以CONFIG_DM9000爲例進行說明。 blog
在#make menuconfig中選擇使用CONFIG_DM9000,而後在配置文件.config中就會有對應的項設置成爲y或者m。it
在#make uImage編譯內核時,頂層Makefile會根據.config的配置生成兩個配置文件:io
include/linux/autoconf.h編譯
include/config/auto.confform
其中,autoconf.h是C語言頭文件主要影響C文件的編譯。class
auto.conf會被頂層Makefile所包含,而後傳遞到底層Makefile中從而影響到底層文件的編譯。
2 關聯文件部份內容展現
一、.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
二、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文件。
三、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中的宏定義存在的意義。
四、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所包含,它會影響到模塊功能是否被添加,以何種方式添加。
五、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。