Top

욕토 프로젝트로 시작하는 임베디드 리눅스 시스템

  • 원서명Embedded Linux Systems with the Yocto Project (ISBN 9780133443240)
  • 지은이루돌프 스트라이프(Rudolf Streif)
  • 옮긴이김세영, 정윤선
  • ISBN : 9791161751436
  • 40,000원
  • 2018년 04월 23일 펴냄
  • 페이퍼백 | 576쪽 | 188*235mm
  • 시리즈 : 임베디드 시스템

책 소개

요약

임베디드 시스템의 개요를 익히고, 욕토 프로젝트를 이용해 임베디드 리눅스 시스템에서의 개발을 쉽게 시작할 수 있다. 오픈임베디드 빌드 시스템, 비트베이크 빌드 엔진, 문제 해결, 리눅스 시스템 구조, 커스텀 리눅스 배포판 제작, 소프트웨어 패키지 레시피와 커널 레시피 작성법, 보드 지원 패키지 제작 및 그 외 임베디드 리눅스 시스템 개발에 필요한 도구들 모두 알아본다.

추천의 글

임베디드 리눅스는 미국의 옛 서부 지역과 어떤 면에서 조금 닮았다. 당시 서부 지역에는 여러 기술의 전초 기지들이 여기저기 흩어져 있었고, 그 사이에 불모지와 위험한 풍경들이 자리 잡고 있었다. 따라서 만일 그곳을 여행하려 한다면, 잘 준비돼 있어야 했고 그 지역에 익숙해져야 했으며 믿을 만한 가이드가 필요했다. 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)는 웹 브라우저에서 원격으로 조정 가능한 빌드 시스템을 생성하는 데 사용되는 웹 기반 그래픽 사용자 인터페이스다. 빌드 히스토리는 추적 및 검사 능력을 제공하는 도구다. 소스 미러를 이용하면, 반복적인 다운로드 없이 소스 패키지를 공유하고 배포 제품의 소스 버전을 관리할 수 있다. 마지막으로 오토 빌더는 빌드 자동화, 품질 보증, 배포 프로세스까지 다루는 격이 다른 빌드 통합 프레임워크다. 이번 장을 통해 습득한 지식을 바탕으로 욕토 프로젝트를 위한 팀을 효과적으로 구성할 수 있다.

저자/역자 소개

지은이의 말

스마트 홈, 스마트 카, 스마트폰, 스마트 TV, 스마트 서모 스탯, 스마트 라이트, 스마트 시계, 스마트 세탁기, 스마트 드라이, 스마트 냉장고, 스마트 농구 등 모든 것이 스마트한 신세계에 온 것을 환영한다.
우리가 일상생활에서 접촉하고 상호 작용하는 거의 모든 것들에 임베디드 컴퓨터가 확산되면서 임베디드 시스템 엔지니어링과 임베디드 소프트웨어 개발이 각광받고 있다. 사용자가 직접 볼 수 없는 임베디드 시스템에서는 호화로운 사용자 인터페이스를 가진 웹 애플리케이션의 매력이나 애니메이션 몰입형 그래픽을 가진 컴퓨터 게임의 시원함은 찾아보기 어렵다. 그런 까닭에 컴퓨터공학도와 소프트웨어 개발자들이 첫 직업으로 임베디드 소프트웨어 엔지니어를 생각하지 않는다는 것은 놀라운 일이 아니다. 그러나 ‘스마트 혁명’과 IoT가 하드웨어와 소프트웨어 세계를 연결할 수 있는 전문가를 필요로 하고 있다. 따라서 전자적 도식 언어(electric shematics language)와 프로그래밍 언어를 다루는 전문가들은 고용인에게 인기 있다.
리눅스는 폭발적으로 증가하는 임베디드 애플리케이션에 먼저 선택됐다. 이러한 선택에는 이유가 있으며, 이에 관해 앞으로 자세히 설명할 것이다. 나는 다양한 산업 분야의 임베디드 소프트웨어 개발자로서 임베디드 시스템 리눅스를 배우는 것은 결코 쉽지 않았다. 사실 모든 프로그래밍 언어를 위한 훌륭한 개발 도구들은 부족함이 없다. 리눅스를 위한 방대한 양의 라이브러리와 애플리케이션들의 도구를 사용하면 기본적으로는 쉽게 구축할 수 있다. 사전 지식 없이 리눅스 커널을 빌드하는 것조차 커널 자체의 빌드 시스템을 사용한다. 그렇지만 부팅 가능한 시스템에 모든 요소를 통합하는 것에 관한 선택 사항은 부족하다.
욕토 프로젝트는 오픈임베디드 빌드 시스템을 중심으로 하는 포괄적인 통합 도구 세트를 제공함으로써 그 격차를 좁혔다. 몇 시간 안에 소스 코드부터 부팅 가능한 시스템까지 구현할 수 있다. 내가 임베디드 리눅스를 시작했을 때, 이러한 것들이 있었으면 얼마나 좋았을까?

