gpt4 book ai didi

linux - 无效使用未定义类型 ‘struct nf_hook_ops’ - 内核模块编译错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:24:12 28 4
gpt4 key购买 nike

我有一个内核模块,我能够针对 native 运行的内核头文件 (4.4.0-21-generic) 成功编译。

这是生成文件:

vm@vm:~/Documents/kernelDev/Netfilter/skbuff_analyser$ cat Makefile
obj-m += sk_buff.o
all:
make -C /lib/modules/`uname -r`/build M=$(PWD) modules
clean:
make -C /lib/modules/`uname -r`/build M=$(PWD) clean

现在,我想针对另一个内核版本 4.5.3 编译同一个内核模块。我修改 Makefile 如下:

vm@vm:~/Documents/kernelDev/Netfilter/skbuff_analyser$ cat Makefile
obj-m += sk_buff.o
all:
make -C /lib/modules/4.5.3/build M=$(PWD) modules
clean:
make -C /lib/modules/4.5.3/build M=$(PWD) clean

但是,现在它没有获取 4.5.3 的 header 并且编译终止。

这里是/lib/modules的内容

vm@vm:/lib/modules$ ls -l
total 16
drwxr-xr-x 6 root root 4096 May 10 17:59 4.4.0-21-generic
drwxr-xr-x 3 root root 4096 May 10 20:09 4.5.3

还有,

我检查了 /lib/modules/4.5.3/build 的内容等同于 /lib/modules/4.4.0-21-generic/build

vm@vm:/lib/modules/4.5.3/build$ pwd
/lib/modules/4.5.3/build
vm@vm:/lib/modules/4.5.3/build$ ls
arch crypto firmware Kbuild MAINTAINERS Module.symvers scripts usr
block Documentation fs Kconfig Makefile net security virt
certs drivers include kernel mm README sound vmlinux
COPYING Fedora21-x86-root_fs init lib modules.builtin REPORTING-BUGS System.map vmlinux.o
CREDITS Fedora21-x86-root_fs2 ipc linux modules.order samples tools

更新

我看到,在针对新内核版本进行编译时,只有 linux/netfilter.h 中定义的结构和数据类型没有被选取。如果我在我的 c 文件中明确声明结构,那么错误就会消失。不知道这个头文件有什么问题。

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/netfilter.h>
#include <uapi/linux/netfilter.h>
#include <linux/netfilter_ipv4.h>
#include <linux/ip.h>
#include <linux/udp.h>
#include <linux/tcp.h>
#include <linux/if_ether.h> // for mac header
#include <linux/icmp.h>
#include <linux/netdevice.h>
#include <linux/inetdevice.h> // for inet_select_addr()
#include <linux/if.h>

/home/vm/Documents/kernelDev/Netfilter/skbuff_analyser/sk_buff.c:514:2: error: invalid use of undefined type ‘struct nf_hook_ops’
netfilter_ops_post_routing.priv = NULL;

最佳答案

好的,问题是我构建了我的内核,其中 .config 文件中的 CONFIG_NETFILER 标志没有设置,因此内核没有 NETFILTER 支持,尽管 netfilter.h 存在。

我用这个标志设置重建了内核并且能够编译 netfilter 模块。

关于linux - 无效使用未定义类型 ‘struct nf_hook_ops’ - 内核模块编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38039152/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com