분석 환경 구축 실습

권석민 2013.05.19 12:42 조회 수 : 14204 추천:3

어제 실습을 하는데 버벅여서 한번 정리하는 차원에서 작성해봅니다.

OB들이 쓴 책인 '코드로 알아보는 ARM 리눅스 커널'에 나와있는 분석 환경 구축하기(P32)를 토대로 우분투12.04에서 실제 분석 환경 구축을 진행해보았습니다다. 혹시 책의 저작권에 문제가 된다면 삭제하셔도 무방합니다.


1. 커널 소스 받기

https://www.kernel.org/ 에 접속하여 커널 소스를 받습니다. 저는 3.9.2를 받았습니다.(https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.9.2.tar.xz)



2. 소스 압축 풀기

받은 소스 파일을 한글 경로가 안들어가있는 적절한 곳으로 옮깁니다. 저같은 경우는 ~/kernel_study/ 밑으로 옮겼습니다.

그리고 해당 파일의 압축을 풉니다. 압축 풀때는..


$ xz -d linux-3.9.2.tar.xz  

위와 같이 압축을 풀면 tar 파일이 나옵니다. tar 파일을 한번 더 풀어줍니다.

$ tar -xvf linux-3.9.2.tar

그러면 아카이빙이 풀리면서 폴더가 만들어집니다.



3. ctags로 소스 코드 태그 만들기

일단 ctags를 설치합니다.

$ sudo apt-get install ctags

기본적으로 태그를 생성하는 명령은 ctags -R인데 ctags -R은 모든 아키텍처에 대한 태그를 만들어 준다고 합니다. 

우리는 ARM아키텍쳐만 다루기 때문에 ARM으로 한정하여 생성해야 합니다.

이때 리눅스 커널 소스에 아키텍처별 ctags용 태그를 생성할 수 있는 스크립트가 제공된다고 합니다.

스크립트가 있나 없나 한번 확인해봅니다.

$ ls -al ./scripts/tags.sh

tags.sh가 있는 것이 확인되면 make 명령으로 ARM용 태그를 생성합니다.

$ make tags ARCH=arm
만드는데 시간이 좀 걸립니다. 


4. cscope 태그 데이터베이스 만들기
다음으로는 ctags를 보완해주기 위해 cscope를 설치해줍니다.
$ sudo apt-get install cscope
cscope DB를 생성하기 위해서는 분석할 파일들의 목록을 cscope.files 파일에 저장 한 후 생성해야되는데
리눅스 커널 소스에서는 이를 자동으로 구성해주는 스크립트를 내장하고 있습니다.
$ make cscope ARCH=arm


5. vim 플러그인설치
OB들의 책에서는 ctags와 cscope에 익숙하지 않다면 vim 플러그인을 추천합니다.
플러그인으로 Source Explorer, NERD Tree, Tag List를 추천하고 있습니다.
3개는 http://www.vim.org/ 에서 다운받을 수 있습니다.
vim사이트에서 좌측을 보시면 Download 밑에 Scripts라고 메뉴가 있습니다.
그것을 클릭 후 거기서 Browse all을 누릅니다.
그러면 하단부에 플러그인을 검색 할 수 있는 keywords와 type, sort by가 뜨는 것을 볼 수 있습니다.
keywords에서 검색하여 각각의 플러그인들을 다운받습니다.
각각의 주소는
http://www.vim.org/scripts/download_script.php?src_id=19701
http://www.vim.org/scripts/download_script.php?src_id=17123
http://www.vim.org/scripts/download_script.php?src_id=19574
입니다.

플러그인들을 설치하고 환경을 설정하기 위해 홈디렉토리로 가서 .vim 폴더를 만들어 줍니다.
그리고 다운받은 파일들을 홈디렉토리로 옮겨 줍니다.
그리고 .vim 폴더로 가서 하위폴더로 plugin폴더를 만들어 줍니다.
그 다음 각각의 파일들을 압축을 해제하여 줍니다.
압축을 풀면 각각의 플러그인마다 거시기.vim파일들이 나오는데
NERD_tree.vim  srcexpl.vim  taglist.vim
이 3개의 파일들을 ~/.vim/plugin/ 밑으로 복사 또는 이동합니다.
그러면 설치는 완료되고 환경설정이 남았습니다.

6. 환경설정
아까 설치한 ctag와 cscope를 연동하기 위해 vim 환경 파일인 .vimrc를 수정해야 합니다.
먼저 ctags와 cscope 데이터베이스 파일의 위치와 실행파일의 위치를 확인해봅니다.
$ whereis ctags
ctags: /usr/bin/ctags /usr/bin/X11/ctags /usr/share/man/man1/ctags.1.gz
$ whereis cscope
cscope: /usr/bin/cscope /usr/bin/X11/cscope /usr/share/man/man1/cscope.1.gz

