크로스 컴파일 환경 구축
목 차 교차 개발 환경이란? Tool Chain이란? Tool Chain 설치하기 설치 점검
교차 개발 환경 (1) 교차 개발 환경이란? (1) Target system에서 응용 프로그램을 개발할 수 없다 하드웨어 구성이 소프트웨어 개발환경으로 부적합 저성능 CPU 및 메모리 용량 부족으로 컴파일 실행에 무리 소프트웨어 개발 생산성 저하 Target system 개발 방법 Target system보다 성능이 좋은 Host system을 이용하여 target system에서 동작하는 프로그램을 생성 프로그램 작성 및 컴파일은 Host system에서, 프로그램 실행은 Target system에 수행 Target system과 Host system이 서로 다른 형태의 프로세서를 사용하는 경우 cross compiler가 필요 주로 Host system이 target system의 console로 동작 이러한 개발 환경을 교차 개발 환경이라고 함 처음 하드웨어를 만들어 커널을 올리는 작업을 할 때 만들어진 하드웨어엔 아무 프로그램도 올라가 있지 않기 때문에 다른 곳에서 커널을 만들어 하드웨어에 심어줘야 한다. 그러므로 target에서 돌아가는 프로그램을 host에서 만들어 이식해 주어야 하는데, host와 target에 사용되는 processor가 다른 경우 실행은 host에서 되지만 만들어진 코드는 target system에서 돌아갈 수 있는 컴파일러가 필요해 진다. 이 때 cross 개발 환경이 필요하게 되는데 보통 cross compiler 라고 이야기를 한다. 일반적인 작업은 PC나 솔라리스 등과 같은 유닉스 시스템 혹은 워크스테이션과 같이 포팅하려는 타켓 시스템보다 성능이 좋은 시스템에서 수행되어진다. 호스트 시스템을 이용해 다른 프로세서가 잇는 타겟 시스템에서 동작하는 프로그램을 생성해야 하는데 이러한 작업을 할 ㅜ 있는 환경을 교차 개발 환경이라고 한다.
교차 개발 환경 (2) 교차 개발 환경이란? (2) 프로그램 실행 프로그램 작성 및 컴파일 수행 처음 하드웨어를 만들어 커널을 올리는 작업을 할 때 만들어진 하드웨어엔 아무 프로그램도 올라가 있지 않기 때문에 다른 곳에서 커널을 만들어 하드웨어에 심어줘야 한다. 그러므로 target에서 돌아가는 프로그램을 host에서 만들어 이식해 주어야 하는데, host와 target에 사용되는 processor가 다른 경우 실행은 host에서 되지만 만들어진 코드는 target system에서 돌아갈 수 있는 컴파일러가 필요해 진다. 이 때 cross 개발 환경이 필요하게 되는데 보통 cross compiler 라고 이야기를 한다. 일반적인 작업은 PC나 솔라리스 등과 같은 유닉스 시스템 혹은 워크스테이션과 같이 포팅하려는 타켓 시스템보다 성능이 좋은 시스템에서 수행되어진다. 호스트 시스템을 이용해 다른 프로세서가 잇는 타겟 시스템에서 동작하는 프로그램을 생성해야 하는데 이러한 작업을 할 ㅜ 있는 환경을 교차 개발 환경이라고 한다. 프로그램 작성 및 컴파일 수행 Target system 실행 상태 디스플레이 프로그램 실행
교차 개발 환경 (3) 교차 개발 환경이란? (3) Target system과 Host system 간의 인터페이스 Serial I/F – Console 연결, zmodem을 이용한 파일 전송 JTAG I/F – Hardware debugging, Flash memory programming Ethernet I/F – 빠른 속도의 파일 전송, NFS 지원 처음 하드웨어를 만들어 커널을 올리는 작업을 할 때 만들어진 하드웨어엔 아무 프로그램도 올라가 있지 않기 때문에 다른 곳에서 커널을 만들어 하드웨어에 심어줘야 한다. 그러므로 target에서 돌아가는 프로그램을 host에서 만들어 이식해 주어야 하는데, host와 target에 사용되는 processor가 다른 경우 실행은 host에서 되지만 만들어진 코드는 target system에서 돌아갈 수 있는 컴파일러가 필요해 진다. 이 때 cross 개발 환경이 필요하게 되는데 보통 cross compiler 라고 이야기를 한다. 일반적인 작업은 PC나 솔라리스 등과 같은 유닉스 시스템 혹은 워크스테이션과 같이 포팅하려는 타켓 시스템보다 성능이 좋은 시스템에서 수행되어진다. 호스트 시스템을 이용해 다른 프로세서가 잇는 타겟 시스템에서 동작하는 프로그램을 생성해야 하는데 이러한 작업을 할 ㅜ 있는 환경을 교차 개발 환경이라고 한다.
Toolchain (1) Tool Chain 이란? Target system의 소프트웨어 개발을 진행하기 위해 필요한 host system의 cross compile 환경을 뜻함 여러 다른 package로 구성 binutils : 어셈블러 및 로더 기타 툴(GNU) glibc : cross compiler 구축을 위한 library 및 일반 library gcc : compiler - 각종 source를 compile하고 build하여 실행 binary를 생성하는데 필요한 각종 utility 및 library의 모음 - 기본적으로 Assembler, linker, C compiler, C library 등으로 구성되어 있다. - 툴체인이란 프로그래밍 소스를 컴파일 하기위해 필요한 여러도구 들로 합쳐진 개발 컴포넌트이다. 각종 소스를 컴파일하여 실행 바이너리를 생성하는데 필요한 각종 유틸리티 및 라이브러리 모음이며, 어셈블러, 링커, C 컴파일러, C 라이브러리 등으로 구성되어 있다. 호스트 시스템에서 타켓 시스템 용으로 프로그램을 개발하기 위해서는 컴파일러와 링커등의 개발툴이 필요하며, Intel 계열 시스템 기반에서 ARM계열 역시 코드를 생성하기 위해서는 크로스 컴파일 환경이 필요하다.
Toolchain 설치하기 (1) Tool Chain 설치하기 – 설치 준비 HUINS에서 제공한 CD와 Host Host : linux가 설치되어 있는 PC CD 안에 pxa255-toolchain.tar.bz2 파일
CD-ROM 장치를 /mnt/cdrom 디렉토리에 mount Toolchain 설치하기 (2) Tool Chain 설치하기(1) HUINS에서 제공하는 CD를 삽입하고 CD-ROM을 mount한다. CD를 넣으면 자동으로 mount가 됨. mount가 되지 않았을 경우 아래와 같이 실행 - 레드핫 9.0 X-window에서는 일반적으로는 자동으로 mount됨. - 마운트를 해제하게 위해서는 umount /mnt/cdrom 을 입력하면 됨. CD-ROM device name Read only option CD-ROM 장치를 /mnt/cdrom 디렉토리에 mount
Toolchain 설치하기 (3) C. Tool Chain 설치하기(2) cd 명령을 이용하여 mount 된 CD-ROM 으로 이동한다. ls 명령을 치면 CD의 내용을 볼 수 있음 - Mount는 root 권한에서만 가능하기 때문에 일반 계정으로 로긴 했을 경우에는 su -l 명령을 이용하여 root로 재로긴해야함 Tool Chain file
Toolchain 설치하기 (4) C. Tool Chain 설치하기(3) cp 명령을 이용하여 Tool Chain 파일을 /usr/local/arm으로 copy ls 명령으로 copy가 잘 되어 있는지 확인 후 usr/local/arm 디렉토리로 이동 arm directory 생성 주의 할 점은 꼭 /usr/local/arm에 tool chain을 풀어야 하는데 그 이유는 kernel compile할 때 makefile안에 cross compiler의 경로가 /usr/local/arm으로 되어 있기 때문. 다른 경로에 풀면 kernel compile할 때 에러 발생. Kernel source의 makefile안에서 tool chain의 경로가 /usr/local/arm으로 되어 있기 때문에 반드시 이 경로에 tool chain을 설치해야 함
Toolchain 설치하기 (5) C. Tool Chain 설치하기(4) tar 명령을 이용하여 압축을 풀면 Tool Chain은 자동으로 설치됨. 설치 후 ls 명령으로 잘 설치 되었는지 확인 j 옵션은 bunzip2의 확장자를 가진 압출 파일을 풀 때 사용 Bunzip2로 압축된 파일은 bz2라는 확장자를 가진다. tar 옵션 중에 j는 bz2를 풀 때 사용하는 옵션. bunzip2 pxa255-toolchain.tar.bz2 로 bunzip을 푼 후 tar xvf pxa255-toolchain.tar로 풀어도 됨.
Toolchain 설치하기 (6) C. Tool Chain 설치하기(5) 다음으로 path를 잡아주어야 함. cd를 쳐서 자신의 root 디렉토리로 이동 .bashrc 을 vi로 open. /usr/local/arm/bin 에 arm-linux-gcc compiler가 설치되어 있는데 이를 모든 디렉토리에서 사용 가능하게 하기 위해 path를 잡아주어야 함. 자신 계정의 root 디렉토리에 가서 ls –a를 치면 .bashrc가 있음.
/usr/local/arm/bin에 tool chain에서 설치한 여러 compiler가 있음. C. Tool Chain 설치하기(6) PATH 를 아래와 같이 설정해줌. /usr/local/arm/bin에 tool chain에서 설치한 여러 compiler가 있음. PATH 부분에 콜론을 삽입 한 뒤에 cross compiler가 있는 /usr/local/arm/bin 경로를 지정해줌.
Toolchain 설치하기 (8) C. Tool Chain 설치하기(7) 수정된 .bashrc는 source 명령을 사용하여 적용됨 Source 명령은 수정한 .bashrc을 적용시킬 때 사용.
Toolchain 설치하기 (9) C. Tool Chain 설치하기(8) hello.c 라는 Test file을 만든다.
Hello라는 object file이 생성 Toolchain 설치하기 (10) C. Tool Chain 설치하기(9) 설치된 arm용 cross compiler를 이용하여 compile한다. hello라는 object 파일이 만들어졌는지 확인한다. arm용 cross compiler Arm-linux-gcc 는 arm용 cross complier. /usr/local/arm/bin에 위치. Hello라는 object file이 생성
Toolchain 설치하기 (11) C. Tool Chain 설치하기(10) 만들어진 hello object 파일을 실행시켜본다. 아래 그림처럼 error가 발생하면 설치 성공. file이라는 명령어를 이용하여 file의 속성을 확인 Hello object 파일은 arm용 컴파일러를 통하여 컴파일 했기 때문에 i386계열 PC에서는 동작이 안됨. File 명령어를 이용하여 결과를 보면 arm용 object 파일이라는 것을 알 수 있음. ARM용 object 파일 의미