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.