Chinaunix首页 | 论坛 | 博客
  • 博客访问: 593096
  • 博文数量: 158
  • 博客积分: 2696
  • 博客等级: 少校
  • 技术积分: 1668
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-10 00:49
个人简介

life?is?short?,?play?more!

文章分类

全部博文(158)

文章存档

2021年(1)

2013年(10)

2012年(4)

2011年(11)

2010年(27)

2009年(28)

2008年(52)

2007年(25)

我的朋友

分类: LINUX

2008-12-26 16:30:30

描述linux kernel 的makefile的组织结构,什么是linux kernel 和 makefile 不用说了。

1. 概述

kernel的makefile分为5个部分:

Makefile 最外面的Makefile
.config kernel的配置文件
arch/$(ARCH)/Makefile 不同架构cpu的makefile
scripts/Makefile.* 规则文件
kbuild Makefiles 500多个makefile文件

来看看kbuild makefile文件的构造规则定义。kbuild文件是组织kernel选项的文件。你会看到kbuild 和makefile 在一般同时存在一个目录里的。

目标定义:

一般都会用到此定义,此行的目的是要编译成foo.o 文件,而源文件是默认的foo.c或者是foo.s 。源文件在kbuild文件的同级目录里。

obj-y += foo.o

如果要将此编译成一个模块,则需要用ojb-m 。如果想通过kernel的配置传递此参数,则需要写下面的。

obj-$(CONFIG_FOO) += foo.o

(CONFIG_FOO) 就是你在kernel选项里配置的,如果你没有选中是built-in 还是 module,则此变量是y 或者 m的其他值,则不会编译此文件。


built-in 目标文件:

当你obj-y 的时候,他们将会把所有的obj-y files 都编译进去一个大的 built-in.o 目标文件。此后,会根据最上层的Makefile 链接成一个kernel image。

        #drivers/isdn/i4l/Makefile
# Makefile for the kernel ISDN subsystem and device drivers.
# Each configuration option enables a list of files.
obj-$(CONFIG_ISDN) += isdn.o
obj-$(CONFIG_ISDN_PPP_BSDCOMP) += isdn_bsdcomp.o
需要注意的是,您需要注意这些 目标文件的顺序。
因为一些函数例如(module_init() / __initcall) 是按照他们出现的顺序被调用的。

ojb-m 目标:

这个是指要编译成模块。一个模块可以由一个源文件或者多个组成。

例如:
        #drivers/isdn/i4l/Makefile
obj-$(CONFIG_ISDN) += isdn.o
isdn-objs := isdn_net_lib.o isdn_v110.o isdn_common.o

isdn-objs 就是将后面所有的目标文件会link到isdn.o 里。
同样isdn-y 也是一样的规则。如果可以让用户配置的则需要这么写。

#fs/ext2/Makefile
obj-$(CONFIG_EXT2_FS) += ext2.o
ext2-y := balloc.o bitmap.o
ext2-$(CONFIG_EXT2_FS_XATTR) += xattr.o

这种情况下,
$(CONFIG_EXT2_FS_XATTR) 是y的时候,哪么xattr.o 才会被和其他的2个目标文件一起link到
ext2.o 里。

链接到一个库:

#arch/i386/lib/Makefile
lib-y := checksum.o delay.o

此行的含义标示 将会将此描述的目标文件最后连接到 built-in.o 和 一个 lib.a 文件。

进入下一级文件夹的操作:

一个Makefile 只是负责本目录里文件的编译目标文件的工作。

如果子文件夹的文件需要被照顾到,则需要让父目录的Makefile 给如进入下一级文件夹的入口,则编译的时候会
自动进入下一级目标。

例如:

#fs/Makefile
obj-$(CONFIG_EXT2_FS) += ext2/





阅读(781) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~