'[ IT ]/Ubuntu'에 해당되는 글 7건

  1. ctags 사용법 2010/12/23
  2. cscope 사용법 2010/12/23
  3. Linux Kernel 분석을 위한 약간의 팁(ctags, cscope) 2010/12/18
  4. Ubuntu 10.10 CVS Install 2010/12/15
  5. 우분투 ssh 설정 2010/10/26
  6. Ubuntu 터미널 폰트 2010/10/15
  7. 버전 확인하는 명령어 2010/09/13

ctags 사용법

from [ IT ]/Ubuntu 2010/12/23 23:40
1. 설치
~$ sudo apt-get install ctags

2. 분석하려는 Kernel 코드의 tag 파일 생성 - 1
~$ pwd
~/linux-2.6.36.2

~$ctags -R
~$ ls tags
tags
    - -R 은 현재 위치에서 Recursive 하게 하위 디렉토리까지 Parsing 하는 옵션임

c++ 파일에 대해 tag 를 생성할 때는 다음과 같이 하면 된다.
~$ ctags -R --language-force=c++ --extra=+q --fields=+i *.cpp *.h


3. 분석하려는 Kernel 코드의 tag 파일 생성 - 2
~$ pwd
~/linux-2.6.36.2

~$ make tags
~$ ls tags
tags

4. vi(vim, gvim) 에서 사용법
~$ pwd
~/linux-2.6.36.2

~$ vim -t start_kernel
    - tags 파일이 있는 곳에서 실행해야 함

<C-]> : 커서 위치에 있는 단어를 검색하여 해당 파일로 이동
<C-t> : 이동 전 파일로 돌아가기

vi command mode 에서
:ta 검색어 : 검색어가 정의된 곳으로 이동 (첫번재 발견된 곳으로 이동하므로 부정확할 수 있음)
:tn           : 그 다음 정의된 곳으로 이동
:tp           : 그 전 정의된 곳으로 이동
:ts 검색어 : 검색어가 정의된 리스트를 조회 후 선택 이동
                  검색어를 입력 안 한 경우 바로 직전에 검색했던 리스트가 다시 보여짐
:tags         이동한 이력 목록을 출력


5. 기타
vim 환경설정파일에 다음과 같이 입력하면 ctags 검색 속도 개선이 된다.
~$ vim ~/.vimrc

#다음라인 추가
set tagbsearch


크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기
2010/12/23 23:40 2010/12/23 23:40
Tag // , ,

댓글을 달아 주세요

[로그인][오픈아이디란?]

cscope 사용법

from [ IT ]/Ubuntu 2010/12/23 21:27
1. 설치
~$ sudo apt-get install cscope

2. Kernel 분석을 위한 Symbol 생성 - 1
~$ pwd
~/linux-2.6.32.2

~$ make cscope

3. Kernel 분석을 위한 Symbol 생성 - 2
~$ pwd
~/linux-2.6.32.2

~$ cscope -R -b
    - -R은 Recursive 하게 하위 디렉토리까지 Symbol 생성을 한다는 의미
    - -b는 cscope GUI 실행하지 않고 Symbol 생성 하기
하지만 이 방법은 모든 파일을 Parsing 하기 때문에 불필요한 것까지 Parsing 이 된다. 그래서 보통 다음과 같은
shell script를 생성하여 실행시켜준다.

#!/bin/bash

LNX=.

cd /  

find  $LNX                                                                            \

-path "$LNX/arch/*" ! -path "$LNX/arch/x86*" -prune -o               \

-path "$LNX/include/asm-*" ! -path "$LNX/include/asm-x86*" -prune -o       \

-path "$LNX/tmp*" -prune -o                                                       \

-path "$LNX/Documentation*" -prune -o                                            \

-path "$LNX/scripts*" -prune -o                                                   \

-path "$LNX/drivers*" -prune -o                                                   \

-name "*.[chxsS]" -print >$LNX/cscope.files

~$ pwd
~/linux-2.6.36.2

~$ ./cscope_script
~$ ls cscope.files
cscope.files

