본문 바로가기

추천 검색어

실시간 인기 검색어

임베디드 리눅스 프로그래밍 완전정복

3 판
임베디드 시스템
에이콘출판 · 2023년 11월 30일
가장 최근에 출시된 개정판입니다. 구판보기
10.0
10점 중 10점
(7개의 리뷰)
도움돼요 (57%의 구매자)
  • 임베디드 리눅스 프로그래밍 완전정복 대표 이미지
    임베디드 리눅스 프로그래밍 완전정복 대표 이미지
  • A4
    사이즈 비교
    210x297
    임베디드 리눅스 프로그래밍 완전정복 사이즈 비교 234x187
    단위 : mm
01 / 02
무료배송 소득공제
10% 45,000 50,000
적립/혜택
2,500P

기본적립

5% 적립 2,500P

추가적립

  • 5만원 이상 구매 시 추가 2,000P
  • 3만원 이상 구매 시, 등급별 2~4% 추가 최대 2,500P
  • 리뷰 작성 시, e교환권 추가 최대 300원
배송안내
무료배송
배송비 안내
국내도서/외국도서
도서 포함 15,000원 이상 구매 시 무료배송
도서+사은품 또는 도서+사은품+교보Only(교보굿즈)

15,000원 미만 시 2,500원 배송비 부과

교보Only(교보배송)
각각 구매하거나 함께 20,000원 이상 구매 시 무료배송

20,000원 미만 시 2,500원 배송비 부과

해외주문 서양도서/해외주문 일본도서(교보배송)
각각 구매하거나 함께 15,000원 이상 구매 시 무료배송

15,000원 미만 시 2,500원 배송비 부과

업체배송 상품(전집, GIFT, 음반/DVD 등)
해당 상품 상세페이지 "배송비" 참고 (업체 별/판매자 별 무료배송 기준 다름)
바로드림 오늘배송
업체에서 별도 배송하여 1Box당 배송비 2,500원 부과

1Box 기준 : 도서 10권

그 외 무료배송 기준
바로드림, eBook 상품을 주문한 경우, 플래티넘/골드/실버회원 무료배송쿠폰 이용하여 주문한 경우, 무료배송 등록 상품을 주문한 경우
3/6(목) 출고예정
기본배송지 기준
배송일자 기준 안내
로그인 : 회원정보에 등록된 기본배송지
로그아웃 : '서울시 종로구 종로1' 주소 기준
로그인정확한 배송 안내를 받아보세요!

이달의 꽃과 함께 책을 받아보세요!

1권 구매 시 결제 단계에서 적용 가능합니다.

알림 신청하시면 원하시는 정보를
받아 보실 수 있습니다.

키워드 Pick

키워드 Pick 안내

관심 키워드를 주제로 다른 연관 도서를 다양하게 찾아 볼 수 있는 서비스로, 클릭 시 관심 키워드를 주제로 한 다양한 책으로 이동할 수 있습니다.
키워드는 최근 많이 찾는 순으로 정렬됩니다.

임베디드 리눅스를 이용해서 장치를 만들 때 고려할 하드웨어 관련 사항, 툴체인과 부트로더 선택, 커널 구성과 루트 파일 시스템 생성, 빌드 시스템 선택, 플래시 메모리, 장치 드라이버, 시스템 부트 과정 그리고 만들어진 임베디드 리눅스 플랫폼 위에서 프로그래밍할 때 고려해야 할 프로세스와 스레드, 메모리 관리, 디버깅, 프로파일링, 실시간 프로그래밍 관련 내용 등을 다룬다. 3판에서는 리눅스와 Yocto project 버전을 포함해 전체적으로 내용이 업데이트되고 상세한 설명이 추가됐으며, 모던 빌드 시스템인 CMake, 파이썬 관련 내용이 추가됐다.

작가정보

저자(글) 프랭크 바스케즈

(Frank Vasquez)
가전제품을 전문으로 하는 독립 소프트웨어 컨설턴트로, 임베디드 리눅스 시스템을 설계하고 구축한 10년 이상의 경험을 갖고 있다. 그 기간 동안 랙마운트 DSP 오디오 서버, 잠수용 수중 음파 탐지기 캠코더, 소비자 IoT 핫스팟을 비롯한 수많은 장치를 출하했으며, 임베디드 리눅스 엔지니어가 되기 전에는 IBM에서 DB2 데이터베이스 커널 개발자로 일했다. 현재 실리콘밸리에 살고 있다.

저자(글) 크리스 시먼즈

