이번 주는 휴식하고, 다음주부터 본격적으로 커널 분석을 시작합니다.

 

소스 분석 도구는 각자 익숙한 도구를 사용하면 되겠지요.

 

윈도우 환경이 익숙하시다면 source insight(유료)를 쓰시거나 slickedit, eclipse 등 편한 IDE를 사용하시면 될 것 같습니다.

 

 

저는 리눅스 터미널에서 vimcscopeplugin 연동해 쓰는 게 편합니다.

vim, cscope, ctagstaglist.vim, The NERD tree, srcexpl.vim을 추가로 사용합니다.

 

 

1. vim

vim 사용법은 구글링 하시면 잘 정리된 문서들도 있고,

'손에 잡히는 vim'이 한글로 쉽게 쓰여졌다고 알고 있습니다.

 

일단 기본적인 커서 이동, 편집 관련 명령만 익히고 필요할 때마다 부가 기능을 익히고 있습니다.

 

 

2. ctags

ctags는 이름에서 알 수 있듯 키워드에 대해 tag파일을 생성하고, 그것으로 source를 브라우징 하는 도구입니다.

 

배포판 저장소에서 ctags 패키지를 설치하고, 아래 내용을 $HOME/.vimrc에 등록해 사용하고 있습니다.

------------------------------------------------------------------------------------------------

" ctags plugin

"set tags=./tags,../tags,../../tags,../../../tags,../../../../tags

set tag=./tags;/

------------------------------------------------------------------------------------------------

 

tags 파일은 분석할 소스의 $(TOPDIR)에서 ctags -R로 생성합니다.

 

쉘에서 man tags, 또는 vim 내에서 :help tags를 입력해 도움말을 얻으면 됩니다.

 

 

3. cscope

cscopectags과 함께 강력한 소스 브라우저 도구입니다.

vim, ctags, cscope만 사용해도 주로 사용하는 필요한 브라우징은 다 됩니다.

 

배포판 도구를 사용해 cscope 패키지를 설치하고, 환경변수를 등록한 후

export CSCOPE_EDITOR=vim

 

아래 내용을 mkcscope.sh로 만들어 PATH 잡힌 디렉토리에 넣어두고,

분석할 소스 디렉토리의 $(TOPDIR)에서 mkcscope.sh 명령을 입력하여 사용하고 있습니다.

 

------------------------------------------------------------------------------------------------

#!/bin/bash

rm -rf cscope.files cscope.out

 

find `pwd` \( -name '*.c' -o -name '*.cpp' -o -name '*.cc' -o -name '*.h' -o -name '*.s' -o -name '*.S' \) -print > cscope.files

 

cscope -i cscope.files

------------------------------------------------------------------------------------------------

 

vimcscope를 연동해 사용하기 위해 다음 파일을 다운로드 받아 $HOME/.vim/plugin 디렉토리에 넣어두고 사용하면 편리합니다.

http://cscope.sourceforge.net/cscope_maps.vim

 

(키워드 위에서 Cntl + \ + 명령의 조합으로 search가 가능합니다. plugin 디렉토리가 없다면 직접 만드시고요)

 

 

커널은 Makefile에서 tags, cscope 생성 옵션을 제공해 주므로 mkcscope.sh 실행할 필요없이

다음과 같이 입력하면 생성 가능합니다. (iamroot 강좌/팁 게시물 참고)

$ make ARCH=arm tags cscope

 

 

4. vim plugin

여기에 source insight와 같은 효과를 내기 위해 다음 툴들을 사용합니다.

srcexpl, taglist, NERD_tree

 

순서대로

source insight처럼 화면에 함수, 타입 정의 보여주기,

tags 파일을 바탕으로 파일에서 사용하는 심볼을 리스트 형식으로 보여주기,

디렉토리 탐색 기능 강화

입니다.

 

vim 사이트를 보시면 각 플러그인 파일과 설치 방법이 잘 나와 있습니다.

http://www.vim.org/scripts/script.php?script_id=273

http://www.vim.org/scripts/script.php?script_id=1658

http://www.vim.org/scripts/script.php?script_id=2179

 

구글링 해보시면 각각 한글로 정리된 문서들이 있습니다.

plugin 파일을 $HOME/.vim/plugin에 다운 받고, .vimrc에 환경변수를 등록해 사용하는 패턴은 동일합니다.

 

위 세가지 플러그인을 설치하고, 세 플러그인들을 함께 관리하기 위한 trinity라는 플러그인도 있습니다.

저는 오히려 불편해서 사용하지 않고 있지만요.

 

 

다음은 제가 사용하는 .vimrc 파일입니다.

------------------------------------------------------------------------------------------------

"help OPTION

 

syntax on

 

set encoding=utf-8

set fileencodings=utf-8,euc-kr

 

"탭 하나의 크기를 4로 설정

set tabstop=4

set shiftwidth=4

set softtabstop=4

 

set autoindent

"TABspace로 치환

"set expandtab

"Display line number

set number

"numberwidth

set numberwidth=8

 

"소스 폴딩

"set foldmethod=marker

 

 

"하단에 상태 표시줄

set laststatus=2

set statusline=%<%F%h%m%r%h%w%y\ %{strftime(\"%Y/%m/%d-%H:%M\")}%=\ col:%c%V\ ascii:%b\ pos:%o\ lin:%l\,%L\ %P

 

"붙이기 모드로 전환

set paste

 

"마우스 사용

"set mouse=an

 

"highlight previous search pattern

set hlsearch

 

"show cursor line

set cursorline

 

color torte

 

"Ignore Case

" set ic

"Clipboard

set cb=unnamed

"show match bracket

"set showmatch

"set matchtime=5

 

 

"Window Fix Width

"set wfw

"set wfh

 

 

 

if &term =~ "xterm"

if has("terminfo")

set t_Co=8

set t_Sf=^[[3%p1%dm

set t_Sb=^[[4%p1%dm

else

set t_Co=8

set t_Sf=^[[3%dm

set t_Sb=^[[4%dm

endif

endif

 

" Taglist plugin

filetype on

nnoremap <silent> <F2> :TlistToggle<CR>

let Tlist_Ctags_Cmd = "/usr/bin/ctags"

let Tlist_Inc_Winwidth = 0

let Tlist_Exit_OnlyWindow = 0

let Tlist_Auto_Open = 0

let Tlist_Use_Right_Window = 1

 

" Source Explorer plugin

nnoremap <silent> <F3> :SrcExplToggle<CR>

 

"nmap <F8> :SrcExplToggle<CR>

nmap <C-H> <C-W>h

nmap <C-J> <C-W>j

nmap <C-K> <C-W>k

nmap <C-L> <C-W>l

 

let g:SrcExpl_winHeight = 8

let g:SrcExpl_refreshTime = 100

let g:SrcExpl_jumpKey = "<ENTER>"

let g:SrcExpl_gobackKey = "<SPACE>"

let g:SrcExpl_isUpdateTags = 0

 

 

" NERDTree plugin

let NERDTreeWinPos = "left"

nnoremap <silent> <F4> :NERDTreeToggle<CR>

" nmap <F9> :NERDTreeToggle<CR>

 

 

" ctags plugin

"set tags=./tags,tags,../tags,../../tags,../../../tags,../../../../tags

set tag=./tags;/

------------------------------------------------------------------------------------------------

 

 

.bash_profile에 다음을 추가합니다.

------------------------------------------------------------------------------------------------

TERM=xterm-color

export CSCOPE_DB=/tmp/cscope.out

------------------------------------------------------------------------------------------------

 

 

저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

Comment



티스토리 툴바