장바구니 담기 close

장바구니에 상품을 담았습니다.

임베디드 리눅스 프로그래밍 완전정복 2/e - 단계별로 따라 하는

임베디드 리눅스 프로그래밍 완전정복 2/e - 단계별로 따라 하는

  • 크리스시먼즈
  • |
  • 에이콘출판
  • |
  • 2019-01-30 출간
  • |
  • 588페이지
  • |
  • 188 X 235 X 28 mm
  • |
  • ISBN 9791161752549
판매가

40,000원

즉시할인가

36,000

배송비

무료배송

(제주/도서산간 배송 추가비용:3,000원)

수량
+ -
총주문금액
36,000

※ 스프링제본 상품은 반품/교환/환불이 불가능하므로 신중하게 선택하여 주시기 바랍니다.

출판사서평

★ 이 책에서 다루는 내용 ★

 

■ 대부분의 SoC나 임베디드 모듈 제조사가 제공하는 BSP 평가하기

■ 빌드루트와 Yocto 프로젝트를 이용해 빠르고 효율적으로 임베디드 리눅스 시스템 구축하기

■ 보안 위협 없이 판매된 IoT 장치 업데이트

■ 장치의 전력 소모량을 줄여 배터리 지속하기

■ 커널 장치 드라이버를 작성하지 않고 하는 하드웨어 상호작용

■ GDB를 이용해 장치를 원격으로 디버그와 perf, ftrace, valgrind 같은 강력한 도구를 이용한 시스템 성능 측정

■ 실시간 운영 체제로 리눅스 구성하기

 

★ 이 책의 대상 독자 ★

 

임베디드 컴퓨팅과 리눅스에 관심이 있고, 다양한 주제에 대한 지식을 넓히고자 하는 개발자를 위한 책이다. 리눅스 커맨드라인에 대한 기초적인 이해가 있다고 가정했고, 프로그래밍 예에서는 C 언어에 대한 실용적인 지식이 있다고 가정했다. 몇몇 장은 임베디드 타깃 보드에 들어가는 하드웨어에 초점을 맞추므로, 하드웨어와 하드웨어 인터페이스에 친숙하면 도움이 될 것이다.

 

★ 이 책의 구성 ★

 

1장 '시작'에서는 임베디드 리눅스 생태계를 설명하고, 프로젝트를 시작할 때 시스템 설계자가 할 수 있는 선택에 대해 설명한다.

2장 '툴체인에 대해 배워보자'에서는 툴체인의 요소에 대해 설명하고, 타깃 보드용으로 크로스 컴파일하기 위한 툴체인을 만드는 방법을 보여준다. 어디서 툴체인을 구할 수 있는지와 소스 코드로부터 빌드하는 방법에 대해 자세히 설명한다.

3장 '부트로더에 대한 모든 것'에서는 리눅스 커널을 메모리로 로드하는 부트로더의 역할에 대해 설명하고, U-Boot와 Bareboot를 예로 사용한다. 장치 트리도 설명하는데, 장치 트리는 하드웨어의 자세한 내용을 부호화하는 수단으로, 거의 대부분의 임베디드 리눅스 시스템에 쓰인다.

4장 '커널 구성과 빌드'에서는 임베디드 시스템용 커널을 고르고 장치 내의 하드웨어를 위해 구성하는 방법에 관한 정보를 제공한다. 리눅스를 새로운 하드웨어에 이식하는 방법도 다룬다.

5장 '루트 파일시스템 만들기'에서는 루트 파일시스템 구성법에 대한 단계별 안내를 통해 임베디드 리눅스 구현의 사용자 공간 부분 뒤에 감춰진 아이디어를 소개한다.

6장 '빌드 시스템 선택하기'에서는 앞의 네 장에서 설명한 단계를 자동화하는 두 가지 임베디드 리눅스 빌드 시스템(Buildroot와 Yocto 프로젝트)을 다루면서 책의 첫 번째 부분을 마친다.

7장 '저장소 전략 만들기'에서는 플래시 메모리를 관리함으로써 생기는 플래시 칩과 임베디드 MMC eMMC 패키지 등의 도전에 대해 알아본다. 기술의 종류에 따라 적용할 수 있는 파일시스템을 설명한다. 또한 이미 배치돼 있는 장치의 펌웨어를 갱신하는 기법도 다룬다.

