2.1分析内核启动——查看配置文件.config

时间:2024-03-15 07:58:28

我们知道make menuconfig的菜单是在.config文件中查找配置

里面有很多配置项为y(加入配置)、m(以模块形式加入,如有一些驱动)。像我们的DM9000(网卡)就是配置为y

2.1分析内核启动——查看配置文件.config

2.1分析内核启动——查看配置文件.config

2.1分析内核启动——查看配置文件.config

 

我们随便搜一个配置,如CONFIG_DM9000,grep "CONFIG_DM9000" * -nwR

会发现这四个文件

  • (c源码)arch/arm/mach-at91/board-sam9261ek.c:79:#if defined(CONFIG_DM9000)

  • (子目录makefile)drivers/net/Makefile:197:obj-$(CONFIG_DM9000) += dm9dev9000c.o

  • include/config/auto.conf:143:CONFIG_DM9000=y

  • include/linux/autoconf.h:144:#define CONFIG_DM9000 1

c文件中使用到了CONFIG_DM9000的宏,那么这个宏是在哪里定义,显然对于c语言,宏只能在c文件或者h文化定义。是在include/linux/autoconf.h:144:#define CONFIG_DM9000 1中定义。这里我们可以猜测include/linux/autoconf.h是自动生成的,内容来源与.config。autoconf.h里面的内容都是1。就是说不管配置项是y还是m,最后生成的autoconf.h里都被定义为1

2.1分析内核启动——查看配置文件.config

                 (autoconf.h)

那么y和m的差别体现在哪里呢——子目录的Makefile中

2.1分析内核启动——查看配置文件.config

这里的意思是obj  -$(CONFIG_DM9000)的值编译成dm9dev9000c.o。

显然$(CONFIG_DM9000)可能是有分y和m的,在include/config/auto.conf中被定义,果然,里面有m和y的定义

2.1分析内核启动——查看配置文件.config

           (auto.conf)

到现在我们知道了,y和m的差别在子目录的Makefile中体现

obj  -y +=xxx.o (编译进内核里去)

obj -m +=xxx.o(最后会被编译成可加载模块xxx.ko)

 

还可以知道这两个文件

include/config/auto.conf:143:CONFIG_DM9000=y(被子目录Makefile用到)

include/linux/autoconf.h:144:#define CONFIG_DM9000 1(被c函数用到)

都是由.config生成的

 

下一节进入分析内核的Makefile