'컴파일'에 해당되는 글 2건

  1. 2009.09.02 순대보드 Kernel Image
  2. 2008.10.24 에디트 플러스에서 C 컴파일, 실행 하기 4
2009. 9. 2. 16:00

순대보드 Kernel Image



저번 시간까지 해서 'uboot 포팅'까지 완료되었다. uboot를 통해서 리눅스, WinCE와 같은 운영체제를 올릴 수 있는 기반이 준비된 것이다.

이번에 할 일은.. AHAV9302 순대보드에 올릴 리눅스 커널을 만들것이다.

일단 순대국밥님 강좌에 있는대로 Linux Kernel 2.6.22.8 을 올릴 것이고, ftp://ftp.kernel.org에 들어가서 해당 버전의 리눅스 커널을 /opt/arm9sbc/ahav/backup 디렉토리에 다운로드 받는다.
$ wget ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.22.8.tar.bz

커널 작업을 하기 위해서 아래와 같이 /opt/arm9sbc/ahav/kernel 디렉토리에 압축을 푼다.
$ cd ${AHAV_KERNEL_DIR}
$ tar -C ${AHAV_KERNEL_DIR} -xjf ${AHAV_BACKUP_DIR}/linux-${AHAV_KERNEL_VER}.tar.bz2

AHAV9302의 리눅스 커널과 네트웍 포팅을 위해 디렉토리 하나를 추가 생성한다. 나중에 파일시스템 관련해서 꼭 필요한 부분이란다. 미리 만들어 준다.
$ mkdir -p ${AHAV_HOST_DIR}/${AHAV_KERNEL_VER}
$ ln -s ${AHAV_KERNEL_DIR}/linux-${AHAV_KERNEL_VER}/include
          ${AHAV_HOST_DIR}/${AHAV_KERNEL_VER}/include

압축을 해제한 리눅스 커널에서 수정하거나 새로 생성해야하는 파일에는 다음과 같은것들이 있다.
[U] 는 기존의 파일을 수정할 것이고, [N] 은 새로 생성해 주어야 하는 파일을 명시한 것이다.
    [U] arch/arm/mach-ep93xx/Kconfig
    [U] arch/arm/mach-ep93xx/Makefile
    [U] arch/arm/mach-ep93xx/Makefile.boot
    [N] arch/arm/mach-ep93xx/ahav9302.c
    [U] arch/arm/tools/mach-types
    [U] include/asm-arm/arch-ep93xx/hardware.h
    [U] include/asm-arm/arch-ep93xx/memory.h
    [N] include/asm-arm/arch-ep93xx/ahav9302.h
    [U] arch/arm/kernel/setup.c
    [U] arch/arm/boot/Makefile

커널 머신(kernel machine) 선택메뉴(arch/arm/mach-ep93xx/Kconfig)에 AHAV를 선택할 수 있는 메뉴를 추가한다.
$ vi arch/arm/mach-ep93xx/Konfig

Makefile에도 새로운 커널 머신이 추가 되었다는 것을 알려주어야 한다. arch/arm/mach-ep93xx/Makefile 파일을 열어 마지막 부분에 아래와 같이 한줄을 추가한다.
$ vi arch/arm/mach-ep93xx/Makefile

다음은 AHAV9302의 SDRAM 연결을 참조하여 arch/arm/mach-ep93xx/Makefile.boot 의 커널 시작주소를 수정한다. 앞서 말한 적이 있지만 AHAV9302 보드에서 SDRAM의 메모리 맵 주소는 0xC0000000이다.
$ vi arch/arm/mach-ep93xx/Makefile.boot


이제부터는 타겟보드인 AHAV9302에 관련된 파일을 생성해서 작업을 할것이다. 무작정 처음부터 새로 생성해서 하는 것보다 기존에 있는 동일한 혹은 비슷한 칩에대한 파일을 구해서 수정을 하는 것이 정신건강에 좋다고 한다.
"arch/arm/mach-ep93xx/"
디렉토리의 "edb9302.c" 파일을 복사해 "ahav9302.c" 를 만들어 수정하면 된다.
순대국밥님이 미리 수정해 놓은 파일을 사용해도 된다. edb9302.c를 ahav9302.c에 맞게 수정한 파일인데, 두 파일을 비교해보는 것도 좋을 듯 하다. 얼핏 봐서는 이더넷 관련 부분이 추가된듯 하다.