8장 '소프트웨어 업데이트'에서는 완전 관리형(OTA Over the Air)을 포함해서, 장치가 배치된 다음 소프트웨어를 업데이트하는 다양한 방법을 검토한다. 논의되는 핵심 주제는 신뢰성과 보안이다.

9장 '장치 드라이버와의 만남'에서는 커널 장치 드라이버가 하드웨어와 상호작용하는 방법을 간단한 드라이버의 작동 예제를 가지고 설명한다. 또한 사용자 공간에서 장치 드라이버를 호출하는 다양한 방법도 설명한다.

10장 '시스템 구동: init 프로그램'에서는 나머지 시스템을 시작하는 첫 번째 사용자 공간 프로그램인 init에 대해 이야기한다. 다양한 부류의 임베디드 시스템에 적합한 세 가지 버전의 init 프로그램(비교적 간단한 BusyBox init에서 복잡한 systemd까지)을 설명한다.

11장 '전원 관리'에서는 동적 주파수/전압 제어, 더 깊은 유휴 상태 선택, 시스템 중단 등 전력 소비를 최소화하도록 리눅스를 튜닝하는 다양한 방법을 고려한다. 목표는 장치가 배터리를 이용해 더 오래 실행되게 하고 발열을 줄이는 것이다.

12장 '프로세스와 스레드'에서는 응용 프로그램 프로그래머의 관점에서 임베디드 시스템에 대해 설명한다. 프로세스와 스레드, 프로세스 간 통신, 스케줄링 정책을 살펴본다.

13장 '메모리 관리'에서는 가상 메모리의 개념과 주소 공간을 메모리 매핑으로 나누는 방법을 소개한다. 또한 메모리 사용량을 정확히 측정하고 메모리 누수를 감지하는 방법도 설명한다.

14장 'GDB로 디버깅하기'에서는 GNU 디버거 GDB를 디버그 에이전트와 함께 사용해 원격으로 타깃 장치에서 실행되는 응용 프로그램을 디버깅하는 방법을 설명한다. 계속해서 이 모델을 확장해 커널 디버그 스텁 KGDB을 활용한 커널 코드 디버깅 방법도 보여준다.

15장 '프로파일링과 추적'에서는 시스템 성능을 측정하는 데 사용할 수 있는 기술에 대해 설명한다. 전체 시스템 프로파일에서 시작해 병목 현상으로 인해 성능이 저하되는 특정 영역으로 좁혀간다. 또한 응용 프로그램에서 스레드 동기화와 메모리 할당의 정확성을 검사하는 도구인 Valgrind에 대해 설명한다.

16장 '실시간 프로그래밍'에서는 커널 구성과 실시간 PREEMPT_RT 커널 패치 등을 비롯해 리눅스에서의 실시간 프로그래밍에 대해 자세히 설명하고, 실시간 대기시간을 측정하는 도구들도 설명한다. 커널 추적 도구인 Ftrace를 이용해 커널 대기시간을 측정하고 다양한 커널 구성의 효과를 보여준다. 

목차

1장. 시작

 

__알맞은 운영체제 선택하기

__참여 단체

__프로젝트 생명주기

____임베디드 리눅스의 4 요소

__오픈소스

____라이선스

__임베디드 리눅스용 하드웨어

__이 책에서 사용하는 하드웨어

____비글본 블랙

____QEMU

__이 책에서 사용하는 소프트웨어

__요약

 

 

2장. 툴체인에 대해 배워보자

 

__툴체인 소개

____툴체인의 종류

____CPU 아키텍처

____C 라이브러리 고르기

__툴체인 찾기

__crosstool-NG를 이용한 툴체인 빌드

____crosstool-NG 설치

____비글본 블랙용 툴체인 빌드

____QEMU용 툴체인 빌드

__툴체인의 구조

____크로스 컴파일러에 대해 알아보기

____sysroot, 라이브러리, 헤더 파일

____툴체인 안의 다른 도구들

____C 라이브러리의 요소 살펴보기

__라이브러리와 링크하기: 정적 링크와 동적 링크

____정적 라이브러리

____공유 라이브러리

__크로스 컴파일 기술

____단순 makefile

____Autotools

____패키지 구성

____크로스 컴파일 관련 문제

__요약

 

 

3장. 부트로더에 대한 모든 것

 

__부트로더는 무슨 일을 하는가?

__부트 순서

____1단계: 롬 코드

____2단계: SPL

____3단계: TPL

__UEFI 펌웨어로 부팅하기

__부트로더에서 커널로 이동

__장치 트리 소개

____장치 트리 기초

____reg 프로퍼티

