VSCode를 이용한 Linux Kernel 분석
참고: https://joolib.tistory.com/18
VSCode를 이용한 Linux Kernel 분석 방법에 대해 정리합니다.
Extention Backup: https://github.com/cyber93/linux-kernel-vscode
VSCode를 이용한 Linux Kernel 분석
Linux OS가 설치된 PC상에 VSCode를 설치하고 아래 소개된 Extention을 이용합니다.
1. C/C++
Linux Kernel은 수많은 파일들로 구성되어 있습니다.
파일 내에 호출되는 함수의 정의로 이동하기 위해 C/C++ Extension을 설치합니다.
이것을 설치하면 아래 그림과 같이 정의로 이동 기능이 활성화됩니다.
2. C++ Intellisense & GNU Global
많은 아키텍처와 파일들로 구성되어 있기에 정확한 곳을 찾는 것이 중요합니다.
함수 정의로 이동과 함께 함수의 참조를 확인하는 기능을 추가하기 위해 C++ Intellisense Extenstion을 설치합니다.
이 Extension을 사용하기 위해서 Code Tagging 툴인 GNU Global을 설치합니다.
GNU Global을 설치한 후에 Linux Kernel이 설치된 폴더로 이동하여 다음 명령어를 입력합니다.
gtags
Tagging에 시간이 좀 걸린 후, GPATH, GRTAGS, GTAGS 파일이 생성됩니다.
VSCode를 재실행하며, 이 세 파일을 사용하여 함수의 참조를 알려 줍니다.
Peek Definition을 통해 다음과 같이 호출된 파일과 호출된 횟수를 확인할 수 있습니다.
global 명령
함수를 찾기 위해서 global 명령어를 사용합니다.
#global 함수이름 global start_kernel
다음과 같은 결과를 출력합니다.
arch/alpha/boot/bootp.c arch/alpha/boot/bootpz.c arch/alpha/boot/main.c init/main.c
심볼 이름을 모르는 경우, 다음과 같이 일부만 작성하여 확인할 수 있습니다.
-c는 해당 Prefix로 시작하는 심볼을 출력합니다.
global -c kmem
다음과 같은 결과를 출력합니다.
kmem_alloc kmem_alloc_io kmem_alloc_large kmem_cache kmem_cache_alloc kmem_cache_alloc_bulk kmem_cache_alloc_node kmem_cache_alloc_node_trace kmem_cache_alloc_trace kmem_cache_cpu kmem_cache_create kmem_cache_create_usercopy ... kmemleak_seq_start kmemleak_seq_stop kmemleak_stop kmemleak_test_exit kmemleak_test_init kmemleak_update_trace kmemleak_vmalloc kmemleak_warn kmemleak_write
3. GitLens
Linux Kernel 분석에 필요한 Extention을 추가로 설치합니다.
코드에 마우스를 올리면 커밋 내용을 볼 수 있습니다.