커널 버젼은 3.x , CPU는 ARM 멀티코어인 exynos4를 선택한다.
1. 커널 소스 받기
1. 커널 소스 받기
2. 툴체인 설치하기
1) codesourcery 에서 다운로드 ( http://www.codesourcery.com/sgpp/lite/arm )
2) root 권한으로 설치
$ cd /
$ tar zxvf /다운로드경로/codesourcery.tar.gz
$
3) 툴체인은 codesourcery 것을 사용한다.
일전에 3개의 툴체인을 동일한 환경에서 벤치마크를 한 적이 있다.
예상대로 codesourcery가 가장 빠른 성능을 보였다.
4) 예전에 받은 것을 그대로 사용한다. 만약 최근에 릴리즈 된 툴체인을 사용하려 한다면, 다운로드 URL과
설치 경로가 지금 기록과 다를 수 있다.
일전에 3개의 툴체인을 동일한 환경에서 벤치마크를 한 적이 있다.
예상대로 codesourcery가 가장 빠른 성능을 보였다.
4) 예전에 받은 것을 그대로 사용한다. 만약 최근에 릴리즈 된 툴체인을 사용하려 한다면, 다운로드 URL과
설치 경로가 지금 기록과 다를 수 있다.
3. 환경변수 설정 및 컴파일 테스트
1) 툴체인의 설치 경로는 /opt/codesourcery/ 밑으로 된다.
2) 환경변수 PATH에 컴파일러 및 실행 가능한 파일의 경로 /opt/codesourcery/bin 를 추가한다.
3) 툴체인을 검증하기 위해서 테스트로 컴파일 해 본다.
$ export PATH=$PATH:/opt/codesourcery/bin
$ arm-none-linux-gnueabi-gcc -o test test.c
$
4) 로그인시 자동 설정되도록 ~/.bash_profile 수정
$ vi ~/.bash_profile
PATH=$PATH:$HOME/bin:/sbin:/opt/codesourcery/bin
export PATH
4. 커널 컴파일
$ cd /KERNEL_ROOT/
$ export ARCH=arm
$ export CROSS_COMPILE=/opt/codesourcery/bin/arm-linux-
$ make distclean
$ make exynos4_defconfig
$ make V=1 > make.out 2>&1
$
1) 환경변수 ARCH, CROSS_COMPILE를 설정 하는 이유는 별도의 Makefile 수정 없이
해당 ARCH와 툴체인으로 컴파일 하기 위해서다.
2) 커널 설정은 exynos4_defconfig ( arch/arm/configs/exynos4_defconfig ) 를 기본으로
특별한 변경없이 사용한다.
3) make 의 V=1 옵션은 컴파일 내용을 자세히 출력하고, make.out 으로 리다이렉션 하는 것은
혹, 나중에 컴파일 과정이 궁금해 질 수 있기 때문이다.
해당 ARCH와 툴체인으로 컴파일 하기 위해서다.
2) 커널 설정은 exynos4_defconfig ( arch/arm/configs/exynos4_defconfig ) 를 기본으로
특별한 변경없이 사용한다.
3) make 의 V=1 옵션은 컴파일 내용을 자세히 출력하고, make.out 으로 리다이렉션 하는 것은
혹, 나중에 컴파일 과정이 궁금해 질 수 있기 때문이다.
5. ctags, cscope 생성
$ export ARCH=arm
$ export CROSS_COMPILE=/opt/codesourcery/bin/arm-linux-
$ rm -f tags cscope.*
$ make tags
$ make cscope
1) make 에 의한 ctags, cscope의 생성은 검색 되는 코드의 ARCH 가 arm에 존속되도록 한다.
6. 어셈블리 코드 생성
1) 커널의 어셈블리 코드 생성
$ arm-linux-objdump -d vmlinux > vmlinux.objdump
2) 압축된 커널의 어셈블리 코드 생성
$ cd arch/arm/boot/compressed/
$ arm-linux-objdump -d vmlinux > vmlinux.objdump
3) 어셈블리 코드를 생성 해 두는 이유는 소스 분석 중에 복잡한 전처리 과정,
코드의 살리고, 버리는 부분이 모호 할때, 상수 값이 모호 할때 참조 하면 유용하다.
코드의 살리고, 버리는 부분이 모호 할때, 상수 값이 모호 할때 참조 하면 유용하다.
'리눅스커널' 카테고리의 다른 글
[다시 보는 ARM 3.x 커널] 커널 분석 어디서 부터 시작 하는가? (0) | 2011.09.22 |
---|---|
[다시 보는 ARM 3.x 커널] make 로그로 분석하는 컴파일 과정 (0) | 2011.09.22 |
[ kmem_cache_init ] mm/slab.c (0) | 2009.10.02 |
[ IRQ 처리 ] (0) | 2009.10.02 |
[ cpu_init ] arch/arm/kernel/setup.c (0) | 2009.10.02 |