~$ cscope -b -q -k
    - -b cscope GUI 실행시키지 않고 Symbol 생성하기
    - -q 역순서 인덱스를 생성. 큰 프로젝트에서는 역순서 인덱스가 검색을 빠르게 함
    - -k 커널모드 설정. #include 로 들어간 모든 헤더파일들을 /usr/include 에서 찾지 않도록 함(이것은 주로 여기서 우리가 하는 것처럼 운영 체제 또는 C 라이브러리 소스 코드에 대해서 cscope를 사용하고 있을 때 주로 유용)

4. cscope 단독 사용법
~$ cscope -d
    -  cscope.out 파일이 존재하는 곳에서 실행시켜야 함
    -  화면은 크게 상단과 하단 두 부분으로 나뉘고 이동은 tab key 로 이동한다.
    - 상단은 검색 결과를 보여주고 하단은 검색입력을 한다.
    - 상단의 검색 결과는 번호를 입력하여 해당 파일을 열거나 화살표로 이동하여 엔터키를 입력하여 파일을 열면 된다.(디폴트는 vi 로 해당 파일이 열린다.)
    - 하단의 검색 입력 부분은 화살표 혹은 엔터 키로 이동한다.
    - cscope GUI 를 끝낼 때는 ctrl+d 를 입력하면 된다.

다음은 하단의 검색입력에 대한 설명이다.
Find this C symbol : ctags와 마찬가지로 C 심볼(변수, 함수, 매크로, 구조체)들을 찾는다.
Find this global definition : 전역 선언만 검색
Find functions called by this function : 이 함수에 의해 호출되는 함수를 검색
Find functions calling this function : 이 함수를 호출하는 함수를 검색
Find this text string : 텍스트 문자열을 검색
Change this text string : 문자열을 검색해서 변경
Find this egrep pattern : 정규식을 이용해서 소스코드 검색
Find this file : 특정이름을 포함한 파일을 모두 검색
Find files #including this file : 특정헤더를 포함시키는 모든 소스코드를 검색

5. vi(vim, gvim)에서 cscope 사용법
vim command mode 에서

:cs [명령]
    - 명령
        help : 도움말
                 예제 : :cs help / :cs

        add : 새 데이타 베이스 더하기
                 사용법 : add file|dir [pre-path]  [flags]
                 예제 : :cs add ./cscope.out

       show : 연결 보여주기
                사용법 : show
                예제 : :cs show

        kill : 연결 끊기
                사용법 : kill # (#은 연결된 데이타베이스 번호로 show 를 통해 확인 가능)
                예제 : :cs kill 0

        reset : 모든 연결 초기화
                 사용법 : reset
                예제 : :cs reset

        find : Query for a pattern
                 사용법 : find c|d|e|f|g|i|s|t name
                             0 또는 s        C 심볼 검색
                             1 또는 g        전역 선언만 검색
                             2 또는 d        이 함수에 의해 호출되는 함수들 검색
                             3 또는 c        이 함수를 호출하는 함수들 검색
                             4 또는 t         텍스트 문자열을 검색
                             5 또는 e        확장 정규식을 사용하여 검색
                             7 또는 f         파일 이름을 검색
                             8 또는 i         이 파일을 인클루드하는 파일 검색
                 예제: :cs find s start_kernel

:cn     다음 태그
:cp     이전 태그

매번 vim command mode 에서 :cs find ???? 를 입력하는 것은 번거로운 일이다. 더구나 검색어가 긴 경우 일일히 타이핑한다는 것은 더더욱 번거롭다.
< cscope_maps.vim > 을 다운 받아서 다음 경로에 저장하자.
~$ pwd
~/.vim/plugin

~$ ls cscope_maps.vim
cscope_maps.vim

vim 는 cscope.out 이 존재하는 커널 코드의 루트 디렉토리에서 실행시키는 게 좋다.
~$ pwd
~/linux-2.6.36.2

~$ vim init/main.c
검색하고자 하는 함수명에 커서를 이동시켜 놓은 후
<C-\>s :cs find s    
<C-\>g :cs find g
<C-\>c :cs find c
<C-\>t :cs find t
<C-\>e :cs find e
<C-\>f :cs find f
<C-\>i :cs find i
<C-\>d :cs find d