(Chris Simmonds)
영국 남부에 거주하는 소프트웨어 컨설턴트이자 트레이너로, 근 20년 동안 오픈소스 임베디드 시스템을 설계하고 구축해왔다. 임베디드 리눅스, 리눅스 장치 드라이버, 안드로이드 플랫폼 개발에 대한 전문 교육 및 멘토링 서비스를 제공하는 2net Ltd의 설립자이자 수석 컨설턴트이며 ARM, 퀄컴(Qualcomm), 인텔(Intel), 에릭슨(Ericsson), 제너럴 다이내믹스(General Dynamics)를 비롯한 임베디드 업계의 여러 대기업에서 엔지니어를 교육했다. 또한 임베디드 리눅스 콘퍼런스와 임베디드 월드를 비롯한 여러 오픈소스 및 임베디드 관련 콘퍼런스에서도 다수의 강연을 진행하고 있다.

번역 김기주

포스텍 컴퓨터공학과와 동 대학원을 졸업한 뒤, 지금은 elastic.co에서 에듀케이션 아키텍트Education Architect로 전 세계에 일래스틱서치(Elasticsearch)를 알리고 있다. 공저로 『SecurityPLUS for UNIX』(영진닷컴, 2000), 역서로 에이콘출판사의 『임베디드 프로그래밍 입문』(2006), 『실시간 UML 제3판』(2008), 『리눅스 API의 모든 것』(2012), 『(개정3판) 리눅스 실전 가이드』(2014), 『한눈에 빠져드는 셸 스크립트 2/e』(2018), 『임베디드 리눅스 프로그래밍 완전정복 2/e』(2019), 『페도라로 실습하는 리눅스 시스템 관리 Vol.1』(2022)가 있다.

번역 김병극

웹 개발자로 SW 개발 일을 시작했으며, 피처폰의 자바 관련 업무를 맡았던 것을 계기로 썬 마이크로시스템즈와 오라클에서 자바 VM 개발 업무를 수행했다. 현재는 SCA 도구인 블랙 덕Black Duck의 기술 지원 및 오픈소스 거버넌스, 컴플라이언스 컨설팅 업무를 맡고 있으며, 역서로는 에이콘출판사의 『한눈에 빠져드는 셸 스크립트 2/e』(2018), 『임베디드 리눅스 프로그래밍 완전정복 2/e』(2019), 『실습으로 배우는 하드웨어 보안』(2020)이 있다.

번역 송지연

지엔텔, 노키아 지멘스 네트웍스에서 근무한 경험이 있는 WCDMA, LTE 분야의 통신 기술 엔지니어 출신으로, 취미로 팀을 만들어 개발에 한동안 푹 빠져 있기도 했다. 현재는 주 전공인 SW 개발 분야로 돌아온 후 오라클 개발 팀을 거쳐 로쿠Roku에서 PM으로 근무 중이며, 역서로는 『스프링 핵심 노트』(한빛미디어, 2015)와 에이콘출판사의 『(개정3판) 리눅스 실전 가이드』(2014), 『한눈에 빠져드는 셸 스크립트 2/e』(2018), 『임베디드 리눅스 프로그래밍 완전정복 2/e』(2019) 등이 있다.

작가의 말

리눅스(Linux)는 지난 수년간 임베디드 컴퓨팅에서 중추적인 역할을 해왔다. 그럼에도 이 주제를 전반적으로 다루는 책은 지금껏 너무나 적었다. 이 책은 그 ‘결핍’을 해소하고자 만들어졌다. ‘임베디드 리눅스(embedded Linux)’라는 용어는 잘 정의돼 있지 않지만, 온도조절장치에서부터 Wi-Fi 라우터, 산업용 제어 장치에 이르기까지 광범위한 장치 안에 들어 있는 운영체제에 적용될 수 있다. 하지만 이들은 모두 동일한 기본적인 오픈소스 소프트웨어를 기반으로 만들어졌다. 이것이 내가 엔지니어로서 쌓았던 경험과 교육 과정을 개발하는 과정에서 축적해온 자료를 기반으로 이 책에서 설명하는 기술이다.
기술은 멈춰 있는 법이 없다. 임베디드 컴퓨팅에 기반을 둔 산업은 주류 컴퓨팅과 마찬가지로 무어의 법칙에 민감하다. 무어의 법칙이 암시하는 기하급수적인 성장은 이 책의 1판이 출간된 이래로 놀랍도록 많은 것이 바뀌었음을 뜻한다. 3판은 리눅스 5.4, Yocto 프로젝트 3.1(Dunfell), Buildroot 2020.02 LTS 등 주요 오픈소스 요소들의 최신 버전을 이용하도록 완전히 개정됐다. Autotools 외에도, 최근 들어 많이 채택되는 최신 빌드 시스템 CMake 역시 다룬다.

