配置结果:生成.config .以配置项config_DM9000为例。
/linux-2.6.22.6$ vi .config;查看配置项:CONFIG_DM9000定义的位置
book@book-desktop:/work/other_board/linux-2.6.22.6$ grep "CONFIG_DM9000" * -nwR
1 c源码中定义 arch/arm/mach-s3c64xx/mach-mini6410.c CONFIG_DM9000(宏定义)
2 Makefile中 drivers/net/Makefile
子目录下的makefile:obj-$(CONFIG_DM9000) += dm9000.o
CONFIG_DM9000值起以下作用:
obj-y+=xxx.o 表示最终会编译进内核
obj-m+=yyy.o 表最终会编译成可加载模块.ko
3 include/config/auto.conf,由.config生成此文件, CONFIG_DM9000的值在此定义
config_linux_mini6410:778:CONFIG_DM9000=y (供子目录的makefile使用)
4 include/linux/autoconf.h
注:y 是编译到内核 m 是生成模块.ko n 是不编译
一. 首先生成必要的文件
我们知道配置内核之后会生成.config
在执行make uImage命令时会根据.config生成- include/config/auto.conf 文件
- include/linux/autoconf.h 文件
第二个文件是被内核源代码使用的,比如 arch/arm/plat-s3c24xx/common-smdk.c
二. 根据子目录makefile生成相应的内核或.ko
在子目录drive/net/Makefile里可以看到:
- obj-$(CONFIG_NET_NETX) += netx-eth.o
- obj-$(CONFIG_DL2K) += dl2k.o
- obj-$(CONFIG_R8169) += r8169.o
- obj-$(CONFIG_AMD8111_ETH) += amd8111e.o
- obj-$(CONFIG_IBMVETH) += ibmveth.o
- obj-$(CONFIG_S2IO) += s2io.o
- obj-$(CONFIG_MYRI10GE) += myri10ge/
- obj-$(CONFIG_SMC91X) += smc91x.o
- obj-$(CONFIG_SMC911X) += smc911x.o
- obj-$(CONFIG_DM9000) += dm9dev9000c.o
这句的意思是如果CONFIG_DM9000被定义成y,就把dm9000.c编译到内核;如果CONFIG_DM9000被定义成m,就把dm9000.c编译成.ko。
三. CONFIG_DM9000是在哪里定义的呢?
在 include/config/auto.conf 里有定义,这个文件是根据.config自动生成的.
- CONFIG_SPLIT_PTLOCK_CPUS=4096
- CONFIG_JFFS2_FS=y
- CONFIG_SENSORS_EEPROM=m
- CONFIG_MTD_NAND_S3C2410=y
- CONFIG_BLK_DEV_RAM=y
- CONFIG_PARPORT_1284=y
- CONFIG_VM_EVENT_COUNTERS=y
- CONFIG_INPUT_MOUSEDEV=y
- CONFIG_CPU_32v5=y
- CONFIG_BINFMT_AOUT=y
- CONFIG_DM9000=y