책 소개
이 책에서 사용된 예제 파일은 다음 깃허브 페이지에서 이용 가능합니다.
https://github.com/YoctoForBeaglebone/
요약
이 책은 욕토(Yocto) 프로젝트를 사용해 비글본 블랙(BeagleBone Black)에서 임베디드 리눅스를 개발하는 방법에 대해 소개한다. 욕토 프로젝트의 기본 개념을 간단하게 다룬 후, 예제를 통해 여러 가지 프로젝트를 비글본 블랙 보드에서 개발하는 방법을 설명한다. 이 책을 읽고 나면, 자신만의 개발 프로젝트를 비글본 보드에 욕토 프로젝트를 사용해 개발할 수 있는 기본 역량을 쌓을 수 있다.
추천의 글
나의 리눅스 테스트 경험을 살펴보면서 내가 매우 도전적인 임베디드 리눅스로 작업을 하고 있다는 사실을 발견했다. 다른 사용자와 커널 설정이 필요한 여러 기능을 가진 다양한 아키텍처, 크로스 컴파일, 디바이스를 사용한 예제는 드물다. 욕토 프로젝트(Yocto Project)는 임베디드 개발자들에게 이러한 도전과 더 많은 것을 극복하게 한다. 메이크(make)를 사용하거나 직접 설정하는 방법 대신 비트베이크(bitbake)를 사용하면, 모든 소스를 다운로드부터 설치까지 사용자의 추상 레이어를 생성하고 예제 파일을 사용해 필요한 단계를 진행할 수 있다.
요즘 임베디드 리눅스는 셋탑박스, IPTV, 기내 인포테인먼트 시스템 등 모든 곳에서 사용한다. 오픈소스의 힘 덕분에 벤더를 도와주는 제니비(GENIVI)와 캐리어 그레이드 리눅스(Carrier Grade Linux)는 자신의 목적을 달성하기 위해 리눅스 사용에 대한 표준을 정의한다.
이 책의 저자 이르판 사디크(H M Irfan Sadiq)는 오픈임베디드(OpenEmbedded)와 욕토 프로젝트로 업무를 수행하고 있다. 사디크는 스크립트와 테스트 자동화에 흥미가 많으며, 테스트 자동화 프로젝트에서 중요한 역할을 하고 있다. 나의 지도하에 사디크는 욕토 프로젝트를 기반으로 테스트 관련 문제를 해결하기 위해 다양한 솔루션을 개발하고 있다.
욕토 프로젝트는 꽤 복잡한 개념이고 새로운 사용자에게는 벽이 있는 것처럼 느껴질 수 있다. 욕토 프로젝트에서 사용하는 대부분의 것은 고급 레벨 개념이다. 하지만 이 책은 기본 개념부터 시작해 천천히 고급 개념을 넘어감으로써 사용자에게 익숙하도록 쓰여있다.
이 책은 욕토 프로젝트를 종합적으로 소개한다. 저렴한 가격으로 구매할 수 있는 욕토 프로젝트 레퍼런스 보드인 비글본을 예제로 해 욕토 프로젝트를 설정하고, 기본 이미지를 빌드하는 것부터 커스텀 이미지를 만드는 방법을 다루는 고급 주제까지 하나씩 설명한다. 또한 기존 애플리케이션을 이용해서 파일 시스템에 자신의 애플리케이션을 추가하는 방법도 설명한다. 뒷부분에서는 리눅스와 욕토 프로젝트 전체를 사용해 비싸지 않은 비글본으로 집안 감시 시스템, 콘솔 게임, 와이파이 핫스팟과 같은 것을 만드는 방법을 설명한다.
여러분이 리눅스를 사용한 임베디드 솔루션을 개발하는 데 관심이 있으면, 이 책은 상당히 유용한 정보를 제공할 것이다. 이미 욕토 프로젝트를 가지고 일을 하고 있는 개발자라면, 여러 가지 개념을 배우고, 욕토 프로젝트를 전체적으로 이해하는 데 도움이 될 것이다.
이 책을 즐겁게 읽기를 바란다!
-쿨라 아즈미(Khula Azmi)/멘토 그래픽스 QA 엔지니어 매니저
이 책에서 다루는 내용
■ 비트베이크 툴을 이용한 패키지나 이미지의 성공적인 개발
■ 유행하는 콘솔 기반 게임 예제 생성
■ 욕토 프로젝트로 생성한 이미지를 사용한 비글본 부팅
■ 커스텀 레이어를 사용한 루트 파일 시스템 커스터마이즈
■ 비글본 USB 포트에 웹캠을 붙여 집안 감시 솔루션 개발
■ 비글본에 USB 동글을 붙여 무선 액세스 포인트 개발
■ helloworld 예제의 다른 버전 빌드
이 책의 대상 독자
이 책은 임베디드 시스템 관련 지식과 경험이 있는 시스템 개발자들을 대상으로 한다. 욕토 프로젝트 빌드 시스템 지식은 없지만 비글본 블랙에 대한 지식은 있다고 가정한다.
이 책의 구성
1장, ‘욕토 프로젝트와 비글본 블랙 시작’에서는 사용자가 간단한 명령어로 욕토 프로젝트를 사용해 빌드된 이미지를 가지고 비글본을 부팅할 수 있게 한다.
2장, ‘비트베이크의 모든 것’에서는 비트베이크 툴의 기본적인 내용을 소개한다.
3장, ‘helloworld 예제 생성’에서는 포키(Poky)에서 helloworld 예제를 사용하는 것에 대해 설명한다. 이 장에서 예제의 기본 요소를 소개하기 위해 helloworld 예제를 사용한다.
4장, ‘비글본 보드에 멀티미디어 추가’에서는 욕토 프로젝트 예제에서 가장 흔히 접하는 요소와 사용법에 대해 자세히 설명한다.
5장, ‘레이어 생성과 분석’에서는 기존 레이어에서 사용할 수 있는 예제 파일의 기능을 재정의하는 방법에 대해 설명한다. 또한 각 기술의 장단점에 따라 서로 다른 시나리오에 적용할 수 있는 다양한 기술들에 대해 알아본다.
6장, ‘콘솔 게임’에서는 팩맨 같은 인기 있는 콘솔 게임의 예제를 만들기 위한 내용을 다룬다.
7장, ‘집안 감시 시스템을 위한 비글본 튜닝’에서는 비글본과 욕토 프로젝트를 사용해 고급 프로젝트를 만드는 방법에 대해 설명한다. 또한 비글본의 USB 포트에 웹캠을 달아서 집안 감시 솔루션을 만들어 본다.
8장, ‘무선 액세스 포인트로 비글본 사용’에서는 비글본과 욕토 프로젝트를 사용해 한층 진보된 프로젝트를 만드는 방법에 대해 설명한다. 여기서 비글본 보드는 USB 동글을 사용한 무선 액세스 포인트가 된다.
본문에 쓰인 컬러 이미지는 여기에서 내려 받으세요.
목차
목차
- 1 욕토 프로젝트와 비글본 블랙 시작
- 호스트 환경 설정
- 필수
- 그래픽
- 문서
- ADT 설치
- 욕토 프로젝트 입수
- 비글본 빌드
- local.conf
- bblayers.conf
- site.conf
- auto.conf
- 빌드 시작
- 파이션 생성 및 SD 카드 포맷
- SD 카드로 이미지 복사
- 하드웨어 설정
- 시리얼 설정
- 비글본 부팅
- 추가적인 환경 설정 파일
- machine.conf
- bitbake.conf
- 표준 타깃 파일 시스템 경로
- 아키텍트 의존적인 빌드 변수
- 패키지 기본 변수
- 빌드 시스템에서 일반적인 작업/결과 디렉토리
- 특정 이미지 생성과 루트 파일 시스템 이미지 정보
- 빌드 플래그와 옵션
- 다운로드 위치와 유틸리티
- 설정 파일 추가
- 정리
- 호스트 환경 설정
- 2 비트베이크의 모든 것
- 비트베이크의 간략한 역사
- 레거시 툴과 비트베이크
- 크로스 컴파일
- 패키지 간 의존성 해결
- 타깃 배포판의 다양성
- 빌드 시스템 결합성
- 다양한 빌드 시스템 배포판 지원
- 다양한 아키텍처 지원
- 병렬 빌드 지원
- 사용, 확장, 협업의 편의성
- 비트베이크 실행
- 메타데이터 파싱
- 태스크 목록 준비
- 태스크 실행
- 비트베이크 옵션
- 특정 예제 빌드(-b)
- 에러가 나는 경우에도 계속 빌드(-k, --continue)
- 강제로 빌드하는 태스크(-f, --force)
- 다른 프로바이더 사용(-a, --tryaltconfigs)
- 특정 태스크 실행(-c)
- 스탬프 무효화(-C, --clear-stamp)
- 자세한 로그(-v, --verbose)
- 디버그 레벨(-D, --debug)
- 모의 실습(-n, --dry-run)
- 파싱만 진행(-p, --parse-only)
- 버전 보여주기(-s, --show-versions)
- 환경변수 얻기(-e, --environment)
- 의존성 그래프 생성(-g, --graphviz)
- 로그 레벨(-l DEBUGDOMAINS,--log-domains=DEBUGDOMAINS)
- 프로파일(-P, --profile)
- UI 설정(-u UI, --ui=UI)
- 셰어드 스테이트 미사용(--no-setscene)
- 정리
- 3 helloworld 예제 생성
- helloworld 생성
- helloworld 예제 내용
- 예제 네이밍 규칙과 관련 변수
- 예제 빌드
- 빌드 디렉토리
- 태스크
- build
- fetch
- unpack
- patch
- configure
- compile
- install
- package
- devshell
- clean
- cleansstate
- cleanall
- 기본 태스크 재정의
- helloworld 배포
- 수동 패키지 설치
- 패키지에 이미지 의존성 생성
- 정리
- 4 비글본 보드에 멀티미디어 추가
- gaku 소개
- gaku 예제
- 패키지 제어 변수
- 빌드 의존성(DEPENDS)
- 런타임 의존성(RDEPENDS)
- 런타임 의존성 추천(RRCOMMENDS)
- RCONFLCTS
- RREPLACE
- PROVIDES
- RPROVIDES
- 예제에서 소스 제어
- SRCREV
- PV 계산
- SRC_URI 세부 내용
- S 디렉토리
- 클래스 상속
- 패키지 제어 변수
- gstreamer 예제의 간략한 분석
- 변수 할당 유형
- EXTRA_OECONF
- FILES_ 변수
- 변수 플래그
- ALLOW_EMPTY
- FILESPATH
- 조건적 재정의 메커니즘
- 같은 코드 재사용과 공유
- 실제 동작
- 정리
- 5 레이어 생성과 분석
- 스크립트를 사용해 레이어 생성
- 레이어 내용
- conf 디렉토리
- recipes-* 디렉토리
- 클래스
- COPYING.MIT
- README
- 레이어 기반의 조건적 선택
- 추가 파일들
- 패키지 그룹
- 정리
- 6 콘솔 게임
- 하드웨어 요구사항
- 팩맨 콘솔 게임
- 예제 개발
- 기본 요소
- 소스 제어
- 작업 디렉토리와 버전
- S 디렉토리
- 컴파일 태스크 디버깅
- install 태스크
- 패키지 내용 추가
- 루트 파일 시스템에 패키지 추가
- 패키지 그룹
- 이미지 bbappend
- 실행
- 정리
- 7 집안 감시 시스템을 위한 비글본 튜닝
- 문제점 진술
- 요구사항
- 기존 솔루션/문헌 조사
- 전문적인 캡처 하드웨어 요구사항
- 전문적인 소프트웨어 애플리케이션 요구사항
- 데비안/앙스트롬 기반
- 선택된 솔루션
- 호스트/서버 측(비글본)
- 클라이언트 측면
- 재미있게 시작하자
- base 플러그인
- good 플러그인
- bad 플러그인
- ugly 플러그인
- gstreamer과 플러그인 활성화
- Video4Linux2 사용
- 예제 수정
- append 사용
- local.conf 사용
- gstreamer 파이프라인
- 클라이언트 측면
- VLC
- gstreamer
- 실행을 위한 준비와 문제 발생
- 카메라 발견 문제
- UVC 드라이버 DMA 문제
- meta-ti 레이어로 빌드
- 레이어 다운로드
- 레이어 우선순위 설정
- 레이어 활성화
- 추가적인 기능 강화
- 정리
- 8 무선 액세스 포인트로 비글본 사용
- 문제점 진술/유스 케이스
- 요구사항
- 문헌 조사
- 전략
- 커널 지원 활성화
- 네트워크 지원 - 무선
- Device Drivers > Network device support > Wireless LAN > ATheros Wireless Cards
- 커널 설정을 하는 좋은 접근 방법
- 펌웨어 복사
- 이전 커널 버전 사용
- rfkill 문제
- 필요한 패키지
- upstart 스크립트 수정
- hostpot-yb 예제
- 액세스 포인트 실행 스크립트
- systemd 서비스 유닛 파일
- 드라이버 모듈의 설정 파일
- hostapd 설정 파일
- 게이트웨이 설정 파일
- udhcp 설정 파일
- udhcp 빈 lease 파일
- hotspot-yb_0.1.bb 예제 파일
- hotspot-yb 활성화
- 패키지 그룹 관리
- 알려진 문제점/기능 강화
- 정리
도서 오류 신고
정오표
정오표
2016. 5. 17 수정사항
[p.31: 9행(필수 아래의 명령어)]
$ sudo apt-get install gawk wget git-core diffstat unzip texinfo multilib build-essential chrpath
->
$ sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath
[p. 70: 아래에서 3행]
이를 위한 예제 예제를 생성하기 위해
->
이를 위한 예제를 생성하기 위해
2016. 11. 8 수정사항
[p.77: 아래에서 7행]
분리되가
->
분리되기
[p.80: 아래에서 6행]
예제 예제에
->
예제에
[p.81: 2행]
예제 예제에서
->
예제에서
2016. 11. 14 수정사항
[p.87: 3행]
예제 예제에서
->
예제에서