只提供构建的linux源代码的工具

只提供构建的linux源代码的工具

Linux 是一个大型复杂的软件。系统中正在运行的内核不会使用所有代码。

我正在寻找一个工具,它可以为我提供用于.config构建内核所需的源代码。我希望它删除 s 跳过的所有行ifdef和未用于构建的源文件,甚至是文件夹内的文件drivers

有这样的工具吗?

我寻找这个的原因是我不确定内核中实际构建了哪些代码。我同意我可以手动完成它,但我认为没有不需要的 ifdef 会让我对代码有更清晰的理解。

答案1

Linux 内核的配置最终定义了 C 编译器的预处理器指令。预处理源的输出应该接近您正在寻找的内容,尽管也可能存在被编译器优化掉的死代码。

gcc可以告诉编译器使用(然后停止)将预处理输出生成到stdout -E

  -E  Stop after the preprocessing stage; do not run the compiler
      proper.  The output is in the form of preprocessed source code,
      which is sent to the standard output.

对于整个内核,合并编译器标志可能更容易--save-temps

   -save-temps
   -save-temps=cwd
       Store the usual "temporary" intermediate files permanently; place
       them in the current directory and name them based on the source
       file.  Thus, compiling foo.c with -c -save-temps would produce
       files foo.i and foo.s, as well as foo.o.  This creates a
       preprocessed foo.i output file even though the compiler now
       normally uses an integrated preprocessor.

       When used in combination with the -x command line option,
       -save-temps is sensible enough to avoid over writing an input
       source file with the same extension as an intermediate file.  The
       corresponding intermediate file may be obtained by renaming the
       source file before using -save-temps.

相关内容