《kernel源码分析(一)配置和编译过程》

1.内核的配置和编译

cp arch/arm/configs/xx_defconfig   .config
make menuconfig
make uImage

 

2.了解内核的配置过程和编译过程

  在内核的配置过程中,会生成文件.config。

  以网卡DM9000为例:

  在.config中可以找到”CONFIG_DM9000=y“,这表示这个模块会被编译进内核。“CONFIG_DM9000=m”,这表示模块会被编译成.ko文件,可以动态的加载到内核。

  在内核顶层目录对CONFIG_DM9000进行查找:

grep "CONFIG_DM9000"  -rn  .   咨询一下为什么不能查找出include下的

  可以看出在ARM架构中有4个文件中包含它

  • arch/arm/plat-s3c24xx/commod-smdk.c(源C)
  • drivers/net/Makefile(子目录的makefile)
  • include/config/auto.confg
  • include/linux/autoconf.h

  打开/drivers/net/Makefie。可以查找到“obj-$(CONFIG_DM9000) += dm9000.o”。$(CONFIG_DM9000)意思是根据CONFIG_DM9000的定义来决定是否编译dm9000.o。而auto.conf中就是对该宏进行定义,在auto.conf中可以查看到“CONFIG_DM9000=y”,所以makefile中的就可以扩展成obj-y += dm9000.o。就表示将模块编译进内核。如果"CONFIG_DM9000=m",就是将模块编译成.ko文件。auto.conf最终会被顶层的Makefile所包含。

  所以include/config/auto.conf里面定义的宏是用于Makefile中的。

  autoconf.h是个头文件,因此很明显是用于源C中的。里面有各种宏定义的定义。

  而autoconf.h和auto.conf是当make menuconfig的时候生成的。

  总结:make menuconfig----->生成auto.conf和autoconf.h

     auto.conf----->用于Makefile来决定是否编译该模块(y的时候是编译进内核,m的时候是编译成模块)

     autoconf.h----->用于源C的时候,定义了源码中相关的宏定义

 

posted @ 2019-09-04 19:52  一个不知道干嘛的小萌新  阅读(505)  评论(0编辑  收藏  举报