.config에 따라 필요하지 않은 모든 코드가 생략 된 제거 된 커널 소스를 얻으려면 (gcc 전 처리기를 악용하여) 효율적인 방법이 있습니까?.config에 따라 Linux 커널 소스를 제거하십시오.
답변
글쎄 솔루션에 몇 가지 단계가있어.
첫째, 하나는 내가 추가 단계에 대해 하나 개의 GCC 명령 행을 선택, 지금
make KBUILD_VERBOSE=1 | tee build.log
grep '^ gcc' build.log
에 의해 사용 된 컴파일러 명령을 얻을 수 있습니다. 지금 옵션 -c
, -o ...
를 제거하고 -E
를 추가하여 컴파일을 해제하고 화면에 전 처리기 출력을 작성
gcc <LIST OF MANY OPTIONS> -c -o kernel/kmod.o kernel/kmod.c
: 같은 예를 들어 커널/kmod.c의 빌드, 그것은 보인다. 또한 매크로 확장을 방지하기 위해 -fdirectives-only
을 추가하고 -undef
은 GNU 정의 매크로 정의를 제거합니다. -nostdinc
표준 커널 헤더를 제거하려면 커널 메이크 파일에서 이미 추가되어 있어야합니다.
이제 includes가 여전히 포함되어 전 처리기 출력으로 확장됩니다. 따라서 grep을 통해 입력 파일을 파이프 처리하여 파이프를 제거합니다 : grep -v '#include' kernel/kmod.c
. 이제 하나의 include 만 남아 있습니다 : autoconf.h는 Makefile의 명령 행에 포함됩니다. 이것은 실제로 활성 커널 코드를 선택하기 위해 #ifdef CONFIG_...
이 사용하는 매크로를 정의하므로 유용합니다.
남아있는 유일한 문제는 grep -v '^#'
을 사용하여 전 처리기 주석과 나머지 #define
을 autoconf.h에서 필터링하는 것입니다. 실제로 kmod.o.에 구축되어있는 코드를 포함하는 커널/kmod.c의 필터링 된 버전이
grep -v '#include' kernel/kmod.c | gcc -E -fdirectives-only -undef <ORIGINAL KERNEL BUILD GCC OPTIONS WITHOUT -c AND -o ...> - |grep -v '^#'
및 결과 : 같은
전체 파이프 본다
질문 : 전체 소스 트리에 대해 어떻게해야합니까? 실제로 빌드되었지만 결코 사용되지 않고 연결 해제 된 파일이 있습니까?
모든 것을 컴파일하고 atime을 사용하여 사용되지 않은 파일을 찾습니다. 그것은 매우 정확하지는 않지만 아마도 시도할만한 가치가있을 것입니다.
- 1. Xcode에서 iPad 소스를 제거하십시오.
- 2. Linux 커널 타이머 변경
- 3. Linux 커널 모듈 디버깅
- 4. Linux 커널 디버그 출력물?
- 5. linux 커널 aio 기능
- 6. Linux 커널 - 블록 번호를 프로그래밍 방식으로 검색합니다.
- 7. Linux 커널 dentry 및 inode
- 8. KVM을 사용한 Linux 커널 개발
- 9. Linux 커널 모듈 프로파일 링
- 10. 비 커널 헤더를 포함하여 Linux 커널 (2.6) 모듈을 컴파일
- 11. Linux 커널 코드에 .S 파일 추가
- 12. Linux 커널 모듈 - 보안 위험이 있습니까?
- 13. Linux 커널 모듈의 파일 I/O
- 14. 시스템에 다른로드가없는 syscalls 차단 (Linux 커널)
- 15. 커널 공간에서 Linux syscall을 호출하려면 어떻게합니까?
- 16. Linux 커널 기능을 모듈로 바꿀 수 있습니까?
- 17. linux 커널 내의 PID에서 프로세스 이름을 얻습니다.
- 18. Linux 커널에서 inode 가져 오기 커널
- 19. C를 사용하여 Linux 커널 버전을 읽으시겠습니까?
- 20. Linux 커널 모듈 : try_module_get/module_put을 사용할 때
- 21. 메모리 무결성을 검사하는 Linux 커널 모듈
- 22. 링크에 따라 데이터 소스를 어떻게 변경해야합니까?
- 23. Linux 커널 모듈 (Ubuntu)을 통해 커널 메모리에 쓸 수 없습니다.
- 24. Linux 커널 모듈에서 파일을 읽거나 쓰는 방법은 무엇입니까?
- 25. Linux 커널 또는 udev에서 하드웨어 변경 이벤트 수신
- 26. TCP 혼잡 제어에서 TCP 헤더에 액세스 Linux 커널 모듈
- 27. Linux 커널 모듈/드라이버와 비교할 때 UMDF 이해
- 28. Linux 커널 모듈 timer_list를 사용하면 시스템이 손상 될 수 있습니다.
- 29. linux 용 커널 모듈을 만드는 데 필요한 설명서/설명서가 있습니까?
- 30. Linux 커널 모듈에서 실행 파일 페이지를 할당하는 방법은 무엇입니까?
많은 #ifdef ... 문이 소스 파일 내에서 평가되므로 사용하지 않는 파일과 거의 사용되지 않는 파일도 컴파일되므로이 작업을 수행 할 수 없습니다. – dronus
@dronus : 그게 내가 생각할 수있는 유일한 간단한 방법이다 (다음은 기본적으로 C 전처리기를 작성하거나 수정하는 것이다). 사용하지 않는 모듈과 아치 같은 것을 제거해야합니다. 좀 더 정확 해지기를 정말로 필요합니까? 무엇을 성취하려고합니까? –
글쎄, 나는 커널이 어떻게 작동하는지에 대한 약간의 개요를 얻고 싶지만 백개의 MB를 읽는 것은 거의 불가능하다. 그래서 최소한의 커널을 만들고 실제 사용 된 코드를 읽는 것을 좋아합니다. – dronus