:),你看到这里也许会露出些许微笑, 你还记得那个 "-include include/config/auto.conf".没错,针对你的make命令,GNU Make在处理任何目标之前,它一定会努力的为我们生成文件 include/cofig/auto.conf ,用的就是这里的这条对应规则.注意这里的细节,GNU Make同样也会努力重新用上面这条规则去生成 include/config/auto.conf.cmd 文件,可是无奈上面这条规则既没有依赖,又没有命令, GNU Make 是怎么也没办法生成 auto.conf.cmd.那么 auto.conf.cmd 文件又是从什么地方生成呢?答案是在生成 include/config/auto.conf 的时候.稍后,我们会看到,它同样在这个时候生成了另外一个文件 include/linux/autoconf.h.
拥有帝国一切,皆有可能。欢迎访问phome.net
既然已经说到这几个文件了,那我就预先来回答一下上面提出来的问题.什么问题?就是配置过程 产生了用于记载配置结果的 .config ,那么其中的配置结果由谁使用,又是如何使用的问题.我们说在整个Linux内核系统中,有两方面的用户需要关注所记载的配置结果.一个自然是内核构建系统,它需要根据配置结果产生具有指定功能的内核映像;另外一个就是大部分代码为C语言代码的Linux内核本身,它也需要用户的配置结果,主要用来预处理C代码.前者使用配置结果,并不是直接通过 .config 文件来的,而是将其转换成两个文件:include/config/auto.conf 和 include/config/auto.conf.cmd.后者也没办法直接通过 .config 文件来使用配置结果,它需要将其转换成C语言头文件的形式使用,在这里就是文件 include/linux/autoconf.h .关于这三个文件的内容,我们稍后叙述.
还是回到上面处理 auto.conf 的规则中来,变量 KCONFIG_CONFIG 指代的就是配置文件 .config .目标 auto.conf 依赖于 .config 和 auto.conf.cmd .当GNU Make使用这条规则来remake auto.conf的时候,这两个文件即使不存在也没有关系. 这样的话,GNU Make 会 有上面这条没有依赖也没有命令的规则而认为这两个依赖是最新的, 此时auto.conf规则的命令总是会被得到执行.
这是有意思的地方, 这是不是意味着我可以在一个刚刚解压出来的Linux内核目录中直接用命令 "make ARCH=arm CROSS_COMPILE=arm-linux- zImage"来完成构建呢?咱们试一下:
拥有帝国一切,皆有可能。欢迎访问phome.net
从结果看前面都没问题,直到用conf进行 一步的配置时出现了错误.至于错误原因呢,是 找不到文件 .config .我们可以找出出现错误的代码,就在文件scripts/kconfig/conf.c 的main函数中,如下所示的代码片段:
if (sync_kconfig) {
name = conf_get_configname()
拥有帝国一切,皆有可能。欢迎访问phome.net
关于对上面框架代码E部分中和 .config 文件无关目标的处理,这里限于篇幅,我们就不再多讲,您可自己研究.
【注意,全文可至这里浏览: http://yihect.juliantec.info/julblog//post/4/20】
本文出自 “巨立安技术老师写的文章” 博客,请务必保留此出处http://juliantec.blog.51cto.com/2773953/500223
拥有帝国一切,皆有可能。欢迎访问phome.net |