본문 바로가기

뭐라도 공부해보자!!( 이론 )/하루 공부

임베디드 리눅스 프로그래밍 완전정복 : CH2 툴체인

반응형

 간단하게 CH1에서 다룬 내용들이다.

  • 기기가 복잡해지면서 효율적인 개발을 위해서 OS가 필요해지게 되었고, 임베디드 프로그래밍에 있어서 리눅스는 좋은 선택이다. (다양한 기능, 광범위한 프로세서 아키텍처 지원, 오픈소스, 활발한 커뮤니티, 소스 코드에 대한 접근 보장-오픈 라이선스)
  • OS를 선택하는 데는 다양한 기준이 있다.(하드웨어 스펙, 기술 스택, 실시간 시스템 필요성 유무 등)
  • 오픈소스 소프트웨어에 관여하는 단체들에는 다음과 같은 것들이 있다. 개발에 있어서 오픈소스를 활용하는 것은 당연한 일이고, 동시에 기여하는 것도 개발자로서의 성장에 중요한 일이다.
  • 오픈소스 커뮤니티 : 말그대로 오픈소스들이 개발되고 개선되는 커뮤니티이다. 개발자들에 의해 조직된 느슨한 커뮤니티이고, 경우에 따라서는 학회, 기업 등 단체의 지원을 받기도 한다. 
  • CPU 설계자 : CPU를 개발하는 회사들이다. ARM, 인텔, 이매지네이션 테크놀로지, IBM 등이 있다. 
  • SoC 벤더 : CPU 설계자의 기본적인 설계를 바탕으로 고객이 원하는 형태의 SoC(Service on Chip)를 개발한다.
  • 보드 밴더와 OEM : SoC 밴더로부터 레퍼런스 설계를 받아서 특정 제품에 끼워 넣거나, 개발 보드를 만드는 등의 일을 한다. 
  • 임베디드 프로젝트의 생명 주기는 (보드 브링업->시스템 아키텍어와 설계상의 선택->임베디드 응용 프로그램 작성->디버깅과 성능 최정화)로 구성된다. 각 단계는 반드시 선형적이지 않고, 필요한 경우 왔다갔다 할 수 있다.
  • 임베디드 리눅스 프로젝트를 구성하는 요소는 툴체인(타깃 장치를 위한 컴파일러와 필요 도구), 부트로더(타깃 장치를 초기화하고 커널을 로딩), 커널(시스템 자원 관리 및 하드웨어와 응용 프로그램 사이의 접점 제공, 제일 중요), 루트 파일 시스템(커널의 초기화 완료 후 실행되는 프로그램 및 라이브러리 저장)이다.
  • 하드웨어를 선정하는 기준은 CPU 아키넥처, 적절한 크기의 RAM, 비휘발성 메모리, 디버깅 포트의 유무 및 디버깅 장치가 없는 경우 로딩 수단 등이 있다. 

 이 책은 비글본 블랙과 QEMU 에뮬레이터를 타깃 보드 또는 환경으로 정하고 있다. 특히 QEMU는 ARM, MIPS, 파워PC 등 다양한 하드웨어 환경을 가정하고 에뮬레이팅 할 수 있도록 한다. (사용법은 실습하면서 익힐 것!!)

 

CH2 툴체인에 대해서 알아본다.

 툴체인은 임베디드 리눅스의 첫 요소이자, 프로젝트의 시작점이다. 하드웨어의 특성을 고려하여 적절한 명령어 세트, 언어, POSIX 및 시스템 인터페이스를 제공하는 툴체인을 선정해야 한다. 한 번 선정한 툴체인은 프로젝트를 진행하는 동안 변경되지 않는다.(그렇기에 더욱더 신중해야한다.)

  • 툴체인 : 소스코드를 타깃 장치에서 실행할 수 있도록 하는 컴파일러, 링커, 런타임 라이브러리를 포함하는 컴파일 도구 집합, 커널, 부트로더, 루트 파일시스템 등을 빌드하기 위해서는 툴체인이 필요하다. GCC, Clang 등이 있다. 
  • 툴체인을 크게 네이티브 툴체인과 크로스 툴체인으로 분류할 수 있다. 개발 환경과 타깃 환경이 동일한 경우 네이티브, 다른 경우 크로스이다. 대부분 개발 환경과 타깃 환경은 다르며, 설사 같더라도 개발 환경이 타깃 환경에 비해 업데이트 등이 활발하게 이루어지므로 분리하는 것이 밞직하다. 
  • CPU의 특징 :  CPU 아키텍처(ARM, MIPS, x86, x64 etc), 빅엔디안(상위 비트 먼저 저장) vs 리틀엔디안(하위 비트 먼저 저장), 부동소수점 지원(하드웨어 지원 or 소프트웨어 지원), ABI(함수 호출 간에 인자를 넘기는 호출 규칙) => 해당 요소를 고려하여 툴체인을 선정한다.
  • POSIX : 이식 가능 운영 체제 인터페이스, UNIX OS의 공통 API를 정리하여 이식성 높은 유닉스 응용 프로그램 개발을 목적으로 IEEE가 책정한 어플리케이션 인터페이스 규격
  • C 라이브러리는 커널 시스템 호출 인터페이스를 제공한다 - glibc, musl libc, uClibc-ng, eglibc 등등

Crosstool-NG는 크로스 개발 툴체인을 만드는 툴체인이다. (굳이 일일이 툴체인을 빌드하는 수고를 덜어준다!!), 물론 더 쉬운 방법은 Buildroot, Yocto와 같은 빌드를 자동화하는 프로그램을 이용하는 것이다.

 

Hyper-V에 Ubuntu 16.04 버전으로 실습을 진행할 예정이다.

 

 

반응형