조건부 컴파일과 + 추가질문(종합 2가지)

조회 수 1058 추천 수 0 2010.02.28 14:07:54

 

항상 찝찝한 부분이였는데, 역시 여기계신분들에게 답을 구할 수 있을 것 같네요 ㅎㅎ

 

Kernel Source에 보면, #ifdef CONFIG_VOLUNTARY_PREEMPTION 이와같이 조건부 컴파일이 있는데,

저 조건부 컴파일을 인터넷 여기저기 뒤지면서 결국 kernel voluntary preemption 의 의미를 가지고 있다는 걸 알았습니다.

위와 같은 조건부 컴파일을 쉽게 찾아내는 방법을 알고 싶습니다.

 

우선 쉘 스크립트를 이용해서 다음과 같이 쉘을 구성했습니다.

 

#cat /bin/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

 

그리하여, Kernel Source를 분석하기 위해 다음과 같이 태그들을 형성했습니다.

 

#ctags -R; mkcscope.sh

 

위와 같이 했음에도 불구하고, 조건부 컴파일과 관련된 링크는 생기지 않더군요 ...

아마 Makefile 부분과 관련이 있을 것 같은데, 좋은 팁좀 전수해주십시오 ~~!!~!

 

또 위 처럼 만들고 나니 ... 있는것이란 모든 있는 것은 죄다 연결이 되버려서 ...

도대체 어떤것을 호출하는지 감을 잡을수가 없을때가 있습니다 ...

 

실제 커널이 동작하는 것과 관련된 tag를 만들려면, 어떻게 해야하는 것인가요?

가령 참조 연산에 의한 write 연산이 일어나게 되면, 함수 포인터 형식으로 동작해서 어떤걸 써야할지도 모르겠구 ... 골치가 아픕니다.

 

 

 

 

 

 


김태훈

2010.02.28 21:35:19
*.145.148.92

조건부 컴파일에 쓰이는 define들 'CONFIG_xxx"는 커널 컴파일 설정에 따라 정의됩니다.

 

커널 컴파일 설정은 주로 'make menuconfig'에서 하게 되죠.

 

커널 컴파일 설정 내용은 커널 코드 최상위 디렉토리의 '.config' 파일을 보시면 되고, 실제 #define 은 'include/linux/autoconf.h'에 되어있습니다.

 

커널 컴파일 시점에 설정된 define에 따라 커널 이미지를 생성하구요. (조건부 컴파일에 묶여 있지 않은 코드는 이미지에 포함되지 않죠.)

 

그래서, 커널 분석하실때 타겟 아키텍처와 같이 범위를 정하시고 분석하셔야 합니다.

 

현재 사용하시는 PC에서 동작하는 커널 코드를 분석하시겠다면, 먼저 커널을 컴파일해서 설치하시고 tag는 다음과 같이 생성하시면 됩니다.

 

make tags ARCH=x86

make cscope ARCH=x86

 

이렇게 하면 x86 아키텍처를 기반으로 tag가 생성됩니다. 그러면, 아키텍처마다 다르게 정의된 함수들을 x86 아키텍처용 함수만 tagging 합니다. 위와 같이 tag를 만드시면 모든 아키텍처 코드를 tagging 해버리기 때문에, 분석하는데 불편한 부분이 있습니다. 

tag 만드신 후에, 조건부 컴파일의 defind 이 정의된 부분(ctrl+])이 없으면 'include/linux/autoconf.h'에 #define 되지 않은 것이요, 정의된 부분이 있으면 'include/linux/autoconf.h' 파일로 이동합니다. define 되지 않은 조건부 컴파일에 묶인 코드는 스킵하시면 되죠.

이상훈

2010.02.28 23:00:59
*.36.40.20

이야 감사합니다 ^^; ㅎㅎ

List of Articles
번호 제목 글쓴이 날짜 조회 수
» 조건부 컴파일과 + 추가질문(종합 2가지) [2] Linux 2010-02-28 1058
81 커널 아키텍처 관련 문의 [4] Linux 2010-02-28 1102
80 역참조의 정확한 정의 [2] Linux 2010-02-27 1078
79 Sparse 에 관한 몇가지 질문 [3] Linux 2010-02-27 1380
78 GCC 관련 스터디는 지금 없나요? [1] Linux 2010-02-27 1120
77 커널, GCC 관련 스터디 문의 [1] Linux 2010-02-26 1296
76 커널 모듈에서 특정 사용자 프로세스의 메모리 공간을 접근하고 싶습니다. [3] 남현우 2009-04-01 1892
75 Thread 상태값 2 [1] 송선희 2009-03-16 2051
74 thread의 상태값 [4] 송선희 2009-03-10 2072
73 linux swap out 관련.. [1] 박은병 2009-03-05 2093
72 안녕하세요 jtag에 대해 궁금한게 있어 여쭤봅니다. [4] 최원제 2009-02-25 1966
71 스터디 관련 [3] 이상대 2009-02-13 1961
70 가상화에 대한 설명 중에 궁금한게.. [3] 이홍우 2009-02-09 2012
69 VT-x 지원?? [10] corone 2009-01-19 2159
68 VMware의 Linux에 Xen 설치해서 XP 설치 가능?? [5] corone 2009-01-17 2205
67 플래시 메모리에서 FTL(Flash Translation Layer) S/W 모듈과 관련하여 문의 드립니다. [4] 남현우 2009-01-09 2342
66 CS8900 인터럽트 처리와 관련한 질문입니다. [1] 김현우 2009-01-07 1653
65 인터럽트 발생하지 않습니다. [1] 김현우 2009-01-03 1721
64 전역 변수 참조 문제 김현우 2008-12-28 1780
63 리눅스 커널에 ipv6모듈 올리기 [2] 송선희 2008-12-23 1885



XE Login