책 소개
요약
임베디드 시스템의 개요를 익히고, 욕토 프로젝트를 이용해 임베디드 리눅스 시스템에서의 개발을 쉽게 시작할 수 있다. 오픈임베디드 빌드 시스템, 비트베이크 빌드 엔진, 문제 해결, 리눅스 시스템 구조, 커스텀 리눅스 배포판 제작, 소프트웨어 패키지 레시피와 커널 레시피 작성법, 보드 지원 패키지 제작 및 그 외 임베디드 리눅스 시스템 개발에 필요한 도구들 모두 알아본다.
추천의 글
임베디드 리눅스는 미국의 옛 서부 지역과 어떤 면에서 조금 닮았다. 당시 서부 지역에는 여러 기술의 전초 기지들이 여기저기 흩어져 있었고, 그 사이에 불모지와 위험한 풍경들이 자리 잡고 있었다. 따라서 만일 그곳을 여행하려 한다면, 잘 준비돼 있어야 했고 그 지역에 익숙해져야 했으며 믿을 만한 가이드가 필요했다. 1800년대 중반의 골드러시 시대에 서부로 이주했던 사람들처럼, 개발자들은 사물 인터넷(IoT)에 집중하면서 임베디드 리눅스 세계로 이동하고 있다. 인구 증가가 서부에 법, 질서, 문명을 가져왔듯이, 새로운 오픈소스 소프트웨어 프로젝트가 임베디드 리눅스에 질서를 가져왔다는 것이다. 욕토(Yocto) 프로젝트는 질서를 가져온 의미 있는 프로젝트다. 이 도구들은 만들고자 하는 프로젝트의 디자인에 집중할 수 있게 해주고, 원하는 디자인으로 만드는 데 필요한 시간과 노력을 최소화해준다. 이 책은 신뢰할 만한 안내서로, 명확하고 완벽한 지침을 제공하고 논리적으로 정렬돼 여러분의 작업과 IoT 프로젝트를 완료할 수 있도록 도움을 준다. 그리고 운이 좋으면, 재미있게 즐길 수도 있다. 모험을 즐겨라! / 아놀드 로빈스(Arnold Robbins)
이 책에서 다루는 내용
■ 사용자 정의 임베디드 배포판 생성에 대한 주요 과제 극복
■ 오픈 임베디드 빌드 시스템을 이용한 OS 스택 빌드 시작과 반복
■ 빌드 워크플로우, 아키텍처, 비트베이크 빌드 엔진 습득
■ 신속한 빌드 문제 해결
■ 새로운 소프트웨어 패키지 생성을 위한 비트베이크 레시피 사용
■ 커널 빌드, 환경 설정 세팅, 패치 적용
■ 다양한 CPU 아키텍처 및 시스템 지원
■ 하드웨어 특정 적응을 위한 BSP(보드 지원 패키지) 생성
■ 라운드트립 개발을 위한 ADT(애플리케이션 개발 툴킷) 제공
■ 실제 하드웨어 타깃에서의 애플리케이션 원격 실행 및 디버그
■ 오픈소스 라이선스 규정 보장
■ 토스터, 빌드 히스토리, 소스 미러, 오토빌더를 이용한 팀 기반 프로젝트 확장
이 책의 대상 독자
이 책은 리눅스 기반으로 작업하는 소프트웨어 개발자와 프로그래머들을 위한 책이다. 리눅스 명령어를 알고 있다면, 메이크(Make)와 C/C++ 컴파일러 같은 전형적인 툴을 사용해 리눅스 시스템에 프로그램을 빌드할 수 있으며, 기본적인 셸 스크립트를 보고 이해할 수 있다. 빌드 시스템은 거의 파이썬으로 만들어졌다. 작업 방식을 이해하거나 사용하기 위해 파이썬 전문가가 될 필요는 없지만, 파이썬에 대한 핵심 지식을 갖췄다면 경우에 따라 유리할 수 있다.
이 책의 구성
1장. '임베디드 시스템을 위한 리눅스'에서는 임베디드 시스템을 위한 리눅스 채택에 관해 간략히 설명한다. 임베디드 리눅스 환경의 개요와 커스텀 임베디드 리눅스 배포판 작성의 어려움에 대한 토론의 장을 마련했다.
2장. '욕토 프로젝트'에서는 빌드 시스템을 이용해 초기 리눅스 운영체제 스택 빌드를 시작하는 욕토 프로젝트를 소개한다.
3장. '오픈임베디드 빌드 시스템'에서는 빌드 시스템의 기본, 워크플로우, 아키텍처를 설명한다.
4장. '비트베이크 빌드'에서는 엔진 오픈임베디드 빌드 시스템의 핵심이 되는 빌드 엔진 비트베이크에 대해 알아본다. 레시피, 클래스, 환경 설정 파일의 메타데이터 개념과 문법에 대해 설명한다. 비트베이크(BitBake) 스타일의 헬로 월드(Hello World) 프로젝트는 빌드 워크플로우를 보여준다. 제공된 정보를 통해 이미 생성된 레시피를 이해하고 자신의 레시피를 작성하기 위한 필수 지식을 얻을 수 있다.
5장. '문제 해결'에서는 빌드 문제를 해결하는 데 이용 가능한 도구와 방법을 소개하고, 효과적인 도구 사용과 관련해 실용적인 조언을 제공한다.
6장. '리눅스 시스템 아키텍처'에서는 리눅스 운영체제 스택에 대한 기본 지식을 제공하고, 서로 다른 요소들이 어떻게 구분되는지 설명한다. 커널 영역과 사용자 영역의 개념에 대해 논하고, 표준 C 라이브러리가 제공하는 시스템 콜을 통해 리눅스 커널과 애플리케이션 프로그램이 소통하는 방식을 설명한다.
7장. '커스텀 리눅스 배포판 빌드'에서는 커스텀 리눅스 배포판을 생성하기 위해 욕토 프로젝트를 사용하는 방식을 자세히 살펴본다. 빌드 시스템을 이용한 리눅스 배포 설계와 커스터마이징(사용자 설정) 방식에 대해 검토한 후, 빌드 시스템 도구들을 사용해 리눅스 배포판을 처음부터 완전히 만드는 방법을 알아본다. 7장을 숙지하면, 자신만의 운영체제 이미지를 빌드하는 방법을 알게 될 것이다.
8장. '소프트웨어 패키지 레시피'에서는 비트베이크 레시피와 빌드 시스템을 통해 자신만의 소프트웨어 패키지를 생성하기 위한 레시피 작성법을 설명한다. 실습해볼 수 있도록 다양한 실제 레시피 예제도 제공한다.
9장. '커널 레시피'에서는 오픈임베디드 빌드 시스템을 이용한 리눅스 커널 빌드를 상세히 검토한다. 커널 환경 설정과 패치 적용을 위해 빌드 시스템 도구가 커널 빌드 환경과 어떻게 상호 작용하는지 설명한다. 그리고 빌드 프로세스를 통해 빌드 시스템이 트리 밖 커널 모듈을 다루는 방식과 장치 트리 빌드를 만드는 방법에 대해서도 논한다.
10장. '보드 지원 패키지'에서는 빌드 시스템이 다른 하드웨어(CPU 아키텍처 및 시스템)의 빌드를 지원하는 방식을 소개한다. 욕토 프로젝트 보드 지원 패키지의 개념을 설명한 후, 보드 지원 패키지를 사용해 프로젝트를 생성하는 방식에 대해 상세히 알아본다. 그리고 욕토 프로젝트 보드 지원 패키지의 내부를 살펴보고, 실질적으로 하드웨어에서 사용할 수 있는 실습용 예제를 통해 자신만의 프로젝트를 생성하는 방식을 설명한다. 이번 장은 다른 하드웨어 환경에서 부팅 가능한 미디어 이미지의 생성으로 마무리한다.
11장. '애플리케이션 개발'에서는 빌드 시스템을 이용해 생성된 리눅스 운영체제 스택에서 애플리케이션을 개발하기 위한 욕토 프로젝트 지원을 설명한다. 전체적인 애플리케이션 개발에 필수적인 모든 툴(tool)을 포함하고 있는 애플리케이션 개발 툴킷(ADT)을 빌드하는 방법은 수동으로 명령어를 실행하는 것이다. 예제들은 이클립스(Eclipse) IDE를 이용하는 것뿐만 아니라 명령행 도구를 사용해 애플리케이션을 개발하는 ADT 사용법을 설명한다. 실질적인 하드웨어 대상의 애플리케이션들을 원격으로 실행하고 디버깅하는 방식은 단계적 명령어들을 통해 알 수 있다.
12장. '라이선스 및 규정 준수'에서는 오픈소스 라이선스를 이용하는 경우 준수해야 할 요건과 이러한 사항이 준수되도록 제공된 욕토 프로젝트의 도구에 대해 논한다.
13장. '더 깊은 주제'에서는 욕토 프로젝트를 팀으로 확장하는 데 도움이 되는 몇몇 도구들을 소개한다. 토스터(Toaster)는 웹 브라우저에서 원격으로 조정 가능한 빌드 시스템을 생성하는 데 사용되는 웹 기반 그래픽 사용자 인터페이스다. 빌드 히스토리는 추적 및 검사 능력을 제공하는 도구다. 소스 미러를 이용하면, 반복적인 다운로드 없이 소스 패키지를 공유하고 배포 제품의 소스 버전을 관리할 수 있다. 마지막으로 오토 빌더는 빌드 자동화, 품질 보증, 배포 프로세스까지 다루는 격이 다른 빌드 통합 프레임워크다. 이번 장을 통해 습득한 지식을 바탕으로 욕토 프로젝트를 위한 팀을 효과적으로 구성할 수 있다.
목차
목차
- 1장. 임베디드 시스템을 위한 리눅스
- 1.1 왜 임베디드 시스템에 리눅스인가?
- 1.2 임베디드 리눅스 지형
- 1.3 리눅스 배포판 사용자화: 왜 어려운가?
- 1.4 오픈소스 라이선스에 대한 이야기
- 1.5 조직, 관련 단체, 표준
- 1.6 요약
- 1.7 참조
- 2장. 욕토 프로젝트
- 2.1 첫 욕토 프로젝트 빌드 시작하기
- 2.2 욕토 프로젝트 구성 요소
- 2.3 역사
- 2.4 욕토 프로젝트 용어
- 2.5 요약
- 2.6 참조
- 3장. 오픈임베디드 빌드 시스템
- 3.1 오픈소스 소프트웨어 패키지 빌드
- 3.2 오픈임베디드 워크플로우
- 3.3 오픈임베디드 빌드 시스템 구조
- 3.4 요약
- 3.5 참조
- 4장. 비트베이크 빌드 엔진
- 4.1 비트베이크 얻기 및 설치
- 4.2 비트베이크 실행하기
- 4.3 비트베이크 메타데이터
- 4.4 메타데이터 문법
- 4.5 소스 받기
- 4.6 헬로 월드: 비트베이크 스타일
- 4.7 의존성 다루기
- 4.8 버전 선택
- 4.9 변형
- 4.10 기본 메타데이터
- 4.11 요약
- 4.12 참조
- 5장. 문제 해결
- 5.1 로깅
- 5.2 태스크 실행
- 5.3 메타데이터 분석
- 5.4 개발 셸
- 5.5 의존성 그래프
- 5.6 디버깅 레이어
- 5.7 요약
- 6장. 리눅스 시스템 구조
- 6.1 리눅스인가, GNU/리눅스인가?
- 6.2 리눅스 시스템 해부
- 6.3 부트로더
- 6.4 커널
- 6.5 사용자 영역
- 6.6 요약
- 6.7 참조
- 7장. 커스텀 리눅스 배포판 빌드
- 7.1 코어 이미지: 리눅스 배포판 블루프린트
- 7.2 이미지 처음부터 빌드하기
- 7.3 이미지 옵션
- 7.4 배포 설정
- 7.5 외부 레이어
- 7.6 홉
- 7.7 요약
- 8장. 소프트웨어 패키지 레시피
- 8.1 레시피 레이아웃과 규약
- 8.2 새 레시피 작성
- 8.3 레시피 예제
- 8.4 데브툴
- 8.5 요약
- 8.6 참조
- 9장. 커널 레시피
- 9.1 커널 환경 설정
- 9.2 커널 패치
- 9.3 커널 레시피
- 9.4 트리 밖 모듈
- 9.5 장치 트리
- 9.6 요약
- 9.7 참조
- 10장. 보드 지원 패키지
- 10.1 욕토 프로젝트 BSP 철학
- 10.2 BSP를 이용한 빌드
- 10.3 욕토 프로젝트 BSP 내부
- 10.4 욕토 프로젝트 BSP 생성
- 10.5 튜닝
- 10.6 부팅 가능한 미디어 이미지 생성
- 10.7 요약
- 10.8 참조
- 11장. 애플리케이션 개발
- 11.1 욕토 프로젝트 ADT 내부
- 11.2 욕토 프로젝트 ADT 설정하기
- 11.3 애플리케이션 빌드
- 11.4 이클립스 통합
- 11.5 타깃 에뮬레이션을 통한 애플리케이션 개발
- 11.6 요약
- 11.7 참조
- 12장. 라이선스 및 규정준수
- 12.1 라이선스 관리
- 12.2 소스 코드 관리
- 12.3 요약
- 12.4 참조
- 13장. 더 깊은 주제
- 13.1 토스터
- 13.2 빌드 히스토리
- 13.3 소스 미러
- 13.4 오토빌더
- 13.5 요약
- 13.6 참조
- 부록A. 오픈소스 라이선스
- A.1 MIT License (MIT)
- A.2 GNU General Public License (GPL) Version 2
- A.3 GNU General Public License (GPL) Version 3
- A.4 Apache License Version 2.0
- 부록B. 메타데이터 참조
도서 오류 신고
정오표
정오표
[ p.110 : 4행 ]