定义
定义在kernel的Makefile文件中
这个宏是在build c预处理源文件时就会有的一个宏定义;
KBUILD_CPPFLAGS := -D__KERNEL__
这个KBUILD_CPPFLAGS,借鉴于make的机制:
CPPFLAGS Extra flags to give to the C preprocessor and programs that use it (the C and Fortran compilers).
用途
这个定义的用途是什么?
就是为非kernel编译提供一个可选方案,
就是为非kernel编译提供一个可选方案,对于非kernel编译,需要不同的引用,设计。
要看对这个宏定义的非存在使用。举个例子:
kernel/bpf/disasm.h
看这个的含义就是在非kernel编译时,使用标准glibc库函数。
#ifndef __KERNEL__
#include <stdio.h>
#include <string.h>
#endif
导出头文件给用户用
另一个用途:/Documentation/kbuild/makefiles.txt
对于导出的头文件。kernel会对用户开放一组头文件,很多头文件不需要做修改就可以被用户使用。但是有些不能直接导出,让用户使用,需要做一些处理:
- 去掉专用于内核的注解
- 去掉compiler.h 的引用,如果需要导出的头文件,include了这个compiler.h,就需要将这行include去掉
- 由__KERNEL__包围的内容,这些只有内核内部使用。不会提供给用户使用