曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 5699|回复: 0
打印 上一主题 下一主题

内核编译相关文件

[复制链接]

4917

主题

5879

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34382
跳转到指定楼层
楼主
发表于 2011-4-19 12:51:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1. .config 文件
内核配置文件,由配置工具生成 .config 文件(如由 make menuconfig 设置后保存)。该文件由 CONFIG_XXX = Z 组成。其中 Z 有可能是以下值:
      y : 将对应模块编译进内核
      m : 将对应模块编译成可加载模块
      空 : 不编译进内核
      数字或字符串 : 可以传递到内核代码做参数
2. scripts/Makefile.*

这些 Makefile 文件定义了各种编译选项和编译规则,如 gcc, ld 的参数等。


3. 顶层 Makefile 文件
该文件接受 make xxx 命令,然后根据 xxx 做相应的操作,最主要的是编译出内核文件 vmlinux 和相关模块文件。比如 make menuconfig ,make bzImage, make vmlinux 等。


4. kbuild Makefiles
这些是分布在各个子目录下的 Makefile ,它们并不符合 GNU Makefile 的语法,为了区别通常意义上的 Makefile ,所以称它们为 kbuild Makefile 。它们的内容形式如 obj-$(CONFIG_XXX) += Z/ 或者 obj-$(CONFIG_XXX) += Z.o 。这里,obj-$(CONFIG_XXX) 会被替换成 obj-y 或 obj-m 或 obj- (当CONFIG_XXX 为空时)。Kbuild 会根据  obj-y+=z.o 把对应目录下的 z.c 编译成 z.o 。对于 obj-y += Z/ 会读取 Z/ 目录下的 Makefile --- 它依然是一个 Kbuild Makefile 。通过这个 Kbuild Makefile ,Kbuild 就可以对子目录 Z 进行递归处理了。这对于 boj-m 的情况也类似。


5. *.cmd 文件
把一个 .c 文件编译成一个 .o 文件后,如果再次编译,make 就会根据 .o 和 .c 文件的修改时间来判断是否需要再次编译 .c 文件。


当修改了 .config 文件或者编译的命令行参数或者依赖关系后,再次编译内核,make 只根据修改时间来判断是否需要重新编译是不够的,因为编译参数可能改变了。为了解决此问题,当编译链接每个文件时,kbuild 把编译时的依赖关系和编译链接的命令保存在对应的 .cmd 文件中。那么在下一次编译时,除了对比文件的修改时间外,还要根据 .cmd 文件保存的历史编译参数和依赖关系,来判断是否需要进行重新编译。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-4-29 18:28 , Processed in 0.060886 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表