Ch2-1: Cross Development Environment

뿌먹코의 탐구생활·2024년 1월 28일
post-thumbnail

목차

1. Host-Target Interfaces

Serial Port (UART cable)

: Host-Target 직렬 통신 포트. 구조 및 구현이 간단하고 오랫동안 사용되어 왔기에 호환성이 좋으며, 저렴함. 반면 속도가 느리고 오류 검출 및 수정이 제한적이며, 전송 거리에 제한이 있음.

네트워크 포트 (LAN UTP cable)

: 컴퓨터 및 기타 네트워크 장치를 네트워크에 연결. 전송 속도가 빠르고 안정적인 장거리 데이터 전송을 지원하며, 여러 장치 연결 가능. 반면 네트워크 인프라 구축에 추가 비용 및 노력이 필요하고 물리적인 케이블을 사용하므로 설치 및 유지보수가 어려움.

USB 포트

: 컴퓨터와 주변 장치를 연결하기 위한 범용 인터페이스. 전송 속도가 빠르고 Plug&Play 기능을 제공하여 장치 연결이 쉬우며, 여러 종류의 장치 지원. 반면 전송거리가 제한적이고 전원 공급 및 호환성, 드라이버 문제가 발생할 수 있음.

2. Cross-compiler and Toolchain

Cross-compiler 개념

: toolchain의 일종. 컴파일러가 실행되는 플랫폼이 아닌, 타겟 플랫폼에서 실행가능한 코드를 생성하는 컴파일러. 임베디드 시스템이나 멀티 플랫폼을 위해 사용하며, 타겟 환경과 빌드 환경을 분리

Toolchain 개념

: HOST 측 sw 및 개발환경 (ex. 컴파일러, 링커, 라이브러리, 디버거 등)으로, 타겟 시스템에서 실행되는 임베디드 sw를 빌드하기 위함.

3. Installing Cross-compiler

Download / install cross compiler

tar jxvf arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux- gnu.tar.bz2 –C /opt/toolchains

setup PATH

/root/.bashrc 파일에 경로 설정 명령을 작성한다. arm-none-linux-gnueabi-gcc 파일이 존재하는 /opt/toolchains/arm-2014.05/bin 디렉토리를 include한다.

vim /root/.bashrc

export CROSS_COMPILE=arm-none-linux-gnueabi -
export PATH=/opt/toolchains/arm-2014.05/bin:$PATH
export ARCH=arm

1) cross compiler를 위한 CROSS_COMPILE 환경변수로 arm-none-linux-gnueabi를 선택한다. 이는 ARM 아키텍처 대상의 GCC(GNU Compiler Collection) 교차 컴파일러이다. '-'는 컴파일러에 전달되는 추가 옵션을 나타낸다.
2) 시스템 경로를 위한 PATH 환경변수로 컴파일러가 설치된 경로를 선택한다. 이로써 터미널에서 컴파일러를 직접 실행할 수 있다.
3) 타겟 아키텍처를 위한 ARCH 환경변수로 arm을 선택한다. (사용할 타겟보드가 ARM 아키텍처이다.)

Check installation

arm-none-linux-gnueabi-gcc -v

-v는 verification의 의미로, 이렇게 하면 설치를 확인할 수 있다.

4. Compile with Cross-compiler

Compile example codes with cross-compiler

arm-none-linux-gnueabi-gcc -static -o hello hello.c

이 과목에서 사용한 타겟 보드는 정적 라이브러리만 지원하여 위와 같은 옵션을 주었다. 바이너리 파일 'hello'가 생성되지만 HOST PC에서 동작은 불가하다. 이는 'hello'가 ARM 아키텍처용 바이너리 파일이기 때문이다. 따라서 타겟 보드로 옮겨서 타겟용 화면에서 실행 가능하다.

정적 라이브러리

  • 사용: 일반적으로 정적 라이브러리는 실행 파일이 특정 라이브러리 버전과의 의존성을 필요로 하는 경우 또는 실행 파일이 단독으로 동작해야 하는 경우
  • 로드: 컴파일 타임에 라이브러리의 코드와 데이터가 실행 파일에 복사. (실행 파일 독립적 동작)
  • 외부 의존성: 없음. 라이브러리가 실행 파일과 함께 배포.
  • 실행 파일의 크기 : 커짐.
  • 기타: 컴파일러 옵션을 통해 사용되는 모든 함수 및 데이터를 명시적으로 선택 가능

동적 라이브러리

  • 사용: 시스템의 자원을 효율적으로 활용하고 라이브러리의 용이한 업데이트 및 유지 관리를 위해 사용.
  • 로드: 런타임에 메모리에 로드 및 실행 (여러 실행 파일에서 공유 가능, 시스템 자원 효율적 사용)
  • 외부 의존성: 있음. 실행 파일과 라이브러리 파일이 함께 배포되어야 함.
  • 실행 파일의 크기: 작아짐. 메모리 사용량 감소.
  • 기타: 동적 라이브러리의 버전 관리와 호환성 필요.

5.-Setting-up-output-device

profile
Computer Science & Engineering / Daily Life

0개의 댓글