linux 模块 makefile,linux 模块 Makefile 分析

################################################################################

article: module Makefile Analysize

author: hjjdebug

date: Thu Nov 14 11:44:14 EST 2013

################################################################################

#

# Makefile for the linux RomFS filesystem routines.

#

$(warning KERNELRELEASE = $(KERNELRELEASE))

$(warning CONFIG_ROMFS_FS = $(CONFIG_ROMFS_FS))

ifneq ($(KERNELRELEASE),)

obj-$(CONFIG_ROMFS_FS) += romfs.o

romfs-y := storage.o super.o mem.o

ifneq ($(CONFIG_MMU),y)

romfs-$(CONFIG_ROMFS_ON_MTD) += mmap-nommu.o

endif

else

PWD := $(shell pwd)

KVER ?= $(shell uname -r)

KDIR :=/lib/modules/$(KVER)/build

all:

$(MAKE) -C $(KDIR) M=$(PWD)

clean:

-rm -rf *~ *.o *.ko module* Module* *.mod.* .*.cmd .tmp_versions/

endif

################################################################################

执行过程:

********************************************************************************

[root@hjj ~/software/romfs64]# make

Makefile:4: KERNELRELEASE =

Makefile:5: CONFIG_ROMFS_FS =

make -C /lib/modules/3.10.17/build M=/root/software/romfs64

make[1]: Entering directory `/usr/src/linux-3.10.17'

/root/software/romfs64/Makefile:4: KERNELRELEASE = 3.10.17

/root/software/romfs64/Makefile:5: CONFIG_ROMFS_FS = m

LD      /root/software/romfs64/built-in.o

CC [M]  /root/software/romfs64/storage.o

CC [M]  /root/software/romfs64/super.o

CC [M]  /root/software/romfs64/mem.o

LD [M]  /root/software/romfs64/romfs.o

Building modules, stage 2.

/root/software/romfs64/Makefile:4: KERNELRELEASE = 3.10.17

/root/software/romfs64/Makefile:5: CONFIG_ROMFS_FS = m

MODPOST 1 modules

CC      /root/software/romfs64/romfs.mod.o

LD [M]  /root/software/romfs64/romfs.ko

make[1]: Leaving directory `/usr/src/linux-3.10.17'

[root@hjj ~/software/romfs64]#

********************************************************************************

说明:

1. 两次读取 Makefile.

第一次,

KERNELRELEASE 没有定义, CONFIG_ROMFS_FS 也没有定义。

make 定义了宏M=$(PWD). 指示处理完后回到本目录执行,(注意,M 是大写, 否则达不到预期效果)

并进入kernel 目录执行特定的操作,source 指定的文件,读取相关变量。然后第二次source 了该makefile

第二次:

make 此时,KERNELRELEASE, CONFIG_ROMFS_FS 等变量已经定义,它执行上部分操作, 读走了obj-m, romfs-y 等

其他:

source 完两次makefile, 回到本目录继续执行,根据目标,内建规则,进行后续的编译,链接操作。

2. 根据以上描述。你可以去掉 KERNELRELEASE 宏, CONFIG_ROMFS_FS 宏等。当你明白他们的意图时。

3. module 的编译过程,可以用make V=1 看到输出,我是从编译busybox 时猜到的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值