____레이블과 인터럽트

____장치 트리 include 파일

____장치 트리 컴파일

__부트로더 선택

__U-Boot

____U-Boot 빌드

____U-Boot 설치

____U-Boot 사용

____리눅스 부트

____U-Boot를 새로운 보드에 이식

____빌드와 테스트

____팔콘 모드

__Barebox

____Barebox 구하기

____Barebox 빌드하기

____Barebox 사용하기

__요약

 

 

4장. 커널 구성과 빌드

 

__커널은 무엇을 하는가?

__커널 선택하기

____커널 개발 주기

____안정적 장기 지원 릴리스

____벤더 지원

____라이선스

__커널 빌드하기

____소스 구하기

____커널 구성의 이해: KConfig

____LOCALVERSION을 이용한 커널 식별

____커널 모듈

__컴파일: Kbuild

____어떤 커널 이미지를 컴파일할지 알아내기

____빌드 산출물

____장치 트리 컴파일

____모듈 컴파일

____커널 소스 청소

____비글본 블랙용 커널 빌드하기

____QEMU용 커널 빌드하기

__커널 부팅하기

____비글본 블랙 부팅하기

____QEMU 부팅하기

__커널 패닉

____초기 사용자 공간

____커널 메시지

____커널 커맨드라인

__리눅스를 새 보드에 이식하기

____새로운 장치 트리

____보드 compatible 프로퍼티 설정하기

__더 읽을거리

__요약

 

 

5장. 루트 파일시스템 만들기

 

__루트 파일시스템에는 무엇이 있어야 하는가?

____디렉토리 레이아웃

____스테이징 디렉토리

____POSIX 파일 접근 권한

____스테이징 디렉토리에서 파일 소유권 권한

____루트 파일시스템을 위한 프로그램

____루트 파일시스템용 라이브러리

____장치 노드

____proc과 sysfs 파일시스템

____커널 모듈

__루트 파일시스템을 타깃으로 전송하기

__부트 initramfs 만들기

____단독형 initramfs

____initramfs 부팅하기

____QEMU로 부팅하기

____비글본 블랙 부팅하기

____initramfs를 커널 이미지에 넣기

____장치 테이블을 이용해 initramfs 빌드하기

____오래된 initrd 형식

__init 프로그램

____데몬 프로세스 시작하기

__사용자 계정 구성하기

____루트 파일시스템에 사용자 계정 추가하기

__장치 노드를 관리하는 더 좋은 방법

____devtmpfs를 사용하는 예

____mdev를 사용하는 예

____결국 정적 장치 노드는 그렇게 나쁜 것인가?

__네트워크 구성하기

____glibc용 네트워크 요소

__장치 테이블을 이용해 파일시스템 이미지 만들기

____비글본 블랙 부팅하기

__NFS를 이용해 루트 파일시스템 마운트하기

____QEMU로 테스트하기

____비글본 블랙으로 테스트하기

____권한 문제

__TFTP를 이용해 커널 로드하기

__더 읽을거리

__요약

 

 

6장. 빌드 시스템 선택하기

 

__빌드 시스템

__패키지 포맷과 패키지 관리자

__Buildroot

____배경

____안정 버전 릴리스 및 장기간 지원

____설치

____구성

____실행

____커스텀 BSP 생성

____자신의 코드 추가

____라이선스 준수

__Yocto프로젝트

____배경

____안정적인 릴리스 그리고 지원

____Yocto 프로젝트 설치

____구성하기

____빌드

____QEMU 타깃 실행

____레이어

____local.conf를 통한 이미지 커스터마이징

____이미지 레시피 쓰기

____SDK 만들기

____라이선스 검사

__더 읽을거리

__요약

 

 

7장. 저장소 전략 만들기

 

__저장소 옵션

____NOR 플래시

____NAND 플래시

____컨트롤러가 내장된 플래시

__부트로더에서 플래시 메모리 접근하기

____U-Boot와 NOR 플래시

____U-Boot와 NAND 플래시

____U-Boot와 MMC, SD, eMMC

__리눅스에서 플래시 메모리 접근하기

____MTD

____MMC 블록 드라이버

__플래시 메모리용 파일시스템

____플래시 변환 레이어

__NOR와 NAND 플래시 메모리용 파일시스템

____JFFS2

____YAFFS2

____UBI와 UBIFS

__컨트롤러가 내장된 플래시용 파일시스템

____플래시벤치

____discard와 TRIM

____Ext4

