linux内核配置:Linux内核配置文件之解读
Makefile
疯狂代码 http://www.crazycoder.cn/ ĵ:http:/www.crazycoder.cn/Linux/Article28489.html
一、Makefile 初探
Linux的内核配置文件有两个,一个是隐含的.config文件,嵌入到主Makefile中;另一个是
include//autoconf.h,嵌入到各个c源文件中,它们由make config、make menuconfig、make xconfig这
些过程创建。
几乎所有的源文件都会通过/config.h而嵌入autoconf.h,如果按照通常方法建立文件依赖关系
(.depend),只要更新过autoconf.h,就会造成所有源代码的重新编绎。
为了优化make过程,减少不必要的重新编绎,Linux开发了专用的mkdep工具,用它来取代gcc来生成
.depend文件。mkdep在处理源文件时,忽略linux/config.h这样的头文件,识别源文件宏指令中具有
"CONFIG_"特征的行。
例如,如果有"#ifdef CONFIG_SMP"这样的行,它就会在.depend文件中输出$(wildcard
/usr/src/linux/include/config/smp.h)。
include/config/下的文件是另一个工具split-include从autoconf.h中生成,它利用autoconf.h中的
CONFIG_标记,生成与mkdep相对应的文件。例如,如果autoconf.h中有"#undef CONFIG_SMP"这一行
,它就生成include/config/smp.h文件,内容为"#undef CONFIG_SMP"。这些文件名只在.depend文件中
出现,内核源文件是不会嵌入它们的。
每配置一次内核,运行split-include一次。split-include会检查旧的子文件的内容,确定是不是要更新它
们。这样,不管autoconf.h修改日期如何,只要其配置不变,make就不会重新编绎内核。
如果系统的编绎选项发生了变化,Linux也能进行增量编绎。为了做到这一点,make每编绎一个源文件时
生成一个flags文件。例如编绎sched.c时,会在相同的目录下生成隐含的.sched.o.flags文件。它是Makefile的
一个片断,当make进入某个子目录编绎时,会搜索其中的flags文件,将它们嵌入到Makefile中。
这些flags代码测试当前的编绎选项与原来的是不是相同,如果相同,就将自已对应的目标文件加入
FILES_FLAGS_UP_TO_DATE列表,然后,系统从编绎对象表中删除它们,得到FILES_FLAGS_CHANGED列表
,最后,将它们设为目标进行更新。