When you compile your kernel, __KERNEL__ is defined on the command line.
User-space programs need access to the kernel headers, but some of the info in kernel headers is intended only for the kernel. Wrapping some statements in an#ifdef __KERNEL__/#endif block ensures that user-space programs don't see those statements.
example:
in the user space ,if you want to include the header using ‘#ifdef __KERNEL__ XXXX', you should define the __KERNEL__.
/*为了引用kernel中的数据结构,我常用如下样式include那些服务于内核的头文件*/
#ifdef __KERNEL__
#include <linux/list.h>
#include <linux/mm.h>
#undef __KERNEL__
/*将两种类型的头文件隔离开来*/
#include <stdio.h>
#include <errno.h>
本文深入探讨了Linux内核中__KERNEL__宏的定义及其在用户空间程序与内核代码之间的隔离作用。通过具体实例展示了如何在用户空间程序中正确使用该宏,以确保访问内核头文件时的正确性和安全性。
858