지은이 소개

루돌프 스트라이프(Rudolf Streif)

개발자이자 100명 이상의 멤버가 있는 크로스 개발 엔지니어링 팀을 이끄는 관리자며, 20년 이상의 소프트웨어 엔지니어링 경력을 보유했다. 현재 오픈소스 영역의 전문적인 소프트웨어 기술 및 시스템 아키텍처에 대한 개인 컨설턴트가 됐다. 이전에는 리눅스 재단의 임베디드 솔루션 디렉터로 공헌했으며, 리눅스 재단의 욕토 프로젝트 훈련 과정을 개발했다. 여러 회사에 이 과정을 배포하고 리눅스 재단의 이벤트 기간 동안 특강을 진행했다.
1990년대 초부터 리눅스와 오픈소스를 이용해 작업해왔으며 2000년대 이후로는 상업 제품을 개발해왔다. 참여했던 프로젝트로는 고속 산업 이미지 처리 시스템, IPTV 전파 중계소 시스템 및 고객 댁내 장치, 그리고 커넥티드 카와 차량용 인포테인먼트 장치가 있다.
2014년에는 「PC World」가 조사한 기술 세계의 가장 흥미 있는 사람들 50인 가운데 한 명으로 선정됐다.

옮긴이의 말

욕토 프로젝트는 과거 제각각이던 임베디드 소프트웨어 개발 방법을 통합해서 초보자도 임베디드 시스템 개발에 쉽게 접근할 수 있도록 플랫폼을 제공한 솔루션입니다. 욕토 프로젝트가 소프트웨어 레시피뿐 아니라 커널 레시피도 지원하는 덕분에 응용 소프트웨어뿐 아니라 커널에 대한 구성도 개발자 입맛에 맞게 수정해 사용할 수 있습니다. 또한 욕토 프로젝트가 통합 플랫폼으로서 손대고 있는 분야가 많으므로 리눅스의 기본을 비롯해 빌드 시스템, 테스트를 위한 가상 머신의 사용 등 다양한 분야에 걸쳐 관련 지식을 습득하는 데 큰 도움이 됩니다.
이 책은 리눅스 임베디드 시스템의 기본 개념부터 시작해서 욕토 프로젝트를 시작하는 방법과 그 근간이 되는 오픈임베디드 빌드 시스템, 비트베이크 빌드 엔진을 차례로 설명하며, 여기에서 발생할 수 있는 사용상의 문제점을 해결하는 방법까지 다룹니다. 그 후, 리눅스 시스템 구조를 살펴보고 커스텀 리눅스 제작과 테스트, 배포 등을 둘러봅니다. 이를 기반으로 소프트웨어 패키지 및 커널을 제작하고 수정하기 위한 레시피도 보게 됩니다. 임베디드 시스템의 성능이 높아지면서 소프트웨어 개발 자체는 일반적인 소프트웨어와 다를 바 없어졌지만, 그 빌드와 배포에는 아직 차이가 있습니다. 욕토 프로젝트는 이를 단순한 작업으로 만들어주기 때문에 자동화를 쉽게 해서 업무의 부담을 줄여줍니다. 과거 분리된 작업으로 수행하던 것을 통합해 수행하는 것을 보면서 통합 환경의 발전을 느낄 수 있습니다.

옮긴이 소개

김세영

성균관대학교 정보통신공학부와 기계공학부를 졸업했으며 웹, 서버, 커널 등 여러 분야에 관심을 갖고 있다. 어떻게 하면 지식을 효율적으로 습득, 저장, 관리할 수 있는지 고민하고 있다. 현재는 캐노니컬에서 근무하며, 우분투를 발전시키고 클라우드 환경의 버그를 잡는 데 집중하고 있다.

정윤선

성균관대학교 정보통신공학부를 졸업했으며 웹 기술과 서버 API, 하이퍼바이저에 관심이 많다. 아헴스, KT클라우드웨어, A2C를 거치며 웹, 가상화 등의 업무를 수행했다. 현재 육아하면서 단기 웹 프로젝트를 진행하거나 번역에 참여하고 있으며, 다시 개발자로 돌아갈 날을 손꼽아 기다리고 있다.

목차

목차
  • 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.100 아래에서 3행 : '몇일'동안 -> 며칠동안

정오표

정오표

[ p.110 : 4행 ]