内核编译(三):内核配置分析

    在上节,我们用make menuconfig对内核进行了配置,那么,这一过程是怎么去实现的呢?我们知道,在我们make menuconfig的时候,是会读取其目录下的.config文件的(如果该文件存在的话,如果没有,在配置完成时也会生成这样的一个文件)。我们首先看一下..config文件里的内容:


我们看到,里面有不少配置项,其有些值是y,有些值是m,什么意思呢?其实,当其值等于y时,就表示该功能会被编译进内核中,当其值为m时,就表示该功能会被当作模块来使用,需要时可以加载。在编译Linux内核的时候,会根据,config这个文件,生成两个文件,一个是autoconf.h,一个是auto.conf,这两个文件的内容是什么呢?又有什么作用呢?我们一个个看。

    首先,我们看到autoconf.h这个文件,在./include/linux这个目录里:


我们看到,在这个文件里,很多的项都被定义成了1,这些项也就是我们在编译内核前时.config文件里的配置项。但是,在.config文件里,有些配置项的值是y,有些是m,这怎么体现出来呢?我们看到autoconf.h里,有些项后面有MODUEL后缀:


这样,我们就可以分出它是y还是m了。那么 这个文件有什么用呢?对于配置文件里的配置项,是不能直接用于C语言代码中的,把它转换成一个头文件里的宏定义形式,我们就可以在C语言中去使用这些配置项的值了。

    接下来,我们再看auto.conf这个文件,它在./include/config这个目录里


可以看到,这个文件和.config文件就非常像了,值是y或者m。那么,这个文件有什么用呢?其实,这个文件是给Makefile用的。怎么知道呢?我们可以打开某个子目录的Makefile,比如/drivers/net下的Makefile,并搜索CONFIG_DM9000这一项:

扫描二维码关注公众号,回复: 882298 查看本文章


可以看到,这里它是被注释掉了,说明应该是不支持这一项的,我们可以看其他的。对于配置项的值,为y或者m,所以这里面变量其实就两个:obj-y或obj-m。对于obj-y里的文件,最终会被链接到内核里。对于obj-m里的文件,则最终会编译成.ko文件,最终作为模块。

    以上就是所有的配置过程分析了!

猜你喜欢

转载自blog.csdn.net/xiaokangdream/article/details/80192249