리눅스 커널에서 원하는 코드를 간단히 살펴보기에는 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

-rw-r--r--   1 rookiecj rookiecj 28820669 Nov  1 14:47 tags

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()


ctag 설정
143 "-----------------------------------------------------------------------"
144 " ctags db path 설정
145 "-----------------------------------------------------------------------"
146 set tag=./tags;/


이제 vim에서 cscope와 ctag를 통해 symbol간에 이동을 해보자

$ vim -t kmalloc


Happy Coding~:)

+ Recent posts