C는 ctrl key를 \은 백슬러시 key 를 의미한다.
즉 <C-\>는 ctrl+\ 와 같은 의미이다.
<C-\>s 는 ctrl+\입력후 바로 s를 입력하라는 의미이며 이는 :cs find s와 동일하게 동작한다.
검색어는 커서가 위치하는 단어가 검색어가 단다.

<C-@>s
<C-@>g
<C-@>c
<C-@>t
<C-@>e
<C-@>f
<C-@>i
<C-@>d
나 같은 경우 <C-@> 는 ctrl + 2(q와w 키 위에 있는 숫자키) 를 입력하면 동작한다.(왜 그렇지????)
<C-\> 대신에 <C-@> 는 화면을 상하로 분리해서 상단에 검색결과에서 선택한 파일이 나타난다.

<C-@><C-@>s
<C-@><C-@>g
<C-@><C-@>c
<C-@><C-@>t
<C-@><C-@>e
<C-@><C-@>f
<C-@><C-@>i
<C-@><C-@>d
이것은 ctrl key 를 누른 상태에서 빠르게 2를 두 번 누르고 ctrl key 를 떼면서 s 를 누르는 식이다.
이렇게 하면 위에서는 상하로 분리되던 창이 이번엔 좌우로 분리되어 좌측에 검색결과에서 선택한 파일이 나타난다.

창간 이동은 <C-w><C-w> 이다.

vim 환경 설정 파일에 다음과 같이 입력하면 vim 에서 ":tags" 라는 명령을 사용할 수 있다.
~$ vim ~/.vimrc

#다음 라인 추가
set cst

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기
2010/12/23 21:27 2010/12/23 21:27
Tag // , , ,

댓글을 달아 주세요

[로그인][오픈아이디란?]

ctags  를 사용하기 위해서 -R 이라는 옵션으로  tag 파일을 생성해 주어야 한다.

~$ pwd
~/linux-2.6.36.2

~$ ctags -R
~$ ls tags
tags
    (참고로 Kernel Source 는 ~/ (사용자 Home 디렉토리) 에 다운 받아 놓은 상태임)

cscope 도 마찬가지이다.
~$ pwd
~/linux-2.6.36.2

~$ cscope -R -b
~$ ls cscope.out
cscope.out

위와 같은 방법으로 하면 문제가 내가 원하지 않는 소스 코드까지 Parsing 이 된다는 것이다.
현재 분석하려는 Source 가 x86 이라면 ARM 이나 기타 다른 Source 들은 불필요하다.

이때 유용한 것이 있다.
~$ pwd
~/linux-2.6.36.2

~$ make tags
~$ make cscope
~$ ls tags cscope.out
cscope.out tags
    - 따로 ctags -R 이나 cscope -R 로 해당 파일을 생성하지 않아도 됨

이는 Linux Kernel 에서 기본적으로 제공하는 기능이다.
최상위에 존재하는 Makefiles 을 보면 이런 기능이 어떻게 동작하는지 알 수 있다.
make 를 이용하기 때문에 실제 빌드 되는 코드들에 대해서만 처리해준다.


크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기
2010/12/18 12:39 2010/12/18 12:39
Tag // , , ,

댓글을 달아 주세요

[로그인][오픈아이디란?]

Ubuntu 10.10 CVS Install

from [ IT ]/Ubuntu 2010/12/15 23:17
1. CVS 관련 패키지 설치
~$ sudo apt-get install cvs
~$ sudo apt-get install xinetd
~$ sudo apt-get install apache2-utils

2. 사용자 계정 생성
~$ sudo adduser cvs
    - 위와 같이 사용자 추가를 하면 패스워드 설정까지 진행이 되고 /home/cvs 디렉토리까지 생성이 된다.

3. Repository 생성
~$ mkdir /home/cvs/repo
~$ sudo chown -R cvs.cvs /home/cvs/repo
    - repo 디렉토리 생성 및 repo 디렉토리의 사용자 및 그룹 cvs 로 변경