그리고 vim 환경설정 파일을 엽니다.
$ vi ~/.vimrc
그리고 아래를 입력 해 줍니다.

   "vim환경설정
       set nu "line number
       set ai "auto indent
       set ts=4 "tab size
       set bg=dark "background color
   
   "ctags database path 설정
       set tags=~/kernel_study/linux-3.9.2/tags "각자 자신의 위치로..
   
  "cscope database path 설정
      set csprg=/usr/bin/cscope "whereis로 나온 cscope위치
      set csto=0 "cscope DB serch first
      set cst "cscope DB tag DB search
      set nocsverb "verbose off
  
      "cscope DB의 위치 설정
      cs add ~/kernel_study/linux-3.9.2/cscope.out ~/kernel_study/linux-3.9.2
      set csverb "verbose off
  
  "Tag List 환경설정
      filetype on "vim filetype on
      nmap <F7> :TlistToggle<CR> "F7 key = Tag List Toggling
      let Tlist_Ctags_Cmd = "/usr/bin/ctags"  "ctags 프로그램 위치
      let Tlist_Inc_Winwidth = 0 "window width change off
      let Tlist_Exit_OnlyWindow = 0 "tag/file 선택 완료 시 taglist
                      "window close =off
      let Tlist_Auto_Open = 0 "vim 시작 시 window open = off
      let Tlist_Use_Right_Window = 1 "vim 시작 시 window open = off
  
  "Source Explorer 환경설정
      nmap <F8> :SrcExplToggle<CR> "F8 key = SrcExpl Toggling
      nmap <C-H> <C-W>h "왼쪽 창으로 이동
      nmap <C-J> <C-W>j "하단(preview) 창으로 이동
      nmap <C-K> <C-W>k "상단 창으로 이동
      nmap <C-L> <C-W>l "오른쪽 창으로 이동
  
      let g:SrcExpl_winHeight = 8 "SrcExpl 윈도우 높이 지정
      let g:SrcExpl_refreshTime = 100 "refreshing time = 100ms
      let g:SrcExpl_jumpKey = "<ENTER>" "해당 definition으로 jump
      let g:SrcExpl_gobackKey = "<SPACE>" "back
      let g:SrcExpl_isUpdateTags = 0 "tag file update = off
  
  "NERD Tree
      let NERDTreeWinPos = "left" "NERD Tree위치 = 왼쪽
      nmap <F9> :NERDTreeToggle<CR> "F9 key = NERD Tree Toggling

입력이 끝나고 vi를 킨 다음 F7, F8, F9를 순서대로 입력하면 창이 분할되며 TagList, Source Explorer, NERD Tree가 보일 것 입니다.

이러면 분석 환경의 기본은 된 것 같습니다..
스크린샷, 2013-05-19 12:54:46.png

번호 제목 글쓴이 날짜 조회 수
공지 [공지] 커널 스터디 관련 Q&A 게시판 입니다. [5] woos 2016.04.09 2197
1745 x86 interrupt & instruction table file 백창우 2007.02.23 9190
1744 x86 linux booting 과정 file 백창우 2007.02.23 12734
1743 아키텍쳐에 관련된 내용입니다. [6] file 원민수 2007.02.25 7234
1742 논의사항 [7] 백창우 2007.02.26 4657
1741 Power architecture roadmap이라네요. [17] 정필섭 2007.02.26 4817
1740 첫째날에 공부한 내용 정리한번 해보는게 어떨까요?? 여러분의 의견을 묻습니다. [8] file 김정수 2007.02.26 7255
1739 [re] 제본 신청 하실분 댓글 달아 주세요. [17] 정필섭 2007.02.28 4870
1738 Power ISA 2.03 외 기타 문서. [6] 김형진 2007.02.28 5294
1737 [수정] 스터디 문서 분량을 나누겠습니다. [3] 정필섭 2007.03.02 5190
1736 제송.... 제가 이번에 스터디 그룹에 참여하는데 아직 공부할 부분을 할당받지 못했는데요... [2] 강형석 2007.03.02 5261
1735 power architecture의 역사와 미래 [2] file 백창우 2007.03.03 5179
1734 3월 3일 LKSAS 두번째 모임 즐거웠습니다. [7] file 김정수 2007.03.04 5046
1733 x86 아키텍쳐에 관한 동영상 강좌 링크입니다. [6] 남현우 2007.03.04 4413
1732 EM64T_Guide [2] file 이종우 2007.03.04 3502
1731 "만들면서 배우는 OS 커널의 구조와 원리/김범준 저"에 오늘 공부했던 내용에 대해 쉽게 적혀있네요. [4] 김정수 2007.03.04 5380
1730 메신저 주소 공유합시다!! [8] 김정수 2007.03.04 3672
1729 [질문] POSIX 표준 함수들의 소스 [4] 김강년 2007.03.05 5602
1728 분담2 MOVLHPS ~ MOVUPD 까지입니다 선준규 2007.03.06 4851
1727 asm 강좌 문서 file 맥주 2007.03.06 4147
1726 lilo 공부하실때 참고 할만한 자료 입니다. [5] 강형석 2007.03.07 3034
XE Login