다음은 uboot에서도 살펴본듯한 머신타입(arch/arm/tools/mach-types) 파일에 ahav9302 관련된 부분을 넣어준다.
$ vi arch/arm/tools/mach-types

"include/asm-arm/arch-ep93xx/hardware.h"의 마지막에 새로 생성할 ahav9302.h를 포함시킨다.
$ vi include/asm-arm/arch-ep93xx/hardware.h

SDRAM의 시작주소가 0xC0000000 부터 시작되고 있으니 "include/asm-arm/arch-ep93xx/memory.h" 의 PHYS_OFFSET을 아래와 같이 0xC0000000으로 변경한다.
$ vi include/asm-arm/arch-ep93xx/memory.h

"include/asm-arm/arch-ep9302xx/ahav9302.h" 파일은 현재로썬 별 내용이 없기에 그냥 빈 파일로 만들어 두면 된다. 후에 하드웨어를 구현하면서 필요한 선언들을 넣어주는 용도로 사용하면 된다.

AHAV9302 가 64MB 이므로, "arch/arm/kernel/setup.c" 파일의 42번째 줄에서 MEM_SIZE를 (16*1024*1024)에서 (64*1024*1024)로 변경을 해주어야 한다.
$ vi arch/arm/kernel/setup.c

"arch/arm/boot/Makefile"
의 64 번째 줄에 있는 부분을 아래와 같이 변경한다.
이전의 uboot 포팅에서 만들어진 /usr/bin/mkimage가 여기서 사용된다. 커널이 적재되어야 할 주소를  미리 지정해 놓고, 압축이 풀리는 곳의 지정을 다르게 하여 좀 더 효율적으로 한다는데.. 아직 이해 부족.. -_-
$ vi arch/arm/boot/Makefile


자!! 이제부터 커널 컴파일이다.

컴파일 하기 위해서 커널의 설정을 해주어야 하는데.. 음.. 아직 잘 모르겠어.. ㅡ.ㅜ
다행히 순대국밥님이 커널 설정에 대한 컨피그 파일을 미리 준비해 주셨다. 그 놈을 사용해서 커널 컴파일을 하면 될 듯 하다.
위의 파일을 받아서 linux-2.6.22.8 디렉토리로 복사하고, 파일 이름을 .config 라는 이름으로 바꾸어 준다.
아래의 명령을 사용해서 생성하려는 커널의 설정에 대해 확인할 수 있다.
$ cd ${AHAV_KERNEL_DIR}/linux-${AHAV_KERNEL_VER}
$ make ARCH=arm CROSS_COMPILE=arm-linux- menuconfig

아래의 명령을 사용해 AHAV9302의 리눅스 커널을 컴파일 하자!!
clean은 기존의 것들을 지우고 모두 새로 컴파일을 하겠다는 것이고, uImage는 /usr/bin/mkimage를 이용해서 커널을 uboot Image로 만들겠다는 뜻이다.
$ make ARCH=arm CROSS_COMPILE=arm-linux- clean
$ make ARCH=arm CROSS_COMPILE=arm-linux- uImage

한참을 컴파일을 할 것이다.
정상적으로 컴파일이 되었다면 "arch/arm/boot/"에 커널이미지(uImage)가 생성되었을 것이다.

이 녀석을 다음 작업을 하기위한 경로로 이동을 시키자!!
$ cp ${AHAV_KERNEL_DIR}/linux-${AHAV_KERNEL_VER}/arch/arm/boot/uImage  
       ${AHAV_KERNEL_DIR}/.post/.
$ cp ${AHAV_KERNEL_DIR}/.post/uImage ${AHAV_IMAGES_DIR}/${AHAV_PROJECT_NAME}/.

이렇게 해서 AHAV9302 순대보드를 위한 리눅스 커널은 준비가 된 것이다.

이해 못할 부분들이 많이 있는데.. 일단 따라해보며 순대보드에 리눅스를 올리는 것까지 한 번 해보고, 필요한 부분들을 찾아가며 다시 공부를 해봐야 할 듯 하다.
무작정 하면 첨부터 완전 질려버려 아무것도 못할 듯... -_-;


'혼자서 놀기... > 순대보드(AHAV9302)' 카테고리의 다른 글

순대보드 u-boot - 4  (0) 2009.09.02
순대보드 u-boot - 3  (0) 2009.08.11
순대보드 u-boot - 2  (0) 2009.08.11
순대보드 u-boot - 1  (4) 2009.04.02
순대보드 CrossCompile 환경 - 2  (0) 2009.04.01
2008. 10. 24. 11:50

