最近阅读Linux-2.6.32的jbd模块代码,为了弄清楚jbd的执行流程,我在jbd模块的导出函数的入口处加了printk输出。然后就需要重新编译Linux的内核代码。大家知道,完全编译Linux整个内核代码需要的时间比较长。由于jbd是一个单独的模块,那能不能将这个模块进行单独编译呢?
当然可以!方法如下:
1.首先将jbd的代码(在Linux源码/fs/jbd目录)整个拷贝出来;
2.将jbd代码中的Makefile进行修改:
原Makefile的内容如下:
#
# Makefile for the linux journaling routines.
#
obj-$(CONFIG_JBD) += jbd.o
jbd-objs := transaction.o commit.o recovery.o checkpoint.o revoke.o journal.o
修改后的Makefile如下:
# Makefile for jbd
TARGET = jbd
OBJECT = transaction.o commit.o recovery.o checkpoint.o revoke.o journal.o
ifneq ($(KERNELRELEASE),)
#kbuild syntax.
obj-m += $(TARGET).o
$(TARGET)-objs := $(OBJECT)
else
PWD := $(shell pwd)
KERNEL_DIR := /lib/modules/`uname -r`/build
all : modules
modules:
$(MAKE) -C $(KERNEL_DIR) M=$(PWD) modules
install:
install ./$(TARGET).ko /usr/local/lib
/sbin/insmod ./$(TARGET).ko
uninstall:
rm -f /usr/local/lib/$(TARGET).ko
/sbin/rmmod $(TARGET).ko
insmod:
/sbin/insmod ./$(TARGET).ko
rmmod:
/sbin/rmmod $(TARGET).ko
clean:
rm -rf .*.cmd *.o *.mod.c *.ko .tmp_versions Module.markers modules.order Module.symvers
endif
3.编译模块:
$ make
4.加载模块:
$sudo make insmod
5.卸载模块:
$sudo make rmmod