____F2FS

____FAT16/32

__읽기 전용 압축 파일시스템

____squashfs

__임시 파일시스템

__읽기 전용 루트 파일시스템 만들기

__파일시스템 선택

__더 읽을거리

__요약

 

 

8장. 소프트웨어 업데이트

 

__무엇을 업데이트해야 하는가?

____부트로더

____커널

____루트 파일시스템 

____시스템 응용 프로그램

____장치별 데이터

____업데이트가 필요한 컴포넌트

__소프트웨어 업데이트의 기본

____견고한 업데이트

____안전한 업데이트

____업데이트 보안

__업데이트 메커니즘 유형

____시메트릭(대칭) 이미지 업데이트 

____어시메트릭(비대칭) 이미지 업데이트

____원자 파일 업데이트

__OTA 업데이트

__로컬 업데이트 시 Mender 사용하기

____Mender 클라이언트 빌드하기

____업데이트 설치하기

__OTA 업데이트 시 Mender 사용하기

__요약

 

 

9장. 장치 드라이버와의 만남

 

__장치 드라이버의 역할

__문자 장치

__블록 장치

__네트워크 장치

__런타임 시 드라이버 찾기

____sysfs에서 정보 가져오기 

__적합한 장치 드라이버 찾기

__사용자 공간의 장치 드라이버

____GPIO 

____LED

____I2C 

____SPI

 __커널 장치 드라이버 작성

____문자 드라이버 인터페이스 설계

____장치 드라이버의 구조

____커널 모듈 컴파일 

____커널 모듈 로딩

__하드웨어 구성 정보 찾기

____장치 트리

____플랫폼 데이터

____장치 드라이버와 하드웨어의 연동

__더 읽을거리

__요약

 

 

10장. 시스템 구동: init 프로그램

 

__커널 구동 이후

__init 프로그램의 소개

__BusyBox init

____Buildroot init 스크립트

__시스템 V init 

____inittab

____init.d 스크립트 

____새로운 데몬 추가

____서비스 시작과 종료

__systemd

____Yocto 프로젝트와 Buildroot에서 systemd 빌드하기

____타깃, 서비스, 유닛의 소개

____systemd로 시스템을 구동하는 방법

____직접 만든 서비스 설치

____워치독 추가

____임베디드 리눅스에서 중요한 점

__더 읽을거리

__요약

 

 

11장. 전원 관리

 

__전력 사용량 측정

__클록 주파수 스케일링

____CPUFreq 드라이버

____CPUFreq 사용

__최적의 유휴 상태 선택하기

____CPUIdle 드라이버

____틱리스 작업

__주변장치 전원 끄기

__시스템을 절전 모드로 전환하기

____전력 상태 

____웨이크업 이벤트

____실시간 클록(RTC)의 시간 지정 웨이크업

__더 읽을거리

__요약

 

 

12장. 프로세스와 스레드 

 

__프로세스인가 스레드인가?

__프로세스

____새로운 프로세스 만들기

____프로세스 종료하기

____다른 프로그램 실행하기

____데몬

____프로세스 간 통신

__스레드

____새로운 스레드 만들기

____스레드 종료하기

____스레드를 사용하는 프로그램 컴파일하기

____스레드 간 통신

____상호 배제

____조건 바꾸기

____문제 나누기

__스케줄링

____공평성 대 결정성

____시분할 정책

____실시간 정책

____정책 선택하기

____실시간 우선순위 선택하기

__더 읽을거리

__요약

 

 

13장. 메모리 관리

 

__가상 메모리 기초

__커널 공간 메모리 레이아웃

____커널이 얼마나 많은 메모리를 사용하는가?

__사용자 공간 메모리 레이아웃

__프로세스 메모리 맵

__스와핑

____압축 메모리(zram)로 스왑

__mmap으로 메모리 매핑

____mmap을 사용한 독립된 메모리 할당

____mmap을 사용한 메모리 공유 

____mmap을 사용한 장치 메모리 액세스

__응용 프로그램에서 얼마나 많은 메모리를 사용하고 있는가?

__프로세스별 메모리 사용량

____top과 ps 사용

____smem 사용

____고려할 만한 그 밖의 툴

__메모리 누수 알아내기

____mtrace

____Valgrind

__메모리 부족

__더 읽을거리

__요약

 

 

14장. GDB로 디버깅하기

 

__GNU 디버거

__디버깅 준비하기

__응용 프로그램 디버깅

____gdbserver를 이용한 원격 디버깅

