我正在编写一个需要访问sk_buff
变量的内核模块。但是当我写的时候
#include <linux/skbuff.h>
Netbeans 说它无法找到该头文件。
答案1
/usr/include/linux
即使您安装了内核头文件,也故意不安装该头文件。这是因为该标头中定义的内容不是内核稳定 ABI 的一部分;内核开发人员可以在任意两个版本之间更改该标头中的任何内容,因此您必须引用特定于您希望驱动程序链接到的内核版本的标头。
对于 2.6+ 内核,通过使用更容易获得正确的行为标准内核驱动Makefile方案而不是通过尝试对 Netbeans 施加压力。 2.6+ 驱动程序构建系统做了很多为您提供的东西,比您从 Netbeans 等“易于使用”的 IDE 中获得的还要多。
也许您可以两全其美。有些 IDE 允许您将其用作美化的编辑器,但将构建委托给外部make
工具。
如果您绝对必须在 Netbeans 中完成所有操作,那么您可以像我们为 2.4 及更早版本的内核构建驱动程序一样进行操作。基本上,您最终会引用内核源代码本身中的头文件目录。用 GNU Makefile 来说,你会得到这样的东西:
KERNPATH=/usr/src/kernels/$(shell uname -r)
CFLAGS=-I$(KERNPATH)/include
在 Netbeans 中做同样的事情可能会很困难甚至不可能:
Netbeans 可能无法
uname -r
在 IDE 中运行 shell 命令()作为构建过程的一部分,并使用其输出替换构建其余部分中使用的变量。内核源代码路径因 Linux 发行版而异。使用 Makefile,您只需编写一个 shell 脚本即可动态地发现此类本地详细信息,但我怀疑您是否可以使用 Netbeans 做到这一点。对于我在编写此答案时碰巧检查过的一种 Red Hat 类型系统,上面的路径是正确的。然后我检查了 Ubuntu 系统并发现了相同的文件
/usr/src/linux-headers-$(uname -r)/include
。在新的 2.6 内核驱动程序构建系统开发出来之前,还没有这方面的标准。