~$ cvs -d /home/cvs/repo init
    - Repository 생성

4. 서비스 등록
~$ sudo vi /etc/xinetd.d/cvspserver

#아래 내용 작성 후 저장
service cvspserver
{
     port        = 2401
     socket_type = stream
     protocol    = tcp
     wait        = no
     user        = root
     type        = UNLISTED
     server      = /usr/bin/cvs
     server_args = -f --allow-root=/home/cvs/repo pserver
     disable     = no
}
    - /etc/xinetd.d/cvspserver 에 위 내용 작성 후 저장
    - Repository 가 여러 개 일 때 server_args 에 Repository 추가
      ex) server_args = -f --allow-root=/home/cvs/repo --allow-root=/home/test/repo pserver

~$ sudo /etc/init.d/xinetd restart
    - 서비스 시작

~$ sudo netstat -an | grep 2401
tcp        0      0 0.0.0.0:2401            0.0.0.0:*               LISTEN
    - netstat 으로 확인시 cvspserver의 포트 2401가 열려 있음을 확인

5. 사용자 등록
~$ sudo htpasswd -c passwd [생성 ID]
~$ cd /home/cvs/repo/CVSROOT
~$ sudo htpasswd -c passwd cvs
    - -c옵션은 파일을 처음 만들 때만 붙이고 이후 사용자를 추가할 때는 붙이지 않는다.

6. passwd 파일 수정
~$ sudo vim /home/cvs/repo/CVSROOT/passwd

cvs:IDOS5tlNiKwyc => cvs:IDOS5tlNiKwyc:cvs 로 수정
    - passwd 파일에 cvs:IDOS5tlNiKwyc 와 같은 값이 들어있음
    - cvs 는 사용자 ID, 두 번째 IDOS5tlNiKwyc는 암호화된 사용자의 암호
    - 세 번째에 추가하는 cvs 는 서버에 파일을 기록할 때 파일의 권한을 가지는 계정

7. Login
~$ cvs -d :[접속방법]:[CVS  사용자 ID]@[원격지 CVS Repository 디렉토리 주소]  [CVS 명령]
~$ cvs -d :pserver:cvs@localhost:2401/home/cvs/repo login
    - 위 명령 입력 후 htpasswd 로 생성한 패스워드 입력
    - 특별한 메세지가 없이 셀 프롬프트가 떨어지면 정상적으로 로그인 한 것임







크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기
2010/12/15 23:17 2010/12/15 23:17
Tag // ,

댓글을 달아 주세요

[로그인][오픈아이디란?]

우분투 ssh 설정

from [ IT ]/Ubuntu 2010/10/26 12:21

1. sudo apt-get install ssh

2. sudo vim /etc/ssh/sshd_config
22번 포트에 대한 주석 제거(앞에 # 지우고 저장)

3. /etc/init.d/ssh restart
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기
2010/10/26 12:21 2010/10/26 12:21

댓글을 달아 주세요

[로그인][오픈아이디란?]

Ubuntu 터미널 폰트

from [ IT ]/Ubuntu 2010/10/15 18:40
대부분의 리눅스 터미널 폰트는 글자가 겹치는 문제 발생한다.
그나마 inconsolata 라는 폰트가 그나마 나은듯

sudo apt-get install ttf-inconsolata

터미널 메뉴 -> 편집 -> 프로파일 기본 설정->일반 탭
시스템 고정폭 글꼴 사용 체크 해제 -> 글꼴

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기
2010/10/15 18:40 2010/10/15 18:40
Tag // , ,

댓글을 달아 주세요

[로그인][오픈아이디란?]

1. GUI 환경

    System -> About Ubuntu


2. Shell

    cat /etc/issue

    cat /etc/lsb-release


    uname -a : 모든 정보(커널, gcc 등..)

    uname -r : 커널 배포판

    uname -v : 커널 버전

    uname -o : 운영체제

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기
2010/09/13 01:00 2010/09/13 01:00
Tag //

댓글을 달아 주세요

[로그인][오픈아이디란?]