内核启动流程分析之配置

来源:互联网 发布:access转sqlserver 编辑:程序博客网 时间:2024/05/16 01:28

配置结果:生成.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生成
[cpp] view plaincopy
  1. include/config/auto.conf 文件  
  2. include/linux/autoconf.h 文件  
第一个文件是被子目录的Makefile使用的,比如drive/net/Makefile
第二个文件是被内核源代码使用的,比如 arch/arm/plat-s3c24xx/common-smdk.c

二. 根据子目录makefile生成相应的内核或.ko

在子目录drive/net/Makefile里可以看到:

[cpp] view plaincopy
  1. obj-$(CONFIG_NET_NETX) += netx-eth.o  
  2. obj-$(CONFIG_DL2K) += dl2k.o  
  3. obj-$(CONFIG_R8169) += r8169.o  
  4. obj-$(CONFIG_AMD8111_ETH) += amd8111e.o  
  5. obj-$(CONFIG_IBMVETH) += ibmveth.o  
  6. obj-$(CONFIG_S2IO) += s2io.o  
  7. obj-$(CONFIG_MYRI10GE) += myri10ge/  
  8. obj-$(CONFIG_SMC91X) += smc91x.o  
  9. obj-$(CONFIG_SMC911X) += smc911x.o  
  10. obj-$(CONFIG_DM9000) += dm9dev9000c.o  

这句的意思是如果CONFIG_DM9000被定义成y,就把dm9000.c编译到内核;如果CONFIG_DM9000被定义成m,就把dm9000.c编译成.ko。

三. CONFIG_DM9000是在哪里定义的呢?

在 include/config/auto.conf 里有定义,这个文件是根据.config自动生成的.

[cpp] view plaincopy
  1. CONFIG_SPLIT_PTLOCK_CPUS=4096  
  2. CONFIG_JFFS2_FS=y  
  3. CONFIG_SENSORS_EEPROM=m  
  4. CONFIG_MTD_NAND_S3C2410=y  
  5. CONFIG_BLK_DEV_RAM=y  
  6. CONFIG_PARPORT_1284=y  
  7. CONFIG_VM_EVENT_COUNTERS=y  
  8. CONFIG_INPUT_MOUSEDEV=y  
  9. CONFIG_CPU_32v5=y  
  10. CONFIG_BINFMT_AOUT=y  
  11. CONFIG_DM9000=y  
这样就完成了整个配置的生成。



0 0