1. ctags 란 ?
= > ctags는 프로그래밍 소스 코드의 태그 (전역변수 선언, 함수 정의, 메크로 정의)들의
데이터 베이스(tags파일)을 생성하는 명령어입니다.
커널 소스 분석등 작업에서 탁월한 성능을 발휘합니다
2. ctags 버전 확인하기
= > (쉘에서) $ctags --version 이라고 입력한다 설치 돼어 있는경우 버전 정보가 나옵니다
cannat commond find => 깔려 있지 않을시 에러 출력
( 대부분 기본리눅스에서 디폴트로 깔려 있지 않을것이다 처음 설치시 전체 설치 또는..
선택 설치로 ctags를 설치 한경우라면 몰라도 디폴트로는 거의 안깔려 있습니다.
특히 ubuntu 의 경우 원래 데스크탑용으로 개발 돼고 있어서.. 개발 툴이 하나도 안깔려 있기
때문에 별또 설치를 필요로 합니다 )
3. ctags 설치하기
=> ubuntu 의 경우 레드헷 이나 페도라 등 다른 리눅스에 비해 비교적 쉽게 설치할수 있습니다
레드헷일 경우 rpm 버전을 따로 다운 받아 설치 해야 하는 방면 데비안 계열 명령어
apt-get으로 간편하게 설치가 가능합니다
ubuntu 설치 하기
(쉘에서) $apt-get install ctags (자동으로 최신 버전으로 설치 됩니다 )
redhat 설치하기 http://sourceforge.net/projects/ctags (rpm 버전을 다운 받은후)
(쉘에서) $rpm -ivf 다운받은 rpm 파일명 (으로 설치 하실수 있습니다)
설치 완료 후 2번 과정 버전을 확인 하면 버전 정보가 재대로 나오면 재대로 설치가 되었습니다.
레드헷 일 경우 lib.so 에러가 발생할수 있는데 버전이 안맞는 것을 깔면.. 설치가 재대로
돼지 않는 문제점이 발생합니다 위 링크에서 최신버전 5.6.1 의 경우 페도라 5 용 이므로
레드헷일 경우 5.0 버전 이나 찾아보시고 하위 지원 돼는 버전을 설치 해야 합니다..
확인 결과 5.0.1 은 재대로 설치가 가능하더라고요..
4. tags 파일 만들기
= > 우선 커널이 있는 폴더로 이동 합니다
$cd /usr/src/linux/ <== ( 전 linux로 심볼릭 링크가 돼어 있습니다 안돼어 있다면
심볼릭 링크를 만드셔도 돼고 직접 경로를 다 입력 하셔도 상관없습니다)
심볼릭 링크 만들기 -> ln -s /usr/src/커널폴더명 linux
커널 폴더로 이동했으면 ctags -R 을 입력하여 tags 파일을 생성합니다
시간이 좀 걸리는데 ls로 tags 파일이 생성 된걸 확인 합니다
$cd /usr/include 폴더로 이동 합니다
마찬가지로 ctags -R 명령으로 include 폴더도 tags 파일을 생성 합니다
정상적으로 파일이 생성 되었다면 다음 단계로 넘어갑니다
5. ctags 설정 하기
= > 설치 가 완료 되고 tags파일이 생성 되었다면 작업이 거의 끝난거나 마찬 가지 입니다.
매번 vi 에서 ex모드 에서 입력하는거도 한계가 있으므로 .vimrc 파일에
tags 를 설정 해두는게 편합니다
vimrc 파일에 다음 라인을 입력 한후 저장합니다
set tags=./tags,/usr/src/linux/tags,/usr/include/tags
(linux 의 경우 심볼릭 링크 한경우) 직접 폴더를 입력 하신분은 경롱에 맞게 설정 합니다
사용하기
=====================================================
여기 까지 했다면 설치 및 설정은 완료 되었습니다..
이제 사용 하는거만 남았는데
복잡하게 책에는 여러 옵션이 많지만 보통 잘안쓰는 옵션들은.. 거의 쓸일이 없고..
자주 쓰는 것만 다루겠습니다.
ex 모드 -> vi 에서 : 을 눌러서 명령을 입력 하는 모드를 말합니다
ex 모드에서 :tj 함수명 이나 구조체명 (왜 tj 인가 ? tags jump 약어)
(찾고자 하는 함수명이나 구조체 이름등을 입력 하면 관력 이름 함수나 구조제..정보가 나타 납니다 )
보통 한두가개 아닌경우 스페이스바를 누르면 목록이 더나오며 d 를 누를 경우 한페이지씩..
보여 줍니다 나갈때는 q로 나갈수 있습니다 그럼 <CR> 이 나오는데 여기서 찾은 함수나 구조체
번호를 입력 하면 자동으로 점프합니다
다른 방법으로 가는 방법은 커널 소스를 vi열어서 분석하다가 함수 원형이나 구조체 이름에서
ctrl + ] 를 누르면 자동으로 태그를 찾아 갑니다
이전으로 다시 돌아 올때는 ctrl + t 를 사용 해서 돌아 올수 있습니다
ex모드 : sts 함수명 , 구조체명
위에서 설명한 tj와 비슷 하지만 한가지 다른점이 수평창분활을 해서 결과를 보여 줍니다
이외 명령이 더 있지만 실제 이거만 알아도 충분 합니다 나머지 이전으로 돌아가기 이런건..
거의 실제 사용 되지도 않습니다 위에 설명한 4가지 방법이 주로 쓰는 방법입니다.
[tip] 헤더 파일 바로 읽어 오기
#include <linux/kernel.h> <- 헤더파일 이름에 커서를 위치 한후
Ctrl + wf 를 누르면 창이 수평 분할되어 헤더파일이 열립니다
====================================================
cscope 를 이용한 2%로 채우기
ctags만으로도 커널소스와 소규모 프로젝트롤 분석하는데 부족함은 없지만..
2%로 부족한게 있다 ctags만으로는 지역변수나 전역변수가 사용된곳 은 찾기가 힘들다
이때 cscope 사용하면 됩니다
cscope 설치 하기
ubuntu = > $apt-get install cscope 로 간단히 설치 할수 있다 (데비안 계열의 강점)
redhat
(다운 로드)
wget http://belnet.dl.sourceforge.net/sourceforge/cscope/cscope-15.3-1.i386.rpm
설치 하기
$rpm -ivf cscope-15.3-1.i386.rpm
cscope 설정 하기
cscope 설정은 좀 손이 많이 갑니다 (ctags에 비해...)
우선 mkcscope.sh 파일을 만들어야 합니다
============ mkcscope.sh 파일 내용 ================
#!/bin/sh
rm -rf cscope.files cscope.files
find . \( -name '*.c' -o -name '*.cpp' -o -name '*.cc' -o -name '*.h' -o -name '*.s' -o -name
'*.S' \) -print > cscope.files
cscope -i cscope.files
============================================
파일 생성 후 파일 퍼미션 설정
$chmod 755 mkcscope.sh
$mv mkcscope.sh /usr/bin
디렉토리 이동
$cd /usr/src/linux (심볼릭 링크 아닐시 전체 경로)
mkcscope.sh 실행 하면 빌드 돼면서 데이터가 만들어 집니다
빌드 종료시 값을 입력 하는게 나오는데 ctrl + d를 눌러서 종료 합니다.
이후 .vimrc 파일에 다음 내용을 추가 합니다
=============================================
set csprg=/usr/bin/cscope
set csto=0(숫자 0)
set cst
set nocsverb
if filereadable("./cscope.out")
cs add cscope.out
else
cs add /usr/src/linux/cscope.out
endif
set csverb
==============================================
이제 설정은 끝이 났습니다
사용하기 ( cscope 의 명령 형식 )
:cs find {질의종류} {심벌}
ex) cs find s start_kernel
cscope 의 질의 종류
0 or s - > Find this C symbol
1 or g - > Find this definition
2 or d - > Find functions 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
cscope 를 활용 함으로써 더 완벽히 커널소스를 분석할수 있지만 ctags 만 사용하는거 보다
cscope 를 같이 사용 하니까 찾는데 시간이 더 오래 걸리는거 같네요..
.vimrc 파일에서 cscope 세팅 부분을 주석으로 해두고 사용하다가..
더 깊게 찾을 필요가 있을때 사용 하는게 더 편할듯 싶은데..
그냥 설정 된 체로 ctrl + ] 를 남발하면 ctags만 있을때는 더이상 찾을게 없으면
그냥 위치에서 멈처 있는데 cscope 가 세팅 돼어 있다면 계속 해서 파일을 검색해서
검색하는데 시간이 좀 걸려서..^^;; 거슬릴때가 있네요..
정리 할겸 만들어 봤는데 생각보다 시간이 오래 걸리는듯..
해보시고 안돼는거 있으면 댓글 달아 주세요..
![](http://icon.daum-img.net/editor/p_etc_s.gif)
'OS > Linux' 카테고리의 다른 글
리눅스에서 사용되는 메모리 모델을 이해 (0) | 2012.03.09 |
---|---|
gdb 및 gdbserver 컴파일 및 간단한 사용기 (0) | 2012.03.09 |
리눅스 압축 - tar zip gz bz2 정리 (0) | 2012.03.09 |
VIM. Plugin - Taglist (0) | 2012.03.09 |
리눅스에서 intel compiler (0) | 2012.03.06 |