当前位置: 技术问答>linux和unix
能否只编译kernel的一个文件?
来源: 互联网 发布时间:2016-03-30
本文导语: 如果要编译Linux kernel, 我看到不少介绍都是整个kernel来编译的。 我的情况是,只想抽取某个文件来编译,但又碰到诸多问题。例如,我只想编译linux/fs/ocfs2/journal.c. 我设置好C_INCLUDE_PATH=linux/include,在linux/fs/ocfs2 下面...
如果要编译Linux kernel, 我看到不少介绍都是整个kernel来编译的。
我的情况是,只想抽取某个文件来编译,但又碰到诸多问题。例如,我只想编译linux/fs/ocfs2/journal.c.
我设置好C_INCLUDE_PATH=linux/include,在linux/fs/ocfs2 下面 gcc journal.c,返回很多错误信息,诸如struct ocfs2_super has no member named'node_num', 'mask' undeclared.
要怎么做才能只编译一个文件呢?整个kernel来编译的话,太耗时了。而我只需要用到这个文件里面的某一个函数。希望指点迷津。谢谢!
我的情况是,只想抽取某个文件来编译,但又碰到诸多问题。例如,我只想编译linux/fs/ocfs2/journal.c.
我设置好C_INCLUDE_PATH=linux/include,在linux/fs/ocfs2 下面 gcc journal.c,返回很多错误信息,诸如struct ocfs2_super has no member named'node_num', 'mask' undeclared.
要怎么做才能只编译一个文件呢?整个kernel来编译的话,太耗时了。而我只需要用到这个文件里面的某一个函数。希望指点迷津。谢谢!
|
直接gcc journal.c ,当然不行.
用下面的 Makefile 试试 .
# If KERNELRELEASE is defined, we've been invoked from the
# kernel build system and can use its language.
ifneq ($(KERNELRELEASE),)
obj-m := journal.o
# Otherwise we were called directly from the command
# line; invoke the kernel build system.
else
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif
用下面的 Makefile 试试 .
# If KERNELRELEASE is defined, we've been invoked from the
# kernel build system and can use its language.
ifneq ($(KERNELRELEASE),)
obj-m := journal.o
# Otherwise we were called directly from the command
# line; invoke the kernel build system.
else
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif
|
用原来的makefile,make journal.o试试