임베디드/[ Embedded ]

[ Embedded ] 21. 임베디드 개발환경(Toolchain, Compile...)

kim.svadoz 2020. 10. 29. 17:40
반응형

5. 임베디드 개발환경


Tool - Chain ?

image-20201029140404027

리눅스에는 “gcc” 라는 C 컴파일러가 있다. 리눅스에서 gcc 컴파일러로 컴파일할 때 별도의 출력 파일 이름을 지정하지 않으면 a.out이라는 이름으로 생성된다. 생성된 파일은 “실행 가능한 ELF 파일” 타입으로 되어 있다. 즉, UNIX나 Linux에서 gcc로 컴파일하면 무조건 ELF 파일이 생성된다.

컴파일 과정(Compile)

  • 텍스트로 되어 있는 소스 코드 파일을 이진 바이너리(Binary) 코드로 변환하는 과정.
  • 가장 먼저 실제 컴파일을 진행하기 전에 소스 코드 상에 "#"(전처리기, Preprocessor)으로 처리되어 있는 부분들을 먼저 처리한다.
  • 이후에 처리가 끝나면 C 문법 검사를 하게 된다. 오류가 없다면 이진 바이너리 코드로 변환을 하게 되고 이 때 생성되는 파일이 ELF 타입이다.
    • Relocatable ELF : 스스로 실행이 불가능한 바이너리 파일로 누군가 실행을 시켜줘야 되는( = 그래서 메모리에 올라가는(loading) 주소가 재배치(relocatable)되는) 파일.
    • Executable ELF : 자기 스스로 실행 가능한 파일.(ex. PC Windows 상에서의 "Hello.exe")

링킹 과정(Linking)

  • 컴파일 과정을 통해 생성된 Relocatable ELF 파일로는 실행될 수 없으니, 실행되기 위해 필요한 정보들이 여기에 추가되어야 한다는 점. 이 추가 과정을 링킹이라 한다.

  • 링커(Linker)

    • 링킹 과정에서 자동적으로 정보를 제공
    • 프로그램이 실행되기 위해서 최소한으로 필요한 메모리 용량까지 알아서 계산해 해당 정보를 CPU 정보와 함게 "어딘가"에 저장 시켜준다.
  • 로더(Loader)

    • 프로그램이 실행될 때 OS에서 사용자 응용 프로그램을 실행시켜 주며, "어딘가"에서 CPU, 메모리 등의 정보를 읽어서 프로그램이 요구한 메모리 용량을 할당 받아 메모리 적재(Loading) 시켜준다.

    "어딘가"ELF Header이다. *ELF = ELF Header + ELF Body***

Firmware, RTOS, Non-RTOS?

Tool-chain 종류는 매우 다양하다.

Linux에서는 gcc, glibc, binutils (오픈 소스) / Windows에서는 Visual Studio (상용화된 제품)

임베디드 리눅스가 올라가는 CPU인 32비트 ARM 프로세서의 경우 ARM Core 로직(logic)을 개발한 ARM사에서 개발 및 판매하고 있는 RVDS(RealView Development Suite) 제품 사용(상용)

  • Tool-Chain 중 어떤 기준으로 선택해야 하는가?
    1. 대기업이나 국가 연구소처럼 한 업체(혹은 기관)에서 다루어야 할 CPU 종류가 많을 때에는
      • 상용 Tool-Chain 제품을 선택하는 게 좋다. 다양한 Tool-Chain 만큼 알아야 할 것(헤더 파일, 함수 매크로)이 많아 생산성이 떨어진다.
    2. CPU 제조사에서 개발한 Tool-Chain 이 있다면 해당하는 Tool-Chain을 선택하는 게 좋다.
    3. 기술 지원이 반드시 필요한 경우에는 가급적 상용 Tool-Chain 을 사용하는 것이 좋다.
      • 공개용 Tool-Chain의 장점은 별도의 구매 비용이 발생하지 않는다. 그로 인해 별도의 기술 지원 역시 받을 수 없다.
    4. 특별한 기준이 없을 때는 가급적 사용자가 많이 선택한 Tool-Chain을 사용하라.
반응형