목차

  • 1부. 임베디드 리눅스의 요소

    1장. 시작
    __리눅스 선택하기
    __리눅스를 선택하지 말아야 할 때
    __참여 단체들
    __프로젝트 생명주기
    ____임베디드 리눅스의 4요소
    __오픈소스
    __라이선스
    __임베디드 리눅스를 위한 하드웨어 선택하기
    __이 책에서 사용하는 하드웨어
    ____라즈베리 파이 4
    ____비글본 블랙
    ____QEMU
    __개발 환경
    __요약


    2장. 툴체인을 배우자
    __기술적 요구 사항
    __툴체인 소개
    ____툴체인의 종류
    ____CPU 아키텍처
    ____C 라이브러리 고르기
    __툴체인 찾기
    __crosstool-NG를 이용해 툴체인 빌드하기
    ____crosstool-NG 설치
    ____비글본 블랙용 툴체인 빌드
    ____QEMU용 툴체인 빌드
    __툴체인의 구조
    ____크로스 컴파일러를 알아보자
    ____sysroot, 라이브러리, 헤더 파일
    ____툴체인 안의 다른 도구들
    ____C 라이브러리의 요소를 살펴보자
    __라이브러리와 링크하기: 정적 링크와 동적 링크
    ____정적 라이브러리
    ____공유 라이브러리
    __크로스 컴파일 기술
    ____단순 makefile
    ____Autotools
    ____패키지 구성
    ____크로스 컴파일 관련 문제
    ____CMake
    __요약
    __추가 자료


    3장. 부트로더에 대한 모든 것
    __기술적 요구 사항
    __부트로더는 무슨 일을 하는가?
    __부트 순서
    ____1단계: 롬 코드
    ____2단계: SPL
    ____3단계: TPL
    __부트로더에서 커널로 이동
    __장치 트리 소개
    ____장치 트리 기초
    ____reg 프로퍼티
    ____레이블과 인터럽트
    ____장치 트리 인클루드 파일
    ____장치 트리 컴파일하기
    __U-Boot
    ____U-Boot 빌드하기
    ____U-Boot 설치하기
    ____U-Boot 사용하기
    ____리눅스 부팅
    ____U-Boot를 새로운 보드에 이식하기
    ____빌드와 테스트
    ____팔콘 모드
    __요약


    4장. 커널 구성과 빌드
    __기술적 요구 사항
    __커널은 무엇을 하는가?
    __커널 선택하기
    ____커널 개발 주기
    ____안정적 장기 지원 릴리스
    __커널 빌드하기
    ____소스 구하기
    ____커널 구성 이해하기: Kconfig
    ____LOCALVERSION을 이용해 커널 식별하기
    ____언제 커널 모듈을 사용하는가?
    __컴파일하기: Kbuild
    ____어떤 커널 이미지를 컴파일할지 알아내기
    ____빌드 아티팩트
    ____장치 트리 컴파일하기
    ____모듈 컴파일하기
    ____커널 소스 청소하기
    ____라즈베리 파이 4용 64비트 커널 빌드하기
    ____비글본 블랙용 커널 빌드하기
    ____QEMU용 커널 빌드하기
    __커널 부팅하기
    ____라즈베리 파이 4 부팅하기
    ____비글본 블랙 부팅하기
    ____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장. Yocto를 이용한 개발
    __기술적 요구 사항
    __기존 BSP 위에서 빌드
    ____기존 BSP를 빌드
    ____Wi-Fi 제어
    ____블루투스 제어
    ____커스텀 레이어 추가
    __devtool로 변경 사항 캡처
    ____개발 워크플로
    ____새로운 레시피 생성
    ____레시피로 빌드된 소스 수정
    ____레시피를 최신 버전으로 업그레이드
    __나만의 배포판 빌드
    ____할 때와 하지 말아야 할 때
    ____새로운 배포 레이어 생성
    ____배포판 환경 설정
    ____배포판에 더 많은 레시피 추가
    ____런터임 패키지 관리
    __원격 패키지 서버 프로비저닝
    __요약
    __추가 자료


    8장. Yocto의 내부를 살펴보자
    __기술적 요구 사항
    __Yocto의 아키텍처와 워크플로 분석
    ____메타데이터
    ____빌드 태스크
    ____이미지 생성
    __메타데이터를 레이어로 분리
    __빌드 실패에 대한 문제 해결
    ____오류 격리하기
    ____환경 설정 덤프
    ____태스크 로그 읽기
    ____더 많은 로깅 추가
    ____devshell에서 명령 실행
    ____의존성 그래프 작성
    __BitBake 구문과 의미 이해
    ____태스크
    ____의존성
    ____변수
    ____함수
    ____RDEPENDS 재확인
    __요약
    __추가 자료


    2부. 시스템 아키텍처와 설계 결정

    9장. 저장소 전략 수립
    __기술적 요구 사항
    __저장소 옵션
    ____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
    __임시 파일시스템
    __읽기 전용 루트 파일시스템 만들기
    __파일시스템 선택
    __요약
    __추가 자료


    10장. 소프트웨어 업데이트
    __기술적 요구 사항
    __업데이트는 어디에서 시작하는가?
    __무엇을 업데이트해야 하는가?
    ____부트로더
    ____커널
    ____루트 파일시스템
    ____시스템 애플리케이션
    ____장치별 데이터
    ____업데이트가 필요한 컴포넌트
    __소프트웨어 업데이트의 기본
    ____견고한 업데이트
    ____안전한 업데이트
    ____업데이트 보안
    __업데이트 메커니즘 유형
    ____시메트릭 이미지 업데이트
    ____어시메트릭 이미지 업데이트
    ____원자 파일 업데이트
    __OTA 업데이트
    __로컬 업데이트 시 Mender 사용하기
    ____Mender 클라이언트 빌드하기
    __업데이트 설치하기
    __OTA 업데이트 시 Mender 사용하기
    __로컬 업데이트 시 balena 사용하기
    ____계정 생성하기
    ____애플리케이션 생성하기
    ____장치 추가하기
    ____CLI 설치하기
    ____프로젝트 푸시하기
    __요약


    11장. 장치 드라이버 인터페이스
    __기술적 요구 사항
    __장치 드라이버의 역할
    __문자 장치
    __블록 장치
    __네트워크 장치
    __실행 시 드라이버 찾기
    ____Sysfs에서 정보 가져오기
    __적합한 장치 드라이버 찾기
    __사용자 공간의 장치 드라이버
    ____GPIO
    ____LED
    ____I2C
    ____SPI
    __커널 장치 드라이버 작성
    ____캐릭터 드라이버 인터페이스 설계
    ____장치 드라이버의 구조
    ____커널 모듈 컴파일하기
    ____커널 모듈 로딩
    __하드웨어 구성 정보 찾기
    ____장치 트리
    ____플랫폼 데이터
    ____장치 드라이버와 하드웨어의 연동
    __요약
    __추가 자료


    12장. 브레이크아웃 보드를 이용한 프로토타이핑
    __기술적 요구 사항
    __장치 트리의 소스에 회로도 매핑하기
    ____회로도와 데이터 시트 읽기
    ____비글본 블랙에 데비안 설치하기
    ____spidev 활성화하기
    ____장치 트리 커스터마이징하기
    __브레이크아웃 보드를 이용한 프로토타이핑
    ____SPI 점퍼 닫기
    ____GNSS 안테나 부착하기
    ____SPI 헤더 부착하기
    ____SPI 점퍼 와이어 연결하기
    __로직 분석기로 SPI 신호 프로빙하기
    __SPI를 통해 NMEA 메시지 수신하기
    __요약
    __추가 자료


    13장. 시스템 구동: init 프로그램
    __기술적 요구 사항
    __커널 구동 이후
    __init 프로그램의 소개
    __BusyBox init
    ____Buildroot init 스크립트
    __System V init
    ____inittab
    ____init.d 스크립트
    ____새로운 데몬 추가
    ____서비스 시작과 종료
    __systemd
    ____Yocto 프로젝트와 Buildroot에서 system 빌드하기
    ____타깃, 서비스, 유닛의 소개
    ____Systemd로 시스템을 구동하는 방법
    ____직접 만든 서비스 추가
    ____워치독 추가
    ____임베디드 리눅스에서 중요한 점
    __요약
    __추가 자료


    14장. BusyBox runit
    __기술적 요구 사항
    __BusyBox runit 가져오기
    __서비스 디렉터리와 파일 만들기
    ____서비스 디렉터리 레이아웃
    ____서비스 구성
    __서비스 관리
    ____서비스 제어하기
    __다른 서비스에 대한 의존성
    ____시작 의존성
    ____커스텀 시작 의존성
    ____모두 합치기
    __전용 서비스 로깅
    ____어떻게 동작하는가?
    ____서비스에 전용 로깅 추가하기
    ____로그 회전
    __서비스에 시그널 보내기
    __요약
    __추가 자료


    15장. 전원 관리
    __기술적 요구 사항
    __전력 사용량 측정
    __클럭 주파수 스케일링
    ____CPUFreq 드라이버
    ____CPUFreq 사용
    __최적의 idle 상태 선택하기
    ____CPUIdle 드라이버
    ____틱리스 작업
    __주변 기기 전원 끄기
    __시스템을 절전 모드로 전환하기
    ____전력 상태
    ____웨이크업 이벤트
    ____실시간 클럭의 시간 지정 웨이크업
    __요약
    __추가 자료


    3부. 임베디드 애플리케이션 작성하기

    16장. 파이썬 패키징하기
    __기술적 요구 사항
    ____도커 설치하기
    __파이썬 패키징의 기원 추적
    ____distutils
    ____setuptools
    ____setup.py
    __pip로 파이썬 패키지 설치하기
    ____requirements.txt
    __venv를 이용해 파이썬 가상 환경 관리하기
    __conda를 이용해 미리 컴파일된 바이너리 설치하기
    ____환경 관리
    ____패키지 관리
    __도커를 사용해 파이썬 애플리케이션 배포하기
    ____도커파일 해부
    ____도커 이미지 빌드하기
    ____도커 이미지 실행하기
    ____도커 이미지 가져오기
    ____도커 이미지 게시하기
    ____뒷정리
    __요약
    __추가 자료


    17장. 프로세스와 스레드
    __기술적 요구 사항
    __프로세스와 스레드
    __프로세스
    ____새로운 프로세스 만들기
    ____프로세스 종료하기
    ____다른 프로그램 실행하기
    ____데몬
    ____프로세스 간 통신
    __스레드
    ____새로운 스레드 만들기
    ____스레드 종료하기
    ____스레드를 사용하는 프로그램 컴파일하기
    ____스레드 간 통신
    ____상호 배제
    ____조건 바꾸기
    ____문제 나누기
    __ZeroMQ
    ____pyzmq 받기
    ____프로세스 간 메시징
    ____프로세스 내 메시징
    __스케줄링
    ____공평성 대 결정성
    ____시분할 정책
    ____실시간 정책
    ____정책 선택하기
    ____실시간 우선순위 선택하기
    __요약
    __추가 자료


    18장. 메모리 관리
    __기술적 요구 사항
    __가상 메모리 기초
    __커널 공간 메모리 레이아웃
    __커널이 얼마나 많은 메모리를 사용하는가?
    __사용자 공간 메모리 레이아웃
    __프로세스 메모리 맵
    __스와핑
    ____압축 메모리(zram)로 스왑
    __mmap으로 메모리 매핑
    ____mmap을 사용해 독립된 메모리 할당
    ____mmap을 사용해 메모리 공유
    ____mmap을 사용해 장치 메모리에 액세스
    __애플리케이션에서 메모리를 얼마나 사용하고 있는가?
    __프로세스별 메모리 사용량
    ____top과 ps 사용
    ____smem 사용
    ____고려할 만한 다른 도구
    __메모리 누수 식별하기
    ____mtrace
    ____Valgrind
    __메모리 부족
    __요약
    __추가 자료


    4부 - 디버깅과 성능 최적화

    19장. GDB로 디버깅하기
    __기술적 요구 사항
    __GNU 디버거
    __디버깅 준비하기
    __애플리케이션 디버깅
    ____gdbserver를 이용한 원격 디버깅
    ____원격 디버깅을 위한 Yocto 프로젝트 셋업하기
    ____원격 디버깅을 위한 Buildroot 셋업하기
    ____디버깅 시작하기
    ____네이티브 디버깅
    __JIT 디버깅
    __디버깅 포크와 스레드
    __코어 파일
    ____GDB를 이용해 코어 파일 살펴보기
    __GDB 사용자 인터페이스
    ____터미널 사용자 인터페이스
    ____데이터 디스플레이 디버거
    ____비주얼 스튜디오 코드
    __커널 코드 디버깅
    ____kgdb를 사용한 커널 코드 디버깅
    ____디버그 세션 샘플
    ____얼리 코드 디버깅
    ____디버깅 모듈
    ____kdb를 사용한 커널 코드 디버깅
    ____웁스 메시지 살펴보기
    ____웁스 메시지의 보존
    __요약
    __추가 자료


    20장. 프로파일링과 추적
    __기술적 요구 사항
    __관찰자 효과
    ____심볼 테이블과 컴파일 플래그
    __프로파일링 시작하기
    __top을 이용한 프로파일링
    __가난한 사람의 프로파일러
    __perf
    ____perf를 위한 커널 구성
    ____Yocto 프로젝트를 이용해 perf 빌드하기
    ____Buildroot를 이용해 perf 빌드하기
    ____perf를 이용해 프로파일링하기
    ____호출 그래프
    ____perf annotate
    __이벤트 추적
    __Ftrace
    ____Ftrace를 사용하기 위한 준비
    ____Ftrace 사용하기
    ____동적 Ftrace와 트레이스 필터
    ____트레이스 이벤트
    __LTTng 사용하기
    ____LTTng와 Yocto 프로젝트
    ____LTTng와 Buildroot
    ____LTTng를 사용해 커널 추적하기
    __BPF 사용하기
    ____BPF를 위한 커널 구성
    ____Buildroot를 이용해 BCC 툴킷 빌드하기
    ____BPF 추적 도구 사용하기
    __Valgrind 사용하기
    ____Callgrind
    ____Helgrind
    __strace 사용하기
    __요약
    __추가 자료


    21장. 실시간 프로그래밍
    __기술적 요구 사항
    __실시간이란 무엇인가?
    __비결정성의 원인 식별하기
    __스케줄링 지연 이해하기
    __커널 선점
    ____실시간 리눅스 커널(PREEMPT_RT)
    ____스레드 인터럽트 핸들러
    __선점 가능한 커널 잠금
    ____PREEMPT_RT 패치 가져오기
    ____Yocto 프로젝트와 PREEMPT_RT
    __고해상도 타이머
    __페이지 폴트 피하기
    __인터럽트 쉴딩
    __스케줄링 지연 측정하기
    ____cyclictest
    ____Ftrace
    ____cyclictest와 Ftrace를 함께 사용하기
    __요약
    __추가 자료

