270 likes | 367 Views
ULKML – 1 Study 환경 구축 및 개발 툴 사용법 정리. 2011-09-30. 목 차. Study 환경 구축 사용할 Kernel 소 스 분석 툴. Study 환경 구축. ubuntu-11.04 server 설치 접속 방식 SSH, 220.67.126.xxx 최신 Linux Kernel Source 얻기 $> git clone git ://github.com/sfrothwell/linux-next.git linux /i386 3.1.0-rc7. Kernel 소스 분석 툴.
E N D
ULKML – 1Study 환경 구축 및 개발 툴 사용법 정리 2011-09-30
목 차 • Study 환경 구축 • 사용할 Kernel 소스 분석 툴
Study 환경 구축 • ubuntu-11.04 server 설치 • 접속 방식 SSH, 220.67.126.xxx • 최신 Linux Kernel Source 얻기 • $> git clone git://github.com/sfrothwell/linux-next.git • linux/i386 3.1.0-rc7
Kernel 소스 분석 툴 • VIM • ctags • cscope • vim
VIM • charityware : 무료로 사용할 수 있게 하는 대신 자선 단체 기부를 부탁 하는 소프트웨어 • 기회가 된다면 우간다의 가난한 아이를 위해 기부하자
VIM • 키보드 만으로 모든 코딩 활동을 할 수 있기 때문에 집중도가 높아 진다.
VIM • 이동 • (표준) hjkl : 방향키 • (표준) w : 다음 단어의 첫 글자 b : 이전 단어의 첫 글자 • (표준) ^ : 행의 끝으로 이동 $ : 행의 처음으로 이동 • (표준) H, M, L : 커서를 화면의 맨 위, 중앙, 맨 아래로 이동 • (표준) z(enter), z., z- : 현재 행을 화면의 맨 위, 중앙, 맨 아래로 이동 • (표준) ctrl + u, b : 반 화면 위로 스크롤, 아래로 스크롤 • (표준) ctrl + b, f : 한 화면 위로 스크롤, 아래로 스크롤 • (표준) gg, 1G : 문서의 맨 첫 행으로 이동 • (표준) G : 문서의 맨 아래로 이동 • (표준) [n]G : n번째 행으로 이동 • (명령라인모드) :[n] : n번째 행으로 이동
VIM - 편집 • 삭제, 복사 • (표준) x : 현재 커서 위치의 한 글자 삭제 • (표준) dw : 커서 위치의 한 단어 삭제 • (표준) dd : 한 행을 삭제 • (표준) D, d$ : 커서 위치부터 행의 끝까지 삭제 • (표준) yw : 현재 커서 위치의 한 단어 복사 • (표준) yy : 커서 위치의 한 행을 복사 앞에 숫자를 넣으면 그 명령 앞의 숫자 만큼 반복하는 규칙이 있다.
VIM - 편집 • VI의 레지스터 • “ “ 레지스터 : 바로 이전에 지워진 내용 • “0 ~ “9 레지스터 : 지워진내용이 큐 형식으로 들어감. • “. 레지스터 : 최근까지 타이핑한 내용 • “: 레지스터 : 최근에 명령라인에 입력한 내용 • “% 레지스터 : 현재 편집하는 파일 명 • “/ 레지스터 : 가장 최근에 검색한 문자열 • a~z까지 사용자가 지정할 수 있는 레지스터
VIM - 편집 • 잘라내기와 붙여 넣기 • (표준) “[n]p : n에 해당하는 레지스터에 있는 내용 붙여 넣기 • 블록 지정 • (표준) v : 블록 지정 • (표준) d, y :복사, 잘라내기 • (표준) U, u : 대문자, 소문자로 만듬
VIM - 편집 • 되돌리기와 되살리기 • (표준) u : 되돌리기 • (표준) ctrl + r : 되살리기 • 문자열 탐색 • (표준) / [문자열]: 문자열을 정방향 탐색한다. • (표준) ? [문자열] :문자열을 역방향 탐색 한다. • 위 상황에서 n, N : 다음 문자열, 이전 문자열 탐색
VIM - 편집 • 문자열 치환 • (명령라인) %s/old/new/g : 문서에 있는 모든 old 문자열을 new문자열로 바꾼다. • [범위]/[매칭 문자열]/치환 문자열]/[행 범위] • [범위] • %s : 문서 전체 범위 • 2, 4s : 2행 ~ 4행사이의 범위 • -1, +3s : 현재 커서부터 위로 1행아래로 3행의 범위 • [행 범위] • g : 전체 행에 걸쳐 치환 • 없을 경우 : 한 행에 여러 개의 매칭 문자열이 있더라도 한번만 치환 • gc : 매칭되는 문자열에 대해 치환 할 것인지 사용자에게 물어봄
VIM – 여러 파일 편집 • 여러 파일 열기 • vim file1.c file2.c file3.c 혹은 • vim *.c • 각각의 열린 파일은 VIM의 파일 버퍼로 이동. • (명령라인) ls : 현재 열려있는 파일 확인 • (명령라인) b[버퍼 번호] : 버퍼간 화면 전환 • (명령라인) sb[버퍼 번호] : 창을 수평 분할해서 버퍼 열기
VIM – 여러 파일 편집 • 다중 창 사용하기 • (표준) ctrl + w (ctrl 떼고)n : 새로운 창이 가로로 분할 된다. • (표준) ctrl + wv: 현재 편집중인 창이 수직 분할 된다. • (표준) ctrl+ww : 커서간 창 이동 • (표준) ctrl+w_ : 현재 작업 중인 수평 창을 최대로 • (표준) ctrl+w| : 현재 작업 중인 수직 창을 최대로 • (표준) ctrl+w= : 균등 분할된 상태로 맞춤
VIM – 유용한 기능 • 마킹으로 이동 • 커서의 특정 위치를 임의의 문자로 마킹해 나중에 표시한 위치로 한번에 돌아가기. • (표준) m[임의의 알파벳] : 마킹할때 • (표준) ‘[임의의 알파벳] : 마킹된 위치로 이동 • 전역 마킹( A – Z ) : 현재 파일+ 다른 파일간의 마킹이 가능 • 지역 마킹( a – z ) : 현재 파일 내에서만 마킹이 가능 • (명령라인) marks : 마킹 정보확인
VIM – 유용한 기능 • 파일 탐색 기능 • (명령라인) 20vs ./ : 디렉토리 명으로 파일을 열게 되면 해당 디렉토리에 있는 파일들이 브라우징 됨. 커서를 움직여서 선택하면 해당 파일이 열린다. • 빠른 괄호 이동 및 빠른 탐색 • 복잡한 if 나 while문이 중첩 되어 있을 경우 {}의 범위를 알아보기 쉽지 않다. 이때 • {,} 기호 에서 (표준) % : 쌍을 이루는 {,} 로 커서가 이동 된다. • 찾으려는 문자열에서 (표준) *, # : 빠른 문자열 검색 기능
VIM – 유용한 기능 • 폴딩 기능 • 함수가 많은 경우 함수를 접어 보기 편하게 해주는 기능 • 함수 시작 부분에 있는 { 위에 커서를 두고 • (표준) v]}zf : 함수를 접는다. • 혹은, 함수를 블록으로 잡고 (표준) zf • 키가 복잡 하므로, vimrc파일에 다음과 같은 내용을 추가해 단축 키를 지정 한다. • map <F1> v]}zf • (표준) zo : 커서 위치의 접힌 부분을 편다. • map <F2> zo
VIM – 유용한 기능 • VIM에서 바로 man page 활용 • 현재 커서에 있는 함수의 man page를 보고 싶을 경우 ,ma를 누르면 man page를 나타 내도록 설정. • vimrc파일에 추가. func! Man() let sm = expand("<cword>") exe "!man -S 2:3:4:5:6:7:8:9:tcl:n:1:p:o ".sm endfunc nmap ,ma :call Man()<cr><cr>
VIM – 유용한 기능 • 흐트러진 소스 정렬 • (표준) 블록 지정 후 = 키 누르기 • (표준) gg=G : 블록 지정하지 않고 소스 전체 정렬
VIM – 유용한 기능 • 파일에서 달리진 부분 비교하기 • $ vimdiffftl.cMyftl.c : ftl.c파일과 Myftl.c파일의 달리진 부분이 일목요연하게 나타남. • meld, xxdiff와 같은 유틸리티도 있다.
VIM – 유용한 기능 • 헤더 파일 바로 읽어오기 • (표준) 보고 싶은 헤더 파일에 커서를 두고 Ctrl+wf : 창이 수평 분할 되면서 헤더 파일이 열림. • (문자열을파일로 인식해서 여는 기능) • path 경로에 지정한 경로를 기준으로 헤더 파일을 찾는다. vimrc파일에 원하는 path를 적어 준다. • set path=/usr/include:/mywork/linux/include
ctags • 프로그래밍소스 코드에서 태그(전역변수,함수 정의, 매크로 선언)들의 데이터 베이스파일(tags 파일)을 생성하는 유닉스 명령. • 특정 심볼을 찾고자 할 때 이용 • Assembler, ASP, Awk, C, C++, BETA, Cobol, Eiffel, Fortran, Java, Lisp, Lua, Make, Pascal, Perl, PHP, PL/SQL, Python, REXX, Ruby, Scheme, Shell scripts, S-Lang, Tcl, Vera, Verilog, Vim, YACC/Bison 등을 지원
ctags - 사용법 • 분석할 소스의 가장 최 상위 디렉토리에서$ ctags –R • vim 에서 tags 파일 설정 • (명령라인) set tags=./tags • (명령라인) set tags=./tags, /usr/include/tags • vimrc파일에 설정해도 무관.
ctags - 사용법 • ctags명령어 요약 • :ta [태그] or ctrl + ] : [tag]가 정의된 위치를 나열하고 선택한 위치로 점프. 현재 위치는 스택에push • po orctrl + t : 스택top에 저장된 위치로pop하고 그 위치로 점프 • sts[태그] or stj [태그] : tag가 정의된 위치를 나열하고 선택한 위치로 수평분할 창에 표시.
cscope사용법 • ctag만으로는 지역변수나 전역 변수가 사용된 곳이나 함수가 사용된 곳을 찾기 힘들다. 이때는 cscope를 이용 한다. • cscope사용 하기 • 다음과 같은 쉘 스크립트를 작성 한다.
cscope사용법 • $ chmod 755 mkcscope.sh • 분석할 소스 루트 디렉토리에서 위 쉘 스크립트를 실행 한다. • vim에 cscope를 사용 할 것이라고 알려야 한다. vimrc파일에 다음과 같이 추가 하자
cscope사용법 • cscope를 vim 에서 사용 하기 • (표준) :cs find {질문 종류} {심볼}