에디트 플러스에서 C 컴파일, 실행 하기


VS2005를 사용해서 윈도우즈 상에서 프로그래밍을 하고 있는데.. 솔직히 너무 무겁다. 구지 GUI를 사용하지 않는 프로그램이나 간단한 테스트 프로그램을 작성해서 테스트를 하려 해도 프로젝트를 생성해야하고.. 이런 저런.. -_-;
그래서 보다 가벼운 에디터를 사용해서 사용할 수 있는 방법을 알아보았더니 에디트 플러스와 같은 에디터에 C 컴파일러를 연동해서 프로그래밍을 할 수 있는 방법이 있어서 사용을 해보려 한다.

먼저 에디트 플러스에서 C 언어를 컴파일 하기 위해서는 우선 컴파일러가 준비되 있어야 한다. 개인적으로 VS2005를 사용하기 때문에 MS에서 제공하는 컴파일러를 사용할 것이다.

에디트 플러스를 실행하고, 도구(T) - 기본 설정(T)를 선택한다.
그리고 기본 설정 창의 왼쪽의 항목(C)란에서 도구-사용자도구를 선택한다. 그리고 오른쪽 그룹과 도구 항목에서 추가(D)>> - 프로그램(P)를 선택한다.
메뉴의 도구 - 기본 설정 클릭, 기본 설정 항목의 사용자도구 선택, 그룹과 도구항목의 추가 - 프로그램

추가 버튼을 클릭한 후 메뉴제목, 명령, 인수, 디렉토리 항목을 각각 채워 넣는다.
본인의 경우 메뉴제목'C compiler'로 했다.
명령은 우측의 ...버튼을 클릭하면 파일을 선택하는 창이 뜨는데 다음의 경로(C:\Program Files\Microsoft Visual Studio 8\VC\bin)로 가서 'cl.exe'를 선택한다.
인수는 우측의 화살표 버튼을 클릭해 파일이름을 선택한다.
디렉토리도 마찬가지로 우측의 화살표 버튼을 클릭해 파일디렉토리를 선택한다.

이것으로 에디트플러스에서 C언어를 컴파일 할 수 있는 환경은 완성 된 것이다.

추가로 생성한 바이너리 파일을 실행할 수 있는 환경을 만들것이다.

컴파일 환경을 만든 것과 동일하게 그룹과 도구 항목의 추가 - 프로그램 을 선택한다.
메뉴제목에 대충 실행할 이름을 넣는다. 본인의 경우 'Run'이라고 입력하였다.
명령$(FileNameNoExt)라고 직접 입력을 한다.
인수는 공란으로 비워둔다.
디렉토리는 오른쪽의 버튼을 클릭하여 파일디렉토리를 선택한다.

이것으로 에디트 플러스에서의 C 언어 컴파일과 실행을 위한 준비는 모두 끝이 났다.
Ctrl+1을 누르면 컴파일이 될 것이고, Ctrl+2를 누르면 해당 명령이 실행될 것이다.

마지막으로 환경변수(시스템 변수)를 세팅해 주어야 한다.

'내컴퓨터-속성-고급-환경변수-시스템 변수-Path' 를 더블클릭하면, 시스템 변수 편집 창이 뜰것이다. 변수값의 마지막에 ';'를 넣은 후 'C:\Program Files\Microsoft Visual Studio 8\VC\bin;C:\Program Files\Microsoft Visual Studio 8\Common7\IDE'를 추가로 입력하고 확인버튼을 클릭한다.

시스템 변수의 새로만들기 버튼을 클릭한 후 아래와 같이 값을 넣고 확인 버튼을 클릭한다.
변수 이름 : INCLUDE
변수 값    : C:\Program Files\Microsoft Visual Studio 8\VC\include

또 다시 시스템 변수의 새로만들기 버튼을 클릭한 후 아래와 같이 값을 넣고 확인 버튼을 클릭한다.
변수 이름 : LIB
변수 값    : C:\Program Files\Microsoft Visual Studio 8\VC\lib

이제 모든 세팅이 완료 되었다. 에디트 플러스를 재실행 한 후 간단한 테스트 프로그램을 작성해 테스트를 해보자
Ctrl+1을 눌러 컴파일을 한 모습

Ctrl+2를 눌러 프로그램을 실행한 모습니다.