第3阶段——内核启动分析之make menuconfig内核配置

Posted NQian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第3阶段——内核启动分析之make menuconfig内核配置相关的知识,希望对你有一定的参考价值。

目标:

分析make menuconfig内核配置过程

 

在上1小结中(内核编译试验)讲到了3种不同的配置:

(1)通过make menuconfig 直接从头到尾配置.config文件

(2) 通过make s3c2410_deconfig 命令在默认的配置上进行自动修改.config文件

(3)使用厂家提供的配置config_ok文件覆盖.config文件

所以,所有的配置结果都是配置.config文件

 

 

1 linux下通过vi指令查看.config内核配置文件

 

如上图所示:就是一堆配置项: CONFIG_XXX=y/CONFIG_XXX=m/ CONFIG_XXX=n

=y:表示编进内核

=m:表示编译成模块,提供动态加载

=n:表示不参与编译

输入grep “CONFIG_DM9000”  -nwR   (grep指令详细介绍入口链接http://www.cnblogs.com/lifexy/p/7009706.html)

可以看到4个地方在使用它

(1) include/linux/autoconf.h中定义宏DM9000

include/linux/autoconf.h:129:#define CONFIG_DM9000 1

然后通过vi include/linux/autoconf.h得到,不管menuconfig中是y/m/n, autoconf.h所有宏都等于1,C源码使用

 

(2)C源码里通过判断autoconf.h的宏DM9000

arch/arm/plat-s3c24xx/common-smdk.c:46:#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)
arch/arm/plat-s3c24xx/common-smdk.c:162:#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)
arch/arm/plat-s3c24xx/common-smdk.c:250:#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)

(3)在include/config/auto.conf设置COMFIG_DM9000=y,供./drivers/net/ Makefile使用

include/config/auto.conf:128:CONFIG_DM9000=y

通过vi include/config/auto.conf如下图可以看出,.config配置文件非常相似, 它被顶层Makefile包含,被子目录Makefile使用

 

(4)在./drivers/net/ 子目录Makefile中添加DM9000文件到obj-$(CONFIG_DM9000)中,其中CONFIG_DM9000=y,所以编译进内核中.

drivers/net/Makefile:197:obj-$(CONFIG_DM9000) += dm9dev9000c.o

drivers/net/Makefile:198:#obj-$(CONFIG_DM9000) += dm9000.o

drivers/net/Makefile:199:#obj-$(CONFIG_DM9000) += dm9ks.o

因为make uImage编译内核刚开始时,内核会根据.config自动生成auto.confautoconf.h这两个文件( 其中autoconf.h是供c源码使用(宏开关),而auto.conf被顶层Makefile包含,供子目录Makefile使用)

 

2.通过子目录Makefile得出:
如果auto.conf中CONFIG_xxx=y,对应的源码文件会被Makefile编译进内核;
如果auto.conf中CONFIG_xxx=m,对应的源码文件会被Makefile编译成xxx.ko模块文件
如果auto.conf中CONFIG_xxx=n,对应的源码文件不会被makefile编译;

 

接下来分析Makefile来找到内核编译过程,明白make uImage做了什么

 

以上是关于第3阶段——内核启动分析之make menuconfig内核配置的主要内容,如果未能解决你的问题,请参考以下文章

第3阶段——内核启动分析之创建si工程和启动内核分析

第3阶段——内核启动分析之start_kernel初始化函数

第3阶段——内核启动分析之挂载根文件系统和mtd分区介绍

内核启动分析

Linux移植之内核启动过程引导阶段分析

内核启动12