ULKML – 1수정

Download Report

Transcript ULKML – 1수정

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 소스 분석 툴
•
•
•
•
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
“1
“2
“3
“4
“5
“6
“7
“8
“9
“-
“.
“:
“% “#
“/
• “ “ 레지스터 : 바로 이전에 지워진 내용
• “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 – 유용한 기능
• 파일에서 달리진 부분 비교하기
– $ vimdiff ftl.c Myftl.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 or ctrl + t : 스택 top에 저장된 위치로pop
하고 그 위치로 점프
– sts [태그] or stj [태그] : tag가 정의된 위치를
나열하고 선택한 위치로 수평분할 창에 표시.
–
cscope 사용법
• ctag만으로는 지역변수나 전역 변수가 사
용된 곳이나 함수가 사용된 곳을 찾기 힘
들다. 이때는 cscope를 이용 한다.
• cscope 사용 하기
– 다음과 같은 쉘 스크립트를 작성 한다.
cscope 사용법
• $ chmod 755 mkcscope.sh
• 분석할 소스 루트 디렉토리에서 위 쉘 스
크립트를 실행 한다.
• vim에 cscope를 사용 할 것이라고 알려야
한다. vimrc 파일에 다음과 같이 추가 하자
cscope 사용법
• cscope를 vim 에서 사용 하기
– (표준) :cs find {질문 종류} {심볼}
설명
질문 종류
0 or s
find this C symbol
1 or g find this definition
2 or d find function called by this function
3 or c
find functions calling this function
4 or t
find assignments to
6 or e
find this egrep pattern
7 or f
find this file
8 or i
find files #including this file