для чего используется __KERNEL__ в ядре linux? - PullRequest
14 голосов
/ 20 января 2011

кто может объяснить, что означает следующий код?

, если __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 ]

27 голосов
/ 20 января 2011

Когда вы компилируете свое ядро, в командной строке определяется __KERNEL__.

Программам пользовательского пространства необходим доступ к заголовкам ядра, но некоторая информация в заголовках ядра предназначена только для ядра.,Заключение некоторых операторов в блок #ifdef __KERNEL__/#endif гарантирует, что программы пользовательского пространства не увидят эти операторы.

7 голосов
/ 20 января 2011

Я использовал Google для поиска __KERNEL__ и нашел этот .

Макрос __KERNEL__ определен, потому что есть программы (например,библиотеки), чем включать код ядра, и есть много вещей, которые вы не хотите их включать.Таким образом, большинство модулей хотят, чтобы макрос __KERNEL__ был включен.

2 голосов
/ 20 января 2011

Этот же код используется в приложении iptables для пользователя (и, возможно, glibc и других), поэтому существует защита для неядерного кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...