Kernel: 宏:__KERNEL__

定义

定义在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会对用户开放一组头文件,很多头文件不需要做修改就可以被用户使用。但是有些不能直接导出,让用户使用,需要做一些处理:

  1. 去掉专用于内核的注解
  2. 去掉compiler.h 的引用,如果需要导出的头文件,include了这个compiler.h,就需要将这行include去掉
  3. 由__KERNEL__包围的内容,这些只有内核内部使用。不会提供给用户使用

猜你喜欢

转载自blog.csdn.net/qq_36428903/article/details/126197329