首先,了解一下内核的配置编译过程会有什么文件产生:
对内核进行配置的时候,我们通常会选择arch/arm/configs目录下相似的某一个defconfig文件:
cp xxx_defconfig .config
再make menuconfig重新配置自己需要的。
这两个命令之后,会得到你需要的.config文件。
而auto.conf和autoconf.h是在执行内核编译命令:
make uImage或make zImage之后根据.config自动生成的。
总体过程如下:
生成.config
编译内核:make uImage
自动生成-> ① auto.conf ②autoconf.h(宏)
①-include include/config/auto.conf提供给顶层Makefile使用。
②include/linux/autoconf.h提供给内核C源码使用。
任意选择一个配置项进行分析,举例CONFIG_DM9000。
这个配置项包含在四个文件中:
注意,在C源码文件中出现的CONFIG_DM9000是宏,而子目录Makefile中的 CONFIG_DM9000是作为配置项出现的。
那么配置过程就可以从两个角度来进行理解:
1.从Makefile的角度:
->obj-y,静态编译进内核;
->obj-m,动态编译进内核,即模块;
在auto.conf中看到的都是这样的配置项:
CONFIG_CPU_S3C244X=y
CONFIG_CPU_COPY_V4WB=y
CONFIG_DEBUG_USER=y
CONFIG_MMC_S3C=y
CONFIG_CRYPTO_MD5=y
auto.conf被包含于顶层Makefile中,供子目录下的Makefile使用。
2.从内核源码的角度:
内核源码中有许多的“判断语句”(即官方语言:条件指示符),内核如何知道需要把哪些条件指示符所包含的内容编译进内核呢?先看一下autoconf.h中的内容:
#define CONFIG_CPU_S3C244X 1
#define CONFIG_CPU_COPY_V4WB 1
#define CONFIG_DEBUG_USER 1
#define CONFIG_MMC_S3C 1
#define CONFIG_CRYPTO_MD5 1
可以发现这都是定义“宏”,是给内核源码使用的。
参考文章地址为:https://blog.csdn.net/qq_32220231/article/details/52928885,在此对原作者表示感谢。