什么是__KERNEL__用于linux内核?

时间:2011-01-20 08:09:28

标签: linux-kernel

谁可以解释以下代码的含义?

如果未定义__KERNEL__,请定义以下宏。 何时何地定义__KERNEL__

/* only for userspace compatibility */
#ifndef __KERNEL__

/* IP6 Hooks */
/* After promisc drops, checksum checks. */
#define NF_IP6_PRE_ROUTING  0
/* If the packet is destined for this box. */
#define NF_IP6_LOCAL_IN     1
/* If the packet is destined for another interface. */
#define NF_IP6_FORWARD      2
/* Packets coming from a local process. */
#define NF_IP6_LOCAL_OUT        3
/* Packets about to hit the wire. */
#define NF_IP6_POST_ROUTING 4
#define NF_IP6_NUMHOOKS     5
#endif /* ! __KERNEL__ */

3 个答案:

答案 0 :(得分:26)

编译内核时,在命令行中定义了__KERNEL__

用户空间程序需要访问内核头文件,但内核头文件中的某些信息仅适用于内核。在#ifdef __KERNEL__/#endif块中包含一些语句可确保用户空间程序不会看到这些语句。

答案 1 :(得分:7)

我使用Google搜索__KERNEL__并找到this

  

定义__KERNEL__宏是因为有程序(比如库)而不是包含内核代码,并且有许多事情你不希望它们包括在内。因此,大多数模块都希望启用__KERNEL__宏。

答案 2 :(得分:1)

在用户空间iptables应用程序(可能还有glibc和其他应用程序)中使用相同的代码,因此可以保护非内核代码。