+ 커널 소스 트리
디렉토리설명
arch특정 아키텍처와 관련된 소스
block블록 입출력 계층
crypto암호화 API
Documentation커널 소스 문서
drivers장치 드라이버
firmware특정 드라이버를 사용할 때 필요한 장치 펌웨어
fs가상 파일 시스템 및 개별 파일시스템
include커널 헤더 파일
init커널 시작 및 초기화 관련 코드
ipc프로스세스 통신 관련 코드
kernel스케줄러와 같은 핵심 커널 서브시스템
lib유틸리티 루틴
mm메모리 관리 서브시스템 및 가상 메모리
net네트워크 서브시스템
samples예제, 데모 코드
script커널을 빌드하는 데 사용하는 스크립트
security리눅스 보안 모듈
sount사운드 서브시스템
usr초기 사용자 공간 코드 initramfs
tools리눅스 개발에 유용한 도구
virt가상화 기반 구조


저작자 표시 비영리 변경 금지
신고

Comment


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

 

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

 

윈도우 환경이 익숙하시다면 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

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

 

 

저작자 표시 비영리 변경 금지
신고

Comment

ex) int -> string 형변환

string s = "test";

1) Convert.ToString(s.Length);

2) s.Length.ToString();

 

ex) string -> int 형변환

int i = 7;

convert.ToInt32(i);


저작자 표시 비영리 변경 금지
신고

Comment



티스토리 툴바