커널을 분석의 첫걸음은 make cscope && make tags 이다.
만약에 export KBUILD_SRC가 존재한다면 make cscope 는 cscope.out 파일을 절대 경로로 구성하고
존재하지 않을 경우에는 cscope.out 파일을 상대 경로로 구성한다.
상대 경로로 구성된 cscope.out 파일은 프로그래밍시 여러 불편을 일으키므로 절대경로로 구성된
cscope.out 를 사용하는 것이 편리하다.
문제는 시스템내에 여러 버전의 커널 소스를 유지할때 발생한다.
보통 $ENV 디렉토리를 두어.. 매번 source $ENV/kernel.xxx 을 통해서 버전별 환경설정을 로드한다.
(이러한 환경설정에는 KBUILD_SRC 와 CSCOPE_DB 와같은 환경 변수들도 존재한다.)
하지만 이런식으로 매번 환경변수들을 source 명령어로 export 하게되면
/lib/modules/커널버전/build 에서 sudo make cscope && sudo make tags 시에 유효하지 않다.
sudo 명령어 때문에 루트 쉘의 환경설정을 불러오기 때문에, export 한 환경변수들이 무효해지기 때문이
다.
따라서 sudo make cscope && sudo make tags 를 해야할 때에는 -e 옵션을 통해서 make 시에 환경변수들
을 포함시키도록 해줘야한다
와 같이...
만약에 export KBUILD_SRC가 존재한다면 make cscope 는 cscope.out 파일을 절대 경로로 구성하고
존재하지 않을 경우에는 cscope.out 파일을 상대 경로로 구성한다.
상대 경로로 구성된 cscope.out 파일은 프로그래밍시 여러 불편을 일으키므로 절대경로로 구성된
cscope.out 를 사용하는 것이 편리하다.
문제는 시스템내에 여러 버전의 커널 소스를 유지할때 발생한다.
보통 $ENV 디렉토리를 두어.. 매번 source $ENV/kernel.xxx 을 통해서 버전별 환경설정을 로드한다.
(이러한 환경설정에는 KBUILD_SRC 와 CSCOPE_DB 와같은 환경 변수들도 존재한다.)
하지만 이런식으로 매번 환경변수들을 source 명령어로 export 하게되면
/lib/modules/커널버전/build 에서 sudo make cscope && sudo make tags 시에 유효하지 않다.
sudo 명령어 때문에 루트 쉘의 환경설정을 불러오기 때문에, export 한 환경변수들이 무효해지기 때문이
다.
따라서 sudo make cscope && sudo make tags 를 해야할 때에는 -e 옵션을 통해서 make 시에 환경변수들
을 포함시키도록 해줘야한다
sudo make cscope -e KBUILD_SRC=$PWD
와 같이...
WRITTEN BY
- RootFriend
개인적으로... 나쁜 기억력에 도움되라고 만들게되었습니다.
,