이 글은 임베디드 리눅스 프로그래밍 완전정복(저자 : 크리스 시먼즈, 출판 : 에이콘출판)을 학습하면서 정리하기 위해 작성하는 글로, 다소 두서가 없어도 이해해 주기를 바란다.
이전에는 임베디드 기기에 운영체제가 이식되는 일이 많지 않았었다. 메모리 부족, 전력 소모 최소화 등 여러 이유로 복잡하지만 여러 기능을 제공하는 OS를 이식하기 보다는, 사용자가 원하는 기능만을 수행할 수 있게 프로그램을 직접 올리는 경우가 많았다. 최근 반도체 소자 가격 인하, 집적도 향상, 제공 기능의 다양화 등 여러 이유로 보다 개발자의 입장에서 OS를 임베디드 기기에 탑재하는 것이 매력적으로 다가오게 되었다.
- 무어의 법칙(Moore's Law) : 약 2 년마다 최소한의 비용 증가로 반도체 집적회로에 집적할 수 있는 트렌지스터 숫자가 두 배 씩 증가한다는 관측
임베디드 기기에 이식되는 OS 중 가장 대중적인 것을 꼽자면, 리눅스(Linux) 계통의 OS를 꼽을 수 있을 것이다. 그 이유는 다음과 같다.
- 리눅스는 개발자가 필요한 기능들을 이미 갖추고 있다.
- 리눅스는 SoC 설계 중 흔히 볼 수 있는 것들(ARM, MIPS, x86 등등)에 광범위하게 이식되어 있다.
- 소스 코드를 수정할 수 있어 유연하다.
- 리눅스는 활성화된 커뮤니티를 가지고 있다.
- 오픈소스 라이선스가 소스 코드에 대한 접근을 보장하고, 특정 벤더에 종속되지 않는다.
이러한 장점에도 불구하고 한 번쯤은 개발 환경이 리눅스를 비롯한 운영체제의 이식에 적합한 지 따져볼 필요가 있다. 운영체제(리눅스)의 편리함에도 불구하고, 모든 문제를 해결해주는 것도 아니고, 때로는 이식의 대가가 크게 다가올 수도 있다.
- 하드웨어의 성능은 충분한가?
- 개발에 필요한 충분한 지식을 갖추고 있는 가?
- 실시간 시스템인가?
이런 사항들을 꼼꼼히 살펴본 후, 비슷한 개발 사례들을 참고하여 리눅스 등 운영체제의 사용 여부를 결정하는 것이 좋다.
오픈 소스(Open source)는 소스 코드를 공개해 누구나 특별한 제한 없이 그 코드를 보고 사용할 수 있는 오픈 소스 라이선스를 만족하는 코드를 말한다. 임베디드 개발과 관련되 오픈 소스 기여자에는 커뮤니티, CPU 설계자, SoC 벤더, 보드 벤더, OEM 등이 있다.
오픈 소스에도 한계가 있다. 항상 모든 오픈 소스들이 최신의 상태로 모든 기기들에 대해 적용 가능하면 좋겠지만 그렇지 못한 경우들이 과반수이다. 때로는 최신 상태의 코드들과 과거의 코드들이 제대로 머지되지 않은 상태일 수도 있고, 최신 칩에 대해서만 SoC 벤더들이 오픈 소스 개발에 활발하게 참여한다는 점 때문에 업데이트가 끊기는 일도 발생할 것이다. 많은 코드들이 과거의 코드들을 기반에 두고 있어서 호환성, 성능의 문제도 발생할 수 있을 것이다. 이러한 문제를 해결하기 위해서는 개발자 본인이 대처할 수 있는 지식을 갖추는 것이 중요할 것이다.
임베디드 리눅스의 4 요소
- 툴체인 : 타깃 장치를 위한 코드를 만드는 데 필요한 컴파일러 및 기타 도구
- 부트로더 : 보드를 초기화하고 커널을 로드하는 프로그램
- 커널 : 시스템 자원을 관리하고 하드웨어와 어플리케이션 사이를 중계, 사실상 핵심
- 루트 파일 시스템 : 커널이 초기화를 끝낸 후, 실행하는 라이프러리, 프로그램 등의 저장소
- 어플리케이션 : 사용자가 실제로 원하는 기능을 실행
개발자가 굳이 개발 환경 구축을 처음부터 끝까지 다 할 필요는 없다. BuildRoot, Yocto 등 프로젝트 환경 구축을 자동으로 해주는 프로그램들이 시중에 있고, 잘 사용하기만 하면 된다.
리눅스를 이식할 하드웨어를 선정 혹은 설계하기 위해 고려해야할 사항은 다음과 같다.
- 커널이 지원하는 CPU 아키텍처인가?
- 적절한 크기의 RAM을 갖추었는 가?
- 비휘발성 메모리의 크기는 충분한가?
- 디버그 포트를 갖추고 있는가?(필수는 아니지만 있으면 디버깅에 매우 유용하다)
- 아무것도 없이 시작하는 경우, 소프트웨어를 로드할 수단이 있는가?
이 글을 마무리하며. 이 책은 QEMU, 비글본 블랙을 이용한 실습을 제공하고 있다. 전자는 가상으로 하드웨어를 지원하는 프로그램이고 후자는 개발 보드이다. 실습을 따라하며 임베디드 리눅스에 대해 학습해 나갈 계획이다.
'뭐라도 공부해보자!!( 이론 ) > 하루 공부' 카테고리의 다른 글
임베디드 리눅스 프로그래밍 완전정복 : CH2 툴체인 (1) | 2025.03.06 |
---|---|
회로 이론 - 직류 회로, 교류 회로 해석 (0) | 2025.01.14 |
23년 8월 22일 : MakeFile (0) | 2023.08.22 |