当前位置: 技术问答>linux和unix
各位大侠,我想编译一个多文件内核模块,但是无论怎么编,tcp_phas.c这个文件总是不编译(我在这个里面写上乱行不报错),下面是两个方法,请指教。
来源: 互联网 发布时间:2016-09-06
本文导语: 各位大侠,我想编译一个多文件内核模块,但是无论怎么编,tcp_phas.c这个文件总是不编译(我在这个里面写上乱行不报错),下面是两个方法,请指教。 下面是方法一: KERNEL_PATH = /usr/src/kernels/2.6.18-8.el5-i686/ CURRE...
各位大侠,我想编译一个多文件内核模块,但是无论怎么编,tcp_phas.c这个文件总是不编译(我在这个里面写上乱行不报错),下面是两个方法,请指教。
下面是方法一:
KERNEL_PATH = /usr/src/kernels/2.6.18-8.el5-i686/
CURRENT_PATH = $(shell pwd)
obj-m = tcp_phas.o
tcp_phas-objs = user.o tcp_conn.o usr_conns.o usr_reso_auth.o
all:
make -C $(KERNEL_PATH) M=$(CURRENT_PATH) modules
clean:
make -C $(KERNEL_PATH) M=$(CURRENT_PATH) clean
======================================================================
方法2:
ifneq ($(KERNELRELEASE),)
# call from kernel build system tcp_phas.o
obj-m := tcp_phas.o
tcp_phas-objs := user.o tcp_conn.o usr_conns.o usr_reso_auth.o
#obj-m := tcp_phas.o
else
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif
clean:
rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions
下面是方法一:
KERNEL_PATH = /usr/src/kernels/2.6.18-8.el5-i686/
CURRENT_PATH = $(shell pwd)
obj-m = tcp_phas.o
tcp_phas-objs = user.o tcp_conn.o usr_conns.o usr_reso_auth.o
all:
make -C $(KERNEL_PATH) M=$(CURRENT_PATH) modules
clean:
make -C $(KERNEL_PATH) M=$(CURRENT_PATH) clean
======================================================================
方法2:
ifneq ($(KERNELRELEASE),)
# call from kernel build system tcp_phas.o
obj-m := tcp_phas.o
tcp_phas-objs := user.o tcp_conn.o usr_conns.o usr_reso_auth.o
#obj-m := tcp_phas.o
else
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif
clean:
rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions
|
obj-m = tcp_phas.o
tcp_phas-objs = user.o tcp_conn.o usr_conns.o usr_reso_auth.o
名字错了
obj-m = xxxx.o (do not use tcp_phas here)
xxxx-objs = user.o tcp_conn.o usr_conns.o usr_reso_auth.o tcp_phas.o
tcp_phas-objs = user.o tcp_conn.o usr_conns.o usr_reso_auth.o
名字错了
obj-m = xxxx.o (do not use tcp_phas here)
xxxx-objs = user.o tcp_conn.o usr_conns.o usr_reso_auth.o tcp_phas.o
|
tcp_phas-objs = user.o tcp_conn.o usr_conns.o usr_reso_auth.o
改成:
tcp_phas-objs = user.o tcp_conn.o usr_conns.o usr_reso_auth.o tcp_phas.o
改成:
tcp_phas-objs = user.o tcp_conn.o usr_conns.o usr_reso_auth.o tcp_phas.o
|
obj-m = tcp_phas.o
tcp_phas-objs = user.o tcp_conn.o usr_conns.o usr_reso_auth.o
tcp_phas.o是依赖于tcp_phas-objs的,而后者依赖的是那四个.o文件,与你的tcp_phas.c没有关系。想知道为什么,可以研究一下Documentation/kbuild/makefiles.txt。
看了一下内核树的源代码Makefile,都是直接用obj-y += tcp_phas.o这样来的,没有tcp_phas-objs = hello.o这样用。
tcp_phas-objs = user.o tcp_conn.o usr_conns.o usr_reso_auth.o
tcp_phas.o是依赖于tcp_phas-objs的,而后者依赖的是那四个.o文件,与你的tcp_phas.c没有关系。想知道为什么,可以研究一下Documentation/kbuild/makefiles.txt。
看了一下内核树的源代码Makefile,都是直接用obj-y += tcp_phas.o这样来的,没有tcp_phas-objs = hello.o这样用。