____원격 디버깅을 위한 Yocto 프로젝트 셋업하기

____원격 접속을 위한 Buildroot 셋업하기

____디버깅 시작하기

____네이티브 디버깅

__JIT 디버깅

__디버깅 포크와 스레드

__코어 파일

____GDB를 이용해 코어 파일 살펴보기

__GDB 사용자 인터페이스 

____터미널 사용자 인터페이스

____데이터 디스플레이 디버거

____이클립스

__커널 코드 디버깅

____kgdb를 사용한 커널 코드 디버깅

____디버그 세션 예제

____얼리 코드(early code) 디버깅

____디버깅 모듈

____kdb를 사용한 커널 코드 디버깅

____oops 메시지 살펴보기

____oops 메시지의 보존

__더 읽을거리

__요약 

 

 

15장. 프로파일링과 추적

 

__관찰자 효과

____심볼 테이블과 컴파일 플래그

__프로파일 시작하기

__top으로 프로파일링하기

__푸어맨 프로파일러

__perf 소개

____perf용 커널 구성

____Yocto 프로젝트로 perf 빌딩하기

____Buildroot로 perf 빌딩하기

____perf로 프로파일링하기

____호출 그래프

____perf annotate

__그 밖의 프로파일러: OProfile, gprof

__이벤트 추적

__Ftrace 소개

____Ftrace 사용 준비

____Ftrace 사용

____동적 Ftrace 및 trace 필터

____이벤트 추적

__LTTng 사용

____LTTng와 Yocto 프로젝트

____LTTng와 Buildroot

____커널 추적에 LTTng 사용

__Valgrind 사용

____Callgrind

____Helgrind

__strace 사용

__요약

 

 

16장. 실시간 프로그래밍

 

__실시간이란 무엇인가?

__비결정론의 근원 식별하기

__스케줄링 대기시간 이해하기

__커널 선점

__실시간 리눅스 커널(PREEMPT_RT)

____스레드 인터럽트 핸들러

__선점 가능한 커널 잠금

____PREEMPT_RT 패치 얻기

____Yocto 프로젝트와 PREEMPT_RT

__고해상도 타이머

__페이지 폴트 방지

__인터럽트 쉴링

__스케줄링 대기시간 측정

____cyclictest

____Ftrace 사용

____cyclictest와 Ftrace 결합

__더 읽을거리

__요약

교환 및 환불안내

도서교환 및 환불
  • ㆍ배송기간은 평일 기준 1~3일 정도 소요됩니다.(스프링 분철은 1일 정도 시간이 더 소요됩니다.)
  • ㆍ상품불량 및 오배송등의 이유로 반품하실 경우, 반품배송비는 무료입니다.
  • ㆍ고객님의 변심에 의한 반품,환불,교환시 택배비는 본인 부담입니다.
  • ㆍ상담원과의 상담없이 교환 및 반품으로 반송된 물품은 책임지지 않습니다.
  • ㆍ이미 발송된 상품의 취소 및 반품, 교환요청시 배송비가 발생할 수 있습니다.
  • ㆍ반품신청시 반송된 상품의 수령후 환불처리됩니다.(카드사 사정에 따라 카드취소는 시일이 3~5일이 소요될 수 있습니다.)
  • ㆍ주문하신 상품의 반품,교환은 상품수령일로 부터 7일이내에 신청하실 수 있습니다.
  • ㆍ상품이 훼손된 경우 반품 및 교환,환불이 불가능합니다.
  • ㆍ반품/교환시 고객님 귀책사유로 인해 수거가 지연될 경우에는 반품이 제한될 수 있습니다.
  • ㆍ스프링제본 상품은 교환 및 환불이 불가능 합니다.
  • ㆍ군부대(사서함) 및 해외배송은 불가능합니다.
  • ㆍ오후 3시 이후 상담원과 통화되지 않은 취소건에 대해서는 고객 반품비용이 발생할 수 있습니다.
반품안내
  • 마이페이지 > 나의상담 > 1 : 1 문의하기 게시판 또는 고객센터 1800-7327
교환/반품주소
  • 경기도 파주시 문발로 211 1층 / (주)북채널 / 전화 : 1800-7327
  • 택배안내 : CJ대한통운(1588-1255)
  • 고객님 변심으로 인한 교환 또는 반품시 왕복 배송비 5,000원을 부담하셔야 하며, 제품 불량 또는 오 배송시에는 전액을 당사에서부담 합니다.