출판사 서평

◈ 이 책에서 다루는 내용 ◈

◆ Buildroot와 Yocto 프로젝트를 이용해 임베디드 리눅스 시스템을 만든다.
◆ BitBake 빌드 오류를 해결하고 Yocto 개발 워크플로를 간소화한다.
◆ Mender나 balena를 이용해 IoT 장치를 안전하게 업데이트한다.
◆ 회로도를 읽고, 장치 트리를 수정하고, 브레이크아웃 보드를 납땜하고, 로직 분석기로 핀을 프로브해 주변 장치 추가를 프로토타이핑한다.
◆ 커널 장치 드라이버를 작성하지 않고도 하드웨어와 상호작용한다.
◆ 시스템을 BusyBox runit으로 관리되는 서비스로 나눈다.
◆ GDB를 이용해 장치를 원격으로 디버깅하고 perf, ftrace, eBPF, Callgrind 같은 도구를 이용해 시스템의 성능을 측정한다.

◈ 이 책의 대상 독자 ◈
임베디드 컴퓨팅과 리눅스에 관심이 있고 자신들의 지식을 해당 주제의 다양한 분야로 확장하려는 개발자들을 위한 책이다. 리눅스 명령줄(Linux command line)의 기초를 이해하는 독자들이 읽기 적합하며, 프로그래밍 예제에서는 C와 파이썬 언어에 대한 실무 지식이 있다고 가정하고 설명한다. 몇 개의 장은 임베디드 타깃 보드에 들어가는 하드웨어에 초점을 두므로, 하드웨어와 하드웨어 인터페이스에 익숙하면 분명히 해당 경우에 이점이 있을 것이다.

