리눅스 커널에서 원하는 코드를 간단히 살펴보기에는 grep으로도 충분하지만 코드를 따라가며 분석하기 위해서는 cscope와 ctag의 도움을 받는게 좋다.
1. cscope, ctags db 생성
kernel은 이미 cscope와 ctag을 지원하고 있다.
$ make ARCH=arm cscope tags
$ ls -l
-rw-r--r-- 1 rookiecj rookiecj 325846 Nov 1 14:32 cscope.files
-rw-r--r-- 1 rookiecj rookiecj 30724513 Nov 1 14:33 cscope.out
-rw-r--r-- 1 rookiecj rookiecj 4008960 Nov 1 14:33 cscope.out.in
-rw-r--r-- 1 rookiecj rookiecj 88721056 Nov 1 14:33 cscope.out.po
2. vim 설정
vim을 실행하는 디렉토리에 cscope db파일이 존재하면 자동으로 로딩하는 스크립트를 추가한다.
$ vi ~/.vimrc
148 "-----------------------------------------------------------------------"
149 " cscope db path 설정
150 " http://vim.wikia.com/wiki/Autoloading_Cscope_Database
151 "-----------------------------------------------------------------------"
152 function! LoadCscope()
153 let db = findfile("cscope.out", ".;")
154 if (!empty(db))
155 let path = strpart(db, 0, match(db, "/cscope.out$"))
156 set nocscopeverbose " suppress 'duplicate connection' error
157 exe "cs add " . db . " " . path
158 set cscopeverbose
159 endif
160 endfunction
161 call LoadCscope()
이제 vim에서 cscope와 ctag를 통해 symbol간에 이동을 해보자
$ vim -t kmalloc
Happy Coding~:)