커널 버젼은 3.x , CPU는 ARM 멀티코어인 exynos4를 선택한다.

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. 환경변수 설정 및 컴파일 테스트
  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 으로 리다이렉션 하는 것은
     혹, 나중에 컴파일 과정이 궁금해 질 수 있기 때문이다.
 
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) 어셈블리 코드를 생성 해 두는 이유는 소스 분석 중에 복잡한 전처리 과정,
      코드의 살리고, 버리는 부분이 모호 할때, 상수 값이 모호 할때 참조 하면 유용하다.
 
Posted by blee
,