◈ 이 책의 구성 ◈

1장. ‘시작’에서는 임베디드 리눅스 생태계를 살펴보고, 프로젝트를 시작할 때 시스템 설계자가 어떤 선택을 할 수 있는지를 설명한다.
2장. ‘툴체인을 배우자’에서는 툴체인의 요소를 설명하고, 타깃 보드용으로 크로스 컴파일하기 위한 툴체인을 만드는 방법을 보여준다. 어디서 툴체인을 구할 수 있는지 살펴보고, 소스 코드로부터 빌드하는 방법을 자세히 설명한다.
3장. ‘부트로더에 대한 모든 것’에서는 리눅스 커널을 메모리로 로드하는 부트로더의 역할을 설명하고 U-Boot와 Bareboot를 예로 사용한다. 이어서 장치 트리도 설명한다. 장치 트리는 하드웨어의 자세한 내용을 부호화하는 수단으로, 거의 대부분의 임베디드 리눅스 시스템에 쓰인다.
4장. ‘커널 구성과 빌드’에서는 임베디드 시스템용 커널을 고르고 장치 내의 하드웨어를 위해 구성하는 방법에 대한 정보를 제공한다. 리눅스를 새로운 하드웨어에 이식하는 방법도 다룬다.
5장. ‘루트 파일시스템 만들기’에서는 루트 파일시스템 구성법에 대한 단계별 안내를 통해 임베디드 리눅스 구현의 사용자 공간 부분 뒤에 감춰진 아이디어를 소개한다.
6장. ‘빌드 시스템 선택하기’에서는 앞의 네 장에서 설명한 단계를 자동화하는 두 가지 임베디드 리눅스 빌드 시스템(Buildroot와 Yocto 프로젝트)을 다룬다.
7장. ‘Yocto를 이용한 개발’에서는 기존 BSP 레이어 위에 시스템 이미지를 빌드하고, Yocto 확장 SDK를 이용해 온보드 소프트웨어 패키지(onboard software package)를 빌드하고, 런타임 패키지 관리가 포함된 완전한 자신의 임베디드 리눅스 배포판을 작동시키는 방법을 보여
준다.
8장. ‘Yocto의 내부를 살펴보자’에서는 Yocto의 고유한 멀티 레이어 접근 방법에 대한 설명을 포함해, 빌드 워크플로와 아키텍처를 살펴본다. 또한 기초적인 BitBake 문법 및 의미를 실제 레시피recipe 파일에서 뽑아낸 예를 통해 자세히 살펴본다.
9장. ‘저장소 전략 수립’에서는 플래시 메모리를 관리함으로써 생기는, 플래시 칩과 임베디드 MMCeMMC 패키지 등의 문제를 알아본다. 각각에 따라 적용할 수 있는 파일시스템을 설명하고, 이미 배치돼 있는 장치의 펌웨어를 갱신하는 기법도 다룬다.
10장. ‘소프트웨어 업데이트’에서는 완전 관리형 OTAOver The Air를 포함해, 장치가 배치된 다음에 소프트웨어를 업데이트하는 다양한 방법을 검토한다. 논의되는 핵심 주제는 신뢰성과 보안이다.
11장. ‘장치 드라이버 인터페이스’에서는 커널 장치 드라이버가 하드웨어와 상호작용하는 방법을 간단한 드라이버의 작동 예제와 함께 설명한다. 또한 사용자 공간에서 장치 드라이버를 호출하는 다양한 방법도 설명한다.
12장. ‘브레이크아웃 보드를 이용한 프로토타이핑’에서는 미리 만들어진 비글본 블랙(BeagleBone Black)용 데비안 이미지와 주변 기기 브레이크아웃 보드peripheral breakout board를 이용해 하드웨어와 소프트웨어를 빠르게 프로토타이핑하는 방법을 보여준다. 데이터시트를 읽고, 보드의 전선을 연결하고, 장치 트리 바인딩을 멀티플렉스하고, SPI 시그널을 분석하는 방법을 배울 것이다.
13장. ‘시스템 구동: init 프로그램’에서는 나머지 시스템을 시작하는 첫 번째 사용자 공간 프로그램인 init에 대해 이야기한다. 다양한 부류의 임베디드 시스템에 적합한 세 가지 버전의 init 프로그램(비교적 간단한 BusyBox init에서 복잡한 systemd까지)을 설명한다.
14장. ‘BusyBox runit’에서는 Buildroot를 이용해 시스템을 systemd에서 제공하는 프로세스 감시와 로깅이 가능한 분리된 BusyBox runit 서비스로 나누는 방법을 보여준다.
15장. ‘전원 관리’에서는 동적 주파수/전압 제어, 더 깊은 유휴 상태 선택, 시스템 중단system suspend 등 전력 소비를 최소화하도록 리눅스를 튜닝하는 다양한 방법을 고려한다. 목표는 장치가 배터리를 이용해서 더 오래 실행되도록 하고 발열을 줄이는 것이다.
16장. ‘파이썬 패키징하기’에서는 파이썬 모듈을 함께 배포하기 위한 몇 가지 방법을 소개하고 각각의 방법이 적합한 상황을 설명한다. 여기서는 pip, 가상 환경, conda, 도커(Docker)를 다룬다.
17장. ‘프로세스와 스레드’에서는 애플리케이션 프로그래머의 관점에서 임베디드 시스템을 설명한다. 프로세스와 스레드, 프로세스 간 통신, 스케줄링 정책을 살펴본다.
18장. ‘메모리 관리’에서는 가상 메모리의 개념을 살펴보고 주소 공간을 메모리 매핑으로 나누는 방법을 소개한다. 또한 메모리 사용량을 정확히 측정하고 메모리 누수를 감지하는 방법도 설명한다.
19장. ‘GDB로 디버깅하기’에서는 GNU 디버거(GDB)를 디버그 에이전트와 함께 사용해 원격으로 타깃 장치에서 실행되는 애플리케이션을 디버깅하는 방법을 설명한다. 계속해서 이 모델을 확장해 커널 디버그 스텁과 KGDB를 활용해 커널 코드를 디버깅하는 방법도 보여준다.
20장. ‘프로파일링과 추적’에서는 시스템 성능을 측정하는 데 사용할 수 있는 기술을 설명한다. 전체 시스템 프로필에서 시작해 병목 현상으로 인해 성능이 저하되는 특정 영역으로 좁혀간다. 또한 애플리케이션에서 스레드 동기화와 메모리 할당의 정확성을 검사하는 도구인 Valgrind를 알아본다.
21장. ‘실시간 프로그래밍’에서는 커널 구성과 실시간 PREEMPT_RT 커널 패치 등을 비롯해 리눅스에서의 실시간 프로그래밍에 대해 자세히 설명하고, 실시간 대기 시간을 측정하는 도구들도 살펴본다. 커널 추적 도구인 Ftrace를 이용해 커널 지연 시간을 측정하고 다양한 커널 구성의 효과를 보여준다.

◈ 옮긴이의 말 ◈

2007년 안드로이드가 발표된 이후 리눅스 커널은 임베디드 장치에서, 어쩌면 PC를 포함한 모든 디지털 기기에서 가장 널리 쓰이는 운영체제 커널로 자리매김했다. 안드로이드 외에 삼성전자의 스마트 TV에 쓰이는 Tizen(https://www.tizen.org)과, 미국 팜(Palm)사가 개발한 후 HP를 거쳐 LG전자 스마트 TV에 탑재된 webOS(http://webostv.developer.lge.com)도 리눅스에 기반을 두고 있다. 또한 자동차 업계에서도 리눅스를 이용한 범용 플랫폼을 만들고자 계속 노력 중이다.
이런 흐름 속에서 이 책의 2판에 이어 3판을 번역하게 돼 기쁘다. 이 책은 임베디드 리눅스를 이용해 장치를 만들 때 고려해야 할 하드웨어 관련 사항, 툴체인과 부트로더 선택, 커널 구성과 루트 파일시스템 생성, 빌드 시스템 선택, 플래시 메모리, 장치 드라이버, 시스템 부트 과정뿐 아니라 만들어진 임베디드 리눅스 플랫폼 위에서 프로그래밍할 때 고려해야 할 프로세스와 스레드, 메모리 관리, 디버깅, 프로파일링, 실시간 프로그래밍 관련 내용 등도 다룬다. 3판에서는 리눅스와 Yocto 프로젝트 버전을 비롯해 전체적으로 최신 내용을 반영해 업데이트되고 상세한 설명이 추가됐으며, 모던 빌드 시스템인 CMake와 파이썬 관련 내용이 추가됐다.
임베디드 리눅스 플랫폼을 만들고 그 위에서 프로그래밍하기 위한 전반적인 내용을 다루고 있으므로, 기존에 RTOS를 사용하다가 리눅스로 전환하려는 사람들에게 도움이 될 것이다. 빌드 시스템의 경우 요즘 리눅스에 기반을 둔 플랫폼과 애플리케이션들을 한꺼번에 빌드하도록 도와주는 Yocto 프로젝트가 많이 쓰이고 있는데, 이 역시 다루고 있으므로 유용하다. 또한 스레드에 대해서도 일반 스케줄링 정책과 실시간 스케줄링 정책을 구별해 설명하고 있어 그 차이를 이해하는 데 도움을 줄 것이다.
리눅스는 임베디드 시스템뿐만 아니라 전통적으로 유닉스가 주로 쓰이던 서버에도 널리 사용된다. 메모리 크기만 다를 뿐 기본적인 작동 방식은 같으므로, 리눅스에 익숙하면 임베디드 시스템에서 서버에 이르기까지 쉽게 적용해 사용할 수 있다는 뜻이다.
2판을 번역한 세 역자가 다시 힘을 모았다. 바쁜 와중에도 애써주신 두 분께 감사드리며, 좋은 기회를 주신 에이콘출판사 여러분께 다시 한 번 감사드린다.
내가 처음으로 임베디드 시스템 소프트웨어를 개발하던 때에 비해 개발 환경이 많이 좋아졌고 임베디드 시스템의 성능도 획기적으로 향상돼 응용할 수 있는 영역이 매우 넓어졌으므로, 이 책을 통해 많은 분이 흥미로운 임베디드 시스템 소프트웨어를 개발할 수 있게 되길 바란다.
- 김기주

기본정보

상품정보 테이블로 ISBN, 발행(출시)일자 , 쪽수, 크기, 총권수, 시리즈명, 원서(번역서)명/저자명을(를) 나타낸 표입니다.
ISBN 9791161758008
발행(출시)일자 2023년 11월 30일
쪽수 884쪽
크기
234 * 187 * 50 mm / 1702 g
총권수 1권
시리즈명
임베디드 시스템
원서(번역서)명/저자명 Mastering Embedded Linux Programming - Third Edition/Vasquez, Frank

Klover 리뷰 (7)

구매 후 리뷰 작성 시, e교환권 200원 적립

10점 중 10점
/도움돼요
감사히 잘보겠습니다
10점 중 10점
/추천해요
내용이 잘 정리되어 있네요. 좋아요~
10점 중 10점
/도움돼요
임베디드 리눅스 프로그래밍 관련 내용이 잘 정리되어있어요
10점 중 10점
/최고예요
임베디드 리눅스에 모든것이 있네요.
10점 중 10점
/도움돼요
도움이 많이 되어요
10점 중 10점
/도움돼요
제가 찾던 책이에요.
10점 중 10점
/추천해요
잘 읽고 있습니다.

문장수집 (1)

문장수집 안내
문장수집은 고객님들이 직접 선정한 책의 좋은 문장을 보여주는 교보문고의 새로운 서비스입니다. 마음을 두드린 문장들을 기록하고 좋은 글귀들은 "좋아요“ 하여 모아보세요. 도서 문장과 무관한 내용 등록 시 별도 통보 없이 삭제될 수 있습니다.
리워드 안내
구매 후 90일 이내에 문장수집 작성 시 e교환권 100원을 적립해드립니다.
e교환권은 적립 일로부터 180일 동안 사용 가능합니다. 리워드는 작성 후 다음 날 제공되며, 발송 전 작성 시 발송 완료 후 익일 제공됩니다.
리워드는 한 상품에 최초 1회만 제공됩니다.
주문취소/반품/절판/품절 시 리워드 대상에서 제외됩니다.
판매가 5,000원 미만 상품의 경우 리워드 지급 대상에서 제외됩니다. (2024년 9월 30일부터 적용)

구매 후 리뷰 작성 시, e교환권 100원 적립

임베디드 리눅스
임베디드 리눅스 프로그래밍 완전정복

교환/반품/품절 안내

상품 설명에 반품/교환 관련한 안내가 있는 경우 그 내용을 우선으로 합니다. (업체 사정에 따라 달라질 수 있습니다.)

소스 코드: 더 비기닝
이벤트
  • sam x 한샘 [똑똑한sam]
  • 2025 1학기 대학교재